blob: 06ae7c654b02971d9d55a1bcd9f3d1dfe97e2679 [file] [log] [blame]
Guido van Rossum290900a1997-09-26 21:51:21 +00001/* This module makes GNU readline available to Python. It has ideas
2 * contributed by Lee Busby, LLNL, and William Magro, Cornell Theory
Michael W. Hudson9a8c3142005-03-30 10:09:12 +00003 * Center. The completer interface was inspired by Lele Gaifax. More
4 * recently, it was largely rewritten by Guido van Rossum.
Guido van Rossum0969d361997-08-05 21:27:50 +00005 */
6
Guido van Rossum290900a1997-09-26 21:51:21 +00007/* Standard definitions */
Guido van Rossum0969d361997-08-05 21:27:50 +00008#include "Python.h"
9#include <setjmp.h>
10#include <signal.h>
Guido van Rossum290900a1997-09-26 21:51:21 +000011#include <errno.h>
Michael W. Hudson8da2b012004-10-07 13:46:33 +000012#include <sys/time.h>
Guido van Rossum0969d361997-08-05 21:27:50 +000013
Skip Montanaro7befb992004-02-10 16:50:21 +000014#if defined(HAVE_SETLOCALE)
Guido van Rossum60c8a3a2002-10-09 21:27:33 +000015/* GNU readline() mistakenly sets the LC_CTYPE locale.
16 * This is evil. Only the user or the app's main() should do this!
17 * We must save and restore the locale around the rl_initialize() call.
18 */
19#define SAVE_LOCALE
20#include <locale.h>
21#endif
22
Neal Norwitz5eaf7722006-07-16 02:15:27 +000023#ifdef SAVE_LOCALE
24# define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
25#else
Brett Cannon23b581a2010-05-04 00:52:41 +000026# define RESTORE_LOCALE(sl)
Neal Norwitz5eaf7722006-07-16 02:15:27 +000027#endif
28
Guido van Rossum290900a1997-09-26 21:51:21 +000029/* GNU readline definitions */
Guido van Rossumb0e51b22001-04-13 18:14:27 +000030#undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
Guido van Rossumbcc20741998-08-04 22:53:56 +000031#include <readline/readline.h>
32#include <readline/history.h>
Guido van Rossum730806d1998-04-10 22:27:42 +000033
Guido van Rossum353ae582001-07-10 16:45:32 +000034#ifdef HAVE_RL_COMPLETION_MATCHES
Guido van Rossum74f31432003-01-07 20:01:29 +000035#define completion_matches(x, y) \
Antoine Pitrouc83ea132010-05-09 14:46:46 +000036 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
Neal Norwitzbd538702007-04-19 05:52:37 +000037#else
Martin v. Löwisbb86d832008-11-04 20:40:09 +000038#if defined(_RL_FUNCTION_TYPEDEF)
Neal Norwitzbd538702007-04-19 05:52:37 +000039extern char **completion_matches(char *, rl_compentry_func_t *);
Martin v. Löwisbb86d832008-11-04 20:40:09 +000040#else
Ronald Oussoren333fca92010-02-11 13:13:08 +000041
42#if !defined(__APPLE__)
Martin v. Löwisbb86d832008-11-04 20:40:09 +000043extern char **completion_matches(char *, CPFunction *);
44#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000045#endif
Ronald Oussoren333fca92010-02-11 13:13:08 +000046#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000047
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000048#ifdef __APPLE__
49/*
50 * It is possible to link the readline module to the readline
Brett Cannon23b581a2010-05-04 00:52:41 +000051 * emulation library of editline/libedit.
52 *
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000053 * On OSX this emulation library is not 100% API compatible
54 * with the "real" readline and cannot be detected at compile-time,
55 * hence we use a runtime check to detect if we're using libedit
56 *
Ned Deily62a19292013-10-12 15:45:25 -070057 * Currently there is one known API incompatibility:
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000058 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
Ned Deily62a19292013-10-12 15:45:25 -070059 * index with older versions of libedit's emulation.
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000060 * - Note that replace_history and remove_history use a 0-based index
Ned Deily62a19292013-10-12 15:45:25 -070061 * with both implementations.
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000062 */
63static int using_libedit_emulation = 0;
64static const char libedit_version_tag[] = "EditLine wrapper";
Ned Deily62a19292013-10-12 15:45:25 -070065
66static int libedit_history_start = 0;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000067#endif /* __APPLE__ */
68
Martin v. Löwisf3548942007-11-12 04:53:02 +000069static void
70on_completion_display_matches_hook(char **matches,
Antoine Pitrouc83ea132010-05-09 14:46:46 +000071 int num_matches, int max_length);
Martin v. Löwisf3548942007-11-12 04:53:02 +000072
Guido van Rossum0969d361997-08-05 21:27:50 +000073
Antoine Pitrou31bc8be2013-05-06 21:51:03 +020074/* Memory allocated for rl_completer_word_break_characters
75 (see issue #17289 for the motivation). */
76static char *completer_word_break_characters;
77
Guido van Rossum290900a1997-09-26 21:51:21 +000078/* Exported function to send one line to readline's init file parser */
79
80static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000081parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +000082{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000083 char *s, *copy;
84 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
85 return NULL;
86 /* Make a copy -- rl_parse_and_bind() modifies its argument */
87 /* Bernard Herzog */
88 copy = malloc(1 + strlen(s));
89 if (copy == NULL)
90 return PyErr_NoMemory();
91 strcpy(copy, s);
92 rl_parse_and_bind(copy);
93 free(copy); /* Free the copy */
94 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +000095}
96
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000097PyDoc_STRVAR(doc_parse_and_bind,
98"parse_and_bind(string) -> None\n\
99Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000100
101
102/* Exported function to parse a readline init file */
103
104static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000105read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000106{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000107 char *s = NULL;
108 if (!PyArg_ParseTuple(args, "|z:read_init_file", &s))
109 return NULL;
110 errno = rl_read_init_file(s);
111 if (errno)
112 return PyErr_SetFromErrno(PyExc_IOError);
113 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000114}
115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000116PyDoc_STRVAR(doc_read_init_file,
117"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000118Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000119The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000120
121
Skip Montanaro28067822000-07-06 18:55:12 +0000122/* Exported function to load a readline history file */
123
124static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000125read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000126{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000127 char *s = NULL;
128 if (!PyArg_ParseTuple(args, "|z:read_history_file", &s))
129 return NULL;
130 errno = read_history(s);
131 if (errno)
132 return PyErr_SetFromErrno(PyExc_IOError);
133 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000134}
135
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000136static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000137PyDoc_STRVAR(doc_read_history_file,
138"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000139Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000140The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000141
142
143/* Exported function to save a readline history file */
144
145static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000146write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000147{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000148 char *s = NULL;
149 if (!PyArg_ParseTuple(args, "|z:write_history_file", &s))
150 return NULL;
151 errno = write_history(s);
152 if (!errno && _history_length >= 0)
153 history_truncate_file(s, _history_length);
154 if (errno)
155 return PyErr_SetFromErrno(PyExc_IOError);
156 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000157}
158
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000159PyDoc_STRVAR(doc_write_history_file,
160"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000161Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000162The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000163
164
Guido van Rossum74f31432003-01-07 20:01:29 +0000165/* Set history length */
166
167static PyObject*
168set_history_length(PyObject *self, PyObject *args)
169{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000170 int length = _history_length;
171 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
172 return NULL;
173 _history_length = length;
174 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000175}
176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000177PyDoc_STRVAR(set_history_length_doc,
178"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000179set the maximal number of items which will be written to\n\
180the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000182
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000183
Guido van Rossum74f31432003-01-07 20:01:29 +0000184/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000185
186static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000187get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000188{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000189 return PyInt_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000190}
191
Guido van Rossum74f31432003-01-07 20:01:29 +0000192PyDoc_STRVAR(get_history_length_doc,
193"get_history_length() -> int\n\
194return the maximum number of items that will be written to\n\
195the history file.");
196
197
Martin v. Löwis0daad592001-09-30 21:09:59 +0000198/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000199
Martin v. Löwis0daad592001-09-30 21:09:59 +0000200static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000201set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000202{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000203 PyObject *function = Py_None;
204 char buf[80];
205 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
206 if (!PyArg_ParseTuple(args, buf, &function))
207 return NULL;
208 if (function == Py_None) {
Serhiy Storchaka98a97222014-02-09 13:14:04 +0200209 Py_CLEAR(*hook_var);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000210 }
211 else if (PyCallable_Check(function)) {
212 PyObject *tmp = *hook_var;
213 Py_INCREF(function);
214 *hook_var = function;
215 Py_XDECREF(tmp);
216 }
217 else {
218 PyOS_snprintf(buf, sizeof(buf),
219 "set_%.50s(func): argument not callable",
220 funcname);
221 PyErr_SetString(PyExc_TypeError, buf);
222 return NULL;
223 }
224 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000225}
226
Guido van Rossum74f31432003-01-07 20:01:29 +0000227
Martin v. Löwis0daad592001-09-30 21:09:59 +0000228/* Exported functions to specify hook functions in Python */
229
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000230static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000231static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000232
233#ifdef HAVE_RL_PRE_INPUT_HOOK
234static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000235#endif
236
237static PyObject *
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000238set_completion_display_matches_hook(PyObject *self, PyObject *args)
239{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000240 PyObject *result = set_hook("completion_display_matches_hook",
241 &completion_display_matches_hook, args);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000242#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000243 /* We cannot set this hook globally, since it replaces the
244 default completion display. */
245 rl_completion_display_matches_hook =
246 completion_display_matches_hook ?
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000247#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000248 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000249#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000250 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000251#endif
Martin v. Löwisf3548942007-11-12 04:53:02 +0000252#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000253 return result;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000254
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000255}
256
257PyDoc_STRVAR(doc_set_completion_display_matches_hook,
258"set_completion_display_matches_hook([function]) -> None\n\
259Set or remove the completion display function.\n\
260The function is called as\n\
261 function(substitution, [matches], longest_match_length)\n\
262once each time matches need to be displayed.");
263
264static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000265set_startup_hook(PyObject *self, PyObject *args)
266{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000267 return set_hook("startup_hook", &startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000268}
269
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000270PyDoc_STRVAR(doc_set_startup_hook,
271"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000272Set or remove the startup_hook function.\n\
273The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000274before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000275
Guido van Rossum74f31432003-01-07 20:01:29 +0000276
Martin v. Löwis0daad592001-09-30 21:09:59 +0000277#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000278
279/* Set pre-input hook */
280
Martin v. Löwis0daad592001-09-30 21:09:59 +0000281static PyObject *
282set_pre_input_hook(PyObject *self, PyObject *args)
283{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000284 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000285}
286
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287PyDoc_STRVAR(doc_set_pre_input_hook,
288"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000289Set or remove the pre_input_hook function.\n\
290The function is called with no arguments after the first prompt\n\
291has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000292characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000293
Martin v. Löwis0daad592001-09-30 21:09:59 +0000294#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000295
Guido van Rossum74f31432003-01-07 20:01:29 +0000296
Guido van Rossum290900a1997-09-26 21:51:21 +0000297/* Exported function to specify a word completer in Python */
298
299static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000300
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000301static PyObject *begidx = NULL;
302static PyObject *endidx = NULL;
303
Guido van Rossum74f31432003-01-07 20:01:29 +0000304
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000305/* Get the completion type for the scope of the tab-completion */
306static PyObject *
307get_completion_type(PyObject *self, PyObject *noarg)
308{
309 return PyInt_FromLong(rl_completion_type);
310}
311
312PyDoc_STRVAR(doc_get_completion_type,
313"get_completion_type() -> int\n\
314Get the type of completion being attempted.");
315
316
Guido van Rossum74f31432003-01-07 20:01:29 +0000317/* Get the beginning index for the scope of the tab-completion */
318
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000319static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000320get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000321{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000322 Py_INCREF(begidx);
323 return begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000324}
325
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000326PyDoc_STRVAR(doc_get_begidx,
327"get_begidx() -> int\n\
328get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000329
Guido van Rossum74f31432003-01-07 20:01:29 +0000330
331/* Get the ending index for the scope of the tab-completion */
332
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000333static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000334get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000335{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000336 Py_INCREF(endidx);
337 return endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000338}
339
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000340PyDoc_STRVAR(doc_get_endidx,
341"get_endidx() -> int\n\
342get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000343
344
Guido van Rossum74f31432003-01-07 20:01:29 +0000345/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000346
347static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000348set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000349{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000350 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000351
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200352 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000353 return NULL;
354 }
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200355 /* Keep a reference to the allocated memory in the module state in case
356 some other module modifies rl_completer_word_break_characters
357 (see issue #17289). */
358 free(completer_word_break_characters);
359 completer_word_break_characters = strdup(break_chars);
360 if (completer_word_break_characters) {
361 rl_completer_word_break_characters = completer_word_break_characters;
362 Py_RETURN_NONE;
363 }
364 else
365 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000366}
367
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000368PyDoc_STRVAR(doc_set_completer_delims,
369"set_completer_delims(string) -> None\n\
370set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000371
Mark Dickinson4ee98532010-08-03 16:18:39 +0000372/* _py_free_history_entry: Utility function to free a history entry. */
373
374#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
375
376/* Readline version >= 5.0 introduced a timestamp field into the history entry
377 structure; this needs to be freed to avoid a memory leak. This version of
378 readline also introduced the handy 'free_history_entry' function, which
379 takes care of the timestamp. */
380
381static void
382_py_free_history_entry(HIST_ENTRY *entry)
383{
384 histdata_t data = free_history_entry(entry);
385 free(data);
386}
387
388#else
389
390/* No free_history_entry function; free everything manually. */
391
392static void
393_py_free_history_entry(HIST_ENTRY *entry)
394{
395 if (entry->line)
396 free((void *)entry->line);
397 if (entry->data)
398 free(entry->data);
399 free(entry);
400}
401
402#endif
403
Skip Montanaroe5069012004-08-15 14:32:06 +0000404static PyObject *
405py_remove_history(PyObject *self, PyObject *args)
406{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000407 int entry_number;
408 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000409
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000410 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
411 return NULL;
412 if (entry_number < 0) {
413 PyErr_SetString(PyExc_ValueError,
414 "History index cannot be negative");
415 return NULL;
416 }
417 entry = remove_history(entry_number);
418 if (!entry) {
419 PyErr_Format(PyExc_ValueError,
420 "No history item at position %d",
421 entry_number);
422 return NULL;
423 }
424 /* free memory allocated for the history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000425 _py_free_history_entry(entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000426 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000427}
428
429PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000430"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000431remove history item given by its position");
432
433static PyObject *
434py_replace_history(PyObject *self, PyObject *args)
435{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000436 int entry_number;
437 char *line;
438 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000439
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000440 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
441 &line)) {
442 return NULL;
443 }
444 if (entry_number < 0) {
445 PyErr_SetString(PyExc_ValueError,
446 "History index cannot be negative");
447 return NULL;
448 }
449 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
450 if (!old_entry) {
451 PyErr_Format(PyExc_ValueError,
452 "No history item at position %d",
453 entry_number);
454 return NULL;
455 }
456 /* free memory allocated for the old history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000457 _py_free_history_entry(old_entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000458 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000459}
460
461PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000462"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000463replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000464
465/* Add a line to the history buffer */
466
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000467static PyObject *
468py_add_history(PyObject *self, PyObject *args)
469{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000470 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000471
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000472 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
473 return NULL;
474 }
475 add_history(line);
476 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000477}
478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479PyDoc_STRVAR(doc_add_history,
480"add_history(string) -> None\n\
481add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000482
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000483
Guido van Rossum74f31432003-01-07 20:01:29 +0000484/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000485
486static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000487get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000488{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000489 return PyString_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000490}
Guido van Rossum74f31432003-01-07 20:01:29 +0000491
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000492PyDoc_STRVAR(doc_get_completer_delims,
493"get_completer_delims() -> string\n\
494get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000495
Guido van Rossum74f31432003-01-07 20:01:29 +0000496
497/* Set the completer function */
498
Guido van Rossum290900a1997-09-26 21:51:21 +0000499static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000500set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000501{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000502 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000503}
504
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000505PyDoc_STRVAR(doc_set_completer,
506"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000507Set or remove the completer function.\n\
508The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000509for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000510It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000511
Guido van Rossum74f31432003-01-07 20:01:29 +0000512
Michael W. Hudson796df152003-01-30 10:12:51 +0000513static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000514get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000515{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000516 if (completer == NULL) {
517 Py_RETURN_NONE;
518 }
519 Py_INCREF(completer);
520 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000521}
522
523PyDoc_STRVAR(doc_get_completer,
524"get_completer() -> function\n\
525\n\
526Returns current completer function.");
527
Mark Dickinson0f981282010-08-03 16:54:19 +0000528/* Private function to get current length of history. XXX It may be
529 * possible to replace this with a direct use of history_length instead,
530 * but it's not clear whether BSD's libedit keeps history_length up to date.
531 * See issue #8065.*/
532
533static int
534_py_get_history_length(void)
535{
536 HISTORY_STATE *hist_st = history_get_history_state();
537 int length = hist_st->length;
538 /* the history docs don't say so, but the address of hist_st changes each
539 time history_get_history_state is called which makes me think it's
540 freshly malloc'd memory... on the other hand, the address of the last
541 line stays the same as long as history isn't extended, so it appears to
542 be malloc'd but managed by the history package... */
543 free(hist_st);
544 return length;
545}
546
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000547/* Exported function to get any element of history */
548
549static PyObject *
550get_history_item(PyObject *self, PyObject *args)
551{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000552 int idx = 0;
553 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000554
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000555 if (!PyArg_ParseTuple(args, "i:index", &idx))
556 return NULL;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000557#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000558 if (using_libedit_emulation) {
Ned Deily62a19292013-10-12 15:45:25 -0700559 /* Older versions of libedit's readline emulation
560 * use 0-based indexes, while readline and newer
561 * versions of libedit use 1-based indexes.
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000562 */
Mark Dickinson0f981282010-08-03 16:54:19 +0000563 int length = _py_get_history_length();
Ned Deily62a19292013-10-12 15:45:25 -0700564
565 idx = idx - 1 + libedit_history_start;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000566
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000567 /*
568 * Apple's readline emulation crashes when
569 * the index is out of range, therefore
570 * test for that and fail gracefully.
571 */
Ned Deily62a19292013-10-12 15:45:25 -0700572 if (idx < (0 + libedit_history_start)
573 || idx >= (length + libedit_history_start)) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000574 Py_RETURN_NONE;
575 }
576 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000577#endif /* __APPLE__ */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000578 if ((hist_ent = history_get(idx)))
579 return PyString_FromString(hist_ent->line);
580 else {
581 Py_RETURN_NONE;
582 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000583}
584
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000585PyDoc_STRVAR(doc_get_history_item,
586"get_history_item() -> string\n\
587return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000588
Guido van Rossum74f31432003-01-07 20:01:29 +0000589
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000590/* Exported function to get current length of history */
591
592static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000593get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000594{
Mark Dickinson0f981282010-08-03 16:54:19 +0000595 return PyInt_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000596}
597
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000598PyDoc_STRVAR(doc_get_current_history_length,
599"get_current_history_length() -> integer\n\
600return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000601
Guido van Rossum74f31432003-01-07 20:01:29 +0000602
Guido van Rossum79378ff1997-10-07 14:53:21 +0000603/* Exported function to read the current line buffer */
604
605static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000606get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000607{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000608 return PyString_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000609}
610
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000611PyDoc_STRVAR(doc_get_line_buffer,
612"get_line_buffer() -> string\n\
613return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000614
Guido van Rossum74f31432003-01-07 20:01:29 +0000615
Martin v. Löwise7a97962003-09-20 16:08:33 +0000616#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
617
618/* Exported function to clear the current history */
619
620static PyObject *
621py_clear_history(PyObject *self, PyObject *noarg)
622{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000623 clear_history();
624 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000625}
626
627PyDoc_STRVAR(doc_clear_history,
628"clear_history() -> None\n\
629Clear the current readline history.");
630#endif
631
632
Guido van Rossum79378ff1997-10-07 14:53:21 +0000633/* Exported function to insert text into the line buffer */
634
635static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000636insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000637{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000638 char *s;
639 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
640 return NULL;
641 rl_insert_text(s);
642 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000643}
644
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000645PyDoc_STRVAR(doc_insert_text,
646"insert_text(string) -> None\n\
647Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000648
Guido van Rossum74f31432003-01-07 20:01:29 +0000649
650/* Redisplay the line buffer */
651
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000652static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000653redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000654{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000655 rl_redisplay();
656 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000657}
658
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000659PyDoc_STRVAR(doc_redisplay,
660"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000661Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000662contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000663
Guido van Rossum74f31432003-01-07 20:01:29 +0000664
Guido van Rossum290900a1997-09-26 21:51:21 +0000665/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000666
667static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000668{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000669 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
670 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
671 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
672 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
673 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
674 {"read_history_file", read_history_file,
675 METH_VARARGS, doc_read_history_file},
676 {"write_history_file", write_history_file,
677 METH_VARARGS, doc_write_history_file},
678 {"get_history_item", get_history_item,
679 METH_VARARGS, doc_get_history_item},
680 {"get_current_history_length", (PyCFunction)get_current_history_length,
681 METH_NOARGS, doc_get_current_history_length},
682 {"set_history_length", set_history_length,
683 METH_VARARGS, set_history_length_doc},
684 {"get_history_length", get_history_length,
685 METH_NOARGS, get_history_length_doc},
686 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
687 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
688 {"get_completion_type", get_completion_type,
689 METH_NOARGS, doc_get_completion_type},
690 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
691 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000692
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000693 {"set_completer_delims", set_completer_delims,
694 METH_VARARGS, doc_set_completer_delims},
695 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
696 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
697 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
698 {"get_completer_delims", get_completer_delims,
699 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000700
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000701 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
702 METH_VARARGS, doc_set_completion_display_matches_hook},
703 {"set_startup_hook", set_startup_hook,
704 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000705#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000706 {"set_pre_input_hook", set_pre_input_hook,
707 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000708#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000709#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000710 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000711#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000712 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000713};
714
Guido van Rossum05ac4492003-01-07 20:04:12 +0000715
Martin v. Löwis0daad592001-09-30 21:09:59 +0000716/* C function to call the Python hooks. */
717
718static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000719on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000720{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000721 int result = 0;
722 if (func != NULL) {
723 PyObject *r;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000724#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000725 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000726#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000727 r = PyObject_CallFunction(func, NULL);
728 if (r == NULL)
729 goto error;
730 if (r == Py_None)
731 result = 0;
732 else {
733 result = PyInt_AsLong(r);
734 if (result == -1 && PyErr_Occurred())
735 goto error;
736 }
737 Py_DECREF(r);
738 goto done;
739 error:
740 PyErr_Clear();
741 Py_XDECREF(r);
742 done:
Christian Heimes1bc4af42007-11-12 18:58:08 +0000743#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000744 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000745#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000746 return result;
747 }
748 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000749}
750
751static int
Ned Deilyb0fd12d2014-02-05 16:52:26 -0800752#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000753on_startup_hook(void)
Ned Deilyb0fd12d2014-02-05 16:52:26 -0800754#else
755on_startup_hook()
756#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000757{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000758 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000759}
760
761#ifdef HAVE_RL_PRE_INPUT_HOOK
762static int
Ned Deilyb0fd12d2014-02-05 16:52:26 -0800763#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000764on_pre_input_hook(void)
Ned Deilyb0fd12d2014-02-05 16:52:26 -0800765#else
766on_pre_input_hook()
767#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000768{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000769 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000770}
771#endif
772
Guido van Rossum05ac4492003-01-07 20:04:12 +0000773
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000774/* C function to call the Python completion_display_matches */
775
776static void
777on_completion_display_matches_hook(char **matches,
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000778 int num_matches, int max_length)
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000779{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000780 int i;
781 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000782#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000783 PyGILState_STATE gilstate = PyGILState_Ensure();
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000784#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000785 m = PyList_New(num_matches);
786 if (m == NULL)
787 goto error;
788 for (i = 0; i < num_matches; i++) {
789 s = PyString_FromString(matches[i+1]);
790 if (s == NULL)
791 goto error;
792 if (PyList_SetItem(m, i, s) == -1)
793 goto error;
794 }
Martin v. Löwisf3548942007-11-12 04:53:02 +0000795
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000796 r = PyObject_CallFunction(completion_display_matches_hook,
797 "sOi", matches[0], m, max_length);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000798
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000799 Py_DECREF(m); m=NULL;
Brett Cannon23b581a2010-05-04 00:52:41 +0000800
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000801 if (r == NULL ||
802 (r != Py_None && PyInt_AsLong(r) == -1 && PyErr_Occurred())) {
803 goto error;
804 }
805 Py_XDECREF(r); r=NULL;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000806
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000807 if (0) {
808 error:
809 PyErr_Clear();
810 Py_XDECREF(m);
811 Py_XDECREF(r);
812 }
Christian Heimes1bc4af42007-11-12 18:58:08 +0000813#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000814 PyGILState_Release(gilstate);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000815#endif
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000816}
817
818
Guido van Rossum290900a1997-09-26 21:51:21 +0000819/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000820
Guido van Rossum290900a1997-09-26 21:51:21 +0000821static char *
Neal Norwitzbd538702007-04-19 05:52:37 +0000822on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000823{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000824 char *result = NULL;
825 if (completer != NULL) {
826 PyObject *r;
Brett Cannon23b581a2010-05-04 00:52:41 +0000827#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000828 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000829#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000830 rl_attempted_completion_over = 1;
831 r = PyObject_CallFunction(completer, "si", text, state);
832 if (r == NULL)
833 goto error;
834 if (r == Py_None) {
835 result = NULL;
836 }
837 else {
838 char *s = PyString_AsString(r);
839 if (s == NULL)
840 goto error;
841 result = strdup(s);
842 }
843 Py_DECREF(r);
844 goto done;
845 error:
846 PyErr_Clear();
847 Py_XDECREF(r);
848 done:
Brett Cannon23b581a2010-05-04 00:52:41 +0000849#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000850 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000851#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000852 return result;
853 }
854 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000855}
856
Guido van Rossum290900a1997-09-26 21:51:21 +0000857
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000858/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000859 * before calling the normal completer */
860
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000861static char **
Benjamin Peterson0ac0ead2014-01-24 11:44:16 -0500862flex_complete(const char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000863{
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000864#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000865 rl_completion_append_character ='\0';
Antoine Pitroud9ff74e2009-10-26 19:16:46 +0000866#endif
867#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000868 rl_completion_suppress_append = 0;
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000869#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000870 Py_XDECREF(begidx);
871 Py_XDECREF(endidx);
872 begidx = PyInt_FromLong((long) start);
873 endidx = PyInt_FromLong((long) end);
874 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000875}
876
Guido van Rossum05ac4492003-01-07 20:04:12 +0000877
Guido van Rossum290900a1997-09-26 21:51:21 +0000878/* Helper to initialize GNU readline properly. */
879
880static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000881setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000882{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000883#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000884 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
885 if (!saved_locale)
886 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000887#endif
888
R. David Murray7a697252010-12-18 03:52:09 +0000889#ifdef __APPLE__
Victor Stinner63a47472014-07-24 12:22:24 +0200890 /* the libedit readline emulation resets key bindings etc
R. David Murray7a697252010-12-18 03:52:09 +0000891 * when calling rl_initialize. So call it upfront
892 */
893 if (using_libedit_emulation)
894 rl_initialize();
Ned Deily62a19292013-10-12 15:45:25 -0700895
896 /* Detect if libedit's readline emulation uses 0-based
897 * indexing or 1-based indexing.
898 */
899 add_history("1");
900 if (history_get(1) == NULL) {
901 libedit_history_start = 0;
902 } else {
903 libedit_history_start = 1;
904 }
905 clear_history();
R. David Murray7a697252010-12-18 03:52:09 +0000906#endif /* __APPLE__ */
907
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000908 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000909
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000910 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000911#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000912 /* Allow $if term= in .inputrc to work */
913 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000914#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000915 /* Force rebind of TAB to insert-tab */
916 rl_bind_key('\t', rl_insert);
917 /* Bind both ESC-TAB and ESC-ESC to the completion function */
918 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
919 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
920 /* Set our hook functions */
Benjamin Peterson0ac0ead2014-01-24 11:44:16 -0500921 rl_startup_hook = on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000922#ifdef HAVE_RL_PRE_INPUT_HOOK
Benjamin Peterson0ac0ead2014-01-24 11:44:16 -0500923 rl_pre_input_hook = on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000924#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000925 /* Set our completion function */
Benjamin Peterson0ac0ead2014-01-24 11:44:16 -0500926 rl_attempted_completion_function = flex_complete;
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000927 /* Set Python word break characters */
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200928 completer_word_break_characters =
929 rl_completer_word_break_characters =
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000930 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
931 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000932
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000933 begidx = PyInt_FromLong(0L);
934 endidx = PyInt_FromLong(0L);
Victor Stinner63a47472014-07-24 12:22:24 +0200935
Benjamin Petersonb47b54c2014-08-20 17:30:40 -0500936#ifndef __APPLE__
Victor Stinner63a47472014-07-24 12:22:24 +0200937 if (!isatty(STDOUT_FILENO)) {
938 /* Issue #19884: stdout is no a terminal. Disable meta modifier
939 keys to not write the ANSI sequence "\033[1034h" into stdout. On
940 terminals supporting 8 bit characters like TERM=xterm-256color
941 (which is now the default Fedora since Fedora 18), the meta key is
942 used to enable support of 8 bit characters (ANSI sequence
Benjamin Petersonb47b54c2014-08-20 17:30:40 -0500943 "\033[1034h").
944
945 With libedit, this call makes readline() crash. */
Victor Stinner63a47472014-07-24 12:22:24 +0200946 rl_variable_bind ("enable-meta-key", "off");
947 }
Benjamin Petersonb47b54c2014-08-20 17:30:40 -0500948#endif
Victor Stinner63a47472014-07-24 12:22:24 +0200949
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000950 /* Initialize (allows .inputrc to override)
951 *
952 * XXX: A bug in the readline-2.2 library causes a memory leak
953 * inside this function. Nothing we can do about it.
954 */
R. David Murray7a697252010-12-18 03:52:09 +0000955#ifdef __APPLE__
956 if (using_libedit_emulation)
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200957 rl_read_init_file(NULL);
R. David Murray7a697252010-12-18 03:52:09 +0000958 else
959#endif /* __APPLE__ */
960 rl_initialize();
Victor Stinner63a47472014-07-24 12:22:24 +0200961
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000962 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000963}
964
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000965/* Wrapper around GNU readline that handles signals differently. */
966
967
968#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
969
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000970static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000971static void
972rlhandler(char *text)
973{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000974 completed_input_string = text;
975 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000976}
977
978extern PyThreadState* _PyOS_ReadlineTState;
979
980static char *
981readline_until_enter_or_signal(char *prompt, int *signal)
982{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000983 char * not_done_reading = "";
984 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000985
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000986 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000987#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000988 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000989#endif
990
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000991 rl_callback_handler_install (prompt, rlhandler);
992 FD_ZERO(&selectset);
Brett Cannon23b581a2010-05-04 00:52:41 +0000993
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000994 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000995
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000996 while (completed_input_string == not_done_reading) {
997 int has_input = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000998
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000999 while (!has_input)
1000 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Andrew M. Kuchling62e475b2006-09-07 13:59:38 +00001001
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001002 /* [Bug #1552726] Only limit the pause if an input hook has been
1003 defined. */
1004 struct timeval *timeoutp = NULL;
1005 if (PyOS_InputHook)
1006 timeoutp = &timeout;
1007 FD_SET(fileno(rl_instream), &selectset);
1008 /* select resets selectset if no input was available */
1009 has_input = select(fileno(rl_instream) + 1, &selectset,
1010 NULL, NULL, timeoutp);
1011 if(PyOS_InputHook) PyOS_InputHook();
1012 }
Michael W. Hudson8da2b012004-10-07 13:46:33 +00001013
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001014 if(has_input > 0) {
1015 rl_callback_read_char();
1016 }
1017 else if (errno == EINTR) {
1018 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001019#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001020 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001021#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001022 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001023#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001024 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001025#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001026 if (s < 0) {
1027 rl_free_line_state();
1028 rl_cleanup_after_signal();
1029 rl_callback_handler_remove();
1030 *signal = 1;
1031 completed_input_string = NULL;
1032 }
1033 }
1034 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001035
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001036 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001037}
1038
1039
1040#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001041
1042/* Interrupt handler */
1043
1044static jmp_buf jbuf;
1045
Guido van Rossum0969d361997-08-05 21:27:50 +00001046/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001047static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001048onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001049{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001051}
1052
Guido van Rossum290900a1997-09-26 21:51:21 +00001053
Guido van Rossum0969d361997-08-05 21:27:50 +00001054static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001055readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001056{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001057 PyOS_sighandler_t old_inthandler;
1058 char *p;
Brett Cannon23b581a2010-05-04 00:52:41 +00001059
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001060 *signal = 0;
Guido van Rossum74f31432003-01-07 20:01:29 +00001061
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001062 old_inthandler = PyOS_setsig(SIGINT, onintr);
1063 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001064#ifdef HAVE_SIGRELSE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001065 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1066 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001067#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001068 PyOS_setsig(SIGINT, old_inthandler);
1069 *signal = 1;
1070 return NULL;
1071 }
1072 rl_event_hook = PyOS_InputHook;
1073 p = readline(prompt);
1074 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001075
1076 return p;
1077}
1078#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1079
1080
1081static char *
1082call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1083{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001084 size_t n;
1085 char *p, *q;
1086 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001087
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001088#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001089 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1090 if (!saved_locale)
1091 Py_FatalError("not enough memory to save locale");
Nadeem Vawda1efd9822013-02-02 20:52:54 +01001092 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001093#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001094
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001095 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1096 rl_instream = sys_stdin;
1097 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001098#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001099 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001100#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001101 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001102
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001103 p = readline_until_enter_or_signal(prompt, &signal);
Brett Cannon23b581a2010-05-04 00:52:41 +00001104
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001105 /* we got an interrupt signal */
1106 if (signal) {
1107 RESTORE_LOCALE(saved_locale)
1108 return NULL;
1109 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001110
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001111 /* We got an EOF, return a empty string. */
1112 if (p == NULL) {
1113 p = PyMem_Malloc(1);
1114 if (p != NULL)
1115 *p = '\0';
1116 RESTORE_LOCALE(saved_locale)
1117 return p;
1118 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001119
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001120 /* we have a valid line */
1121 n = strlen(p);
1122 if (n > 0) {
1123 const char *line;
Mark Dickinson0f981282010-08-03 16:54:19 +00001124 int length = _py_get_history_length();
1125 if (length > 0)
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001126#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001127 if (using_libedit_emulation) {
Ned Deily62a19292013-10-12 15:45:25 -07001128 /* handle older 0-based or newer 1-based indexing */
1129 line = history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001130 } else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001131#endif /* __APPLE__ */
Mark Dickinson0f981282010-08-03 16:54:19 +00001132 line = history_get(length)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001133 else
1134 line = "";
1135 if (strcmp(p, line))
1136 add_history(p);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001137 }
1138 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1139 release the original. */
1140 q = p;
1141 p = PyMem_Malloc(n+2);
1142 if (p != NULL) {
1143 strncpy(p, q, n);
1144 p[n] = '\n';
1145 p[n+1] = '\0';
1146 }
1147 free(q);
1148 RESTORE_LOCALE(saved_locale)
1149 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001150}
1151
Guido van Rossum290900a1997-09-26 21:51:21 +00001152
1153/* Initialize the module */
1154
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001155PyDoc_STRVAR(doc_module,
1156"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001157
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001158#ifdef __APPLE__
1159PyDoc_STRVAR(doc_module_le,
1160"Importing this module enables command line editing using libedit readline.");
1161#endif /* __APPLE__ */
1162
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001163PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001164initreadline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001165{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001166 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001167
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001168#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001169 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1170 using_libedit_emulation = 1;
1171 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001172
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001173 if (using_libedit_emulation)
1174 m = Py_InitModule4("readline", readline_methods, doc_module_le,
1175 (PyObject *)NULL, PYTHON_API_VERSION);
1176 else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001177
1178#endif /* __APPLE__ */
1179
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001180 m = Py_InitModule4("readline", readline_methods, doc_module,
1181 (PyObject *)NULL, PYTHON_API_VERSION);
1182 if (m == NULL)
1183 return;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001184
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001185 PyOS_ReadlineFunctionPointer = call_readline;
1186 setup_readline();
Antoine Pitrou06c14972014-11-04 14:52:10 +01001187
1188 PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
1189 PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
Guido van Rossum0969d361997-08-05 21:27:50 +00001190}