blob: 0b043aee862331d633c86e472c824d85ee88053a [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) {
209 Py_XDECREF(*hook_var);
210 *hook_var = NULL;
211 }
212 else if (PyCallable_Check(function)) {
213 PyObject *tmp = *hook_var;
214 Py_INCREF(function);
215 *hook_var = function;
216 Py_XDECREF(tmp);
217 }
218 else {
219 PyOS_snprintf(buf, sizeof(buf),
220 "set_%.50s(func): argument not callable",
221 funcname);
222 PyErr_SetString(PyExc_TypeError, buf);
223 return NULL;
224 }
225 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000226}
227
Guido van Rossum74f31432003-01-07 20:01:29 +0000228
Martin v. Löwis0daad592001-09-30 21:09:59 +0000229/* Exported functions to specify hook functions in Python */
230
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000231static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000232static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000233
234#ifdef HAVE_RL_PRE_INPUT_HOOK
235static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000236#endif
237
238static PyObject *
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000239set_completion_display_matches_hook(PyObject *self, PyObject *args)
240{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000241 PyObject *result = set_hook("completion_display_matches_hook",
242 &completion_display_matches_hook, args);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000243#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000244 /* We cannot set this hook globally, since it replaces the
245 default completion display. */
246 rl_completion_display_matches_hook =
247 completion_display_matches_hook ?
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000248#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000249 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000250#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000251 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000252#endif
Martin v. Löwisf3548942007-11-12 04:53:02 +0000253#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000254 return result;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000255
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000256}
257
258PyDoc_STRVAR(doc_set_completion_display_matches_hook,
259"set_completion_display_matches_hook([function]) -> None\n\
260Set or remove the completion display function.\n\
261The function is called as\n\
262 function(substitution, [matches], longest_match_length)\n\
263once each time matches need to be displayed.");
264
265static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000266set_startup_hook(PyObject *self, PyObject *args)
267{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000268 return set_hook("startup_hook", &startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000269}
270
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000271PyDoc_STRVAR(doc_set_startup_hook,
272"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000273Set or remove the startup_hook function.\n\
274The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000275before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000276
Guido van Rossum74f31432003-01-07 20:01:29 +0000277
Martin v. Löwis0daad592001-09-30 21:09:59 +0000278#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000279
280/* Set pre-input hook */
281
Martin v. Löwis0daad592001-09-30 21:09:59 +0000282static PyObject *
283set_pre_input_hook(PyObject *self, PyObject *args)
284{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000285 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000286}
287
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000288PyDoc_STRVAR(doc_set_pre_input_hook,
289"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000290Set or remove the pre_input_hook function.\n\
291The function is called with no arguments after the first prompt\n\
292has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000294
Martin v. Löwis0daad592001-09-30 21:09:59 +0000295#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000296
Guido van Rossum74f31432003-01-07 20:01:29 +0000297
Guido van Rossum290900a1997-09-26 21:51:21 +0000298/* Exported function to specify a word completer in Python */
299
300static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000301
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000302static PyObject *begidx = NULL;
303static PyObject *endidx = NULL;
304
Guido van Rossum74f31432003-01-07 20:01:29 +0000305
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000306/* Get the completion type for the scope of the tab-completion */
307static PyObject *
308get_completion_type(PyObject *self, PyObject *noarg)
309{
310 return PyInt_FromLong(rl_completion_type);
311}
312
313PyDoc_STRVAR(doc_get_completion_type,
314"get_completion_type() -> int\n\
315Get the type of completion being attempted.");
316
317
Guido van Rossum74f31432003-01-07 20:01:29 +0000318/* Get the beginning index for the scope of the tab-completion */
319
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000320static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000321get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000322{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000323 Py_INCREF(begidx);
324 return begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000325}
326
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000327PyDoc_STRVAR(doc_get_begidx,
328"get_begidx() -> int\n\
329get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000330
Guido van Rossum74f31432003-01-07 20:01:29 +0000331
332/* Get the ending index for the scope of the tab-completion */
333
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000334static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000335get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000336{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000337 Py_INCREF(endidx);
338 return endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000339}
340
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000341PyDoc_STRVAR(doc_get_endidx,
342"get_endidx() -> int\n\
343get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000344
345
Guido van Rossum74f31432003-01-07 20:01:29 +0000346/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000347
348static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000349set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000350{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000351 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000352
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200353 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000354 return NULL;
355 }
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200356 /* Keep a reference to the allocated memory in the module state in case
357 some other module modifies rl_completer_word_break_characters
358 (see issue #17289). */
359 free(completer_word_break_characters);
360 completer_word_break_characters = strdup(break_chars);
361 if (completer_word_break_characters) {
362 rl_completer_word_break_characters = completer_word_break_characters;
363 Py_RETURN_NONE;
364 }
365 else
366 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000367}
368
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000369PyDoc_STRVAR(doc_set_completer_delims,
370"set_completer_delims(string) -> None\n\
371set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000372
Mark Dickinson4ee98532010-08-03 16:18:39 +0000373/* _py_free_history_entry: Utility function to free a history entry. */
374
375#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
376
377/* Readline version >= 5.0 introduced a timestamp field into the history entry
378 structure; this needs to be freed to avoid a memory leak. This version of
379 readline also introduced the handy 'free_history_entry' function, which
380 takes care of the timestamp. */
381
382static void
383_py_free_history_entry(HIST_ENTRY *entry)
384{
385 histdata_t data = free_history_entry(entry);
386 free(data);
387}
388
389#else
390
391/* No free_history_entry function; free everything manually. */
392
393static void
394_py_free_history_entry(HIST_ENTRY *entry)
395{
396 if (entry->line)
397 free((void *)entry->line);
398 if (entry->data)
399 free(entry->data);
400 free(entry);
401}
402
403#endif
404
Skip Montanaroe5069012004-08-15 14:32:06 +0000405static PyObject *
406py_remove_history(PyObject *self, PyObject *args)
407{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000408 int entry_number;
409 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000410
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000411 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
412 return NULL;
413 if (entry_number < 0) {
414 PyErr_SetString(PyExc_ValueError,
415 "History index cannot be negative");
416 return NULL;
417 }
418 entry = remove_history(entry_number);
419 if (!entry) {
420 PyErr_Format(PyExc_ValueError,
421 "No history item at position %d",
422 entry_number);
423 return NULL;
424 }
425 /* free memory allocated for the history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000426 _py_free_history_entry(entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000427 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000428}
429
430PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000431"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000432remove history item given by its position");
433
434static PyObject *
435py_replace_history(PyObject *self, PyObject *args)
436{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000437 int entry_number;
438 char *line;
439 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000440
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000441 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
442 &line)) {
443 return NULL;
444 }
445 if (entry_number < 0) {
446 PyErr_SetString(PyExc_ValueError,
447 "History index cannot be negative");
448 return NULL;
449 }
450 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
451 if (!old_entry) {
452 PyErr_Format(PyExc_ValueError,
453 "No history item at position %d",
454 entry_number);
455 return NULL;
456 }
457 /* free memory allocated for the old history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000458 _py_free_history_entry(old_entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000459 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000460}
461
462PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000463"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000464replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000465
466/* Add a line to the history buffer */
467
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000468static PyObject *
469py_add_history(PyObject *self, PyObject *args)
470{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000471 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000472
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000473 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
474 return NULL;
475 }
476 add_history(line);
477 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000478}
479
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000480PyDoc_STRVAR(doc_add_history,
481"add_history(string) -> None\n\
482add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000483
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000484
Guido van Rossum74f31432003-01-07 20:01:29 +0000485/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000486
487static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000488get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000489{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000490 return PyString_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000491}
Guido van Rossum74f31432003-01-07 20:01:29 +0000492
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000493PyDoc_STRVAR(doc_get_completer_delims,
494"get_completer_delims() -> string\n\
495get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000496
Guido van Rossum74f31432003-01-07 20:01:29 +0000497
498/* Set the completer function */
499
Guido van Rossum290900a1997-09-26 21:51:21 +0000500static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000501set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000502{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000503 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000504}
505
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000506PyDoc_STRVAR(doc_set_completer,
507"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000508Set or remove the completer function.\n\
509The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000510for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000511It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000512
Guido van Rossum74f31432003-01-07 20:01:29 +0000513
Michael W. Hudson796df152003-01-30 10:12:51 +0000514static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000515get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000516{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000517 if (completer == NULL) {
518 Py_RETURN_NONE;
519 }
520 Py_INCREF(completer);
521 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000522}
523
524PyDoc_STRVAR(doc_get_completer,
525"get_completer() -> function\n\
526\n\
527Returns current completer function.");
528
Mark Dickinson0f981282010-08-03 16:54:19 +0000529/* Private function to get current length of history. XXX It may be
530 * possible to replace this with a direct use of history_length instead,
531 * but it's not clear whether BSD's libedit keeps history_length up to date.
532 * See issue #8065.*/
533
534static int
535_py_get_history_length(void)
536{
537 HISTORY_STATE *hist_st = history_get_history_state();
538 int length = hist_st->length;
539 /* the history docs don't say so, but the address of hist_st changes each
540 time history_get_history_state is called which makes me think it's
541 freshly malloc'd memory... on the other hand, the address of the last
542 line stays the same as long as history isn't extended, so it appears to
543 be malloc'd but managed by the history package... */
544 free(hist_st);
545 return length;
546}
547
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000548/* Exported function to get any element of history */
549
550static PyObject *
551get_history_item(PyObject *self, PyObject *args)
552{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000553 int idx = 0;
554 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000555
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000556 if (!PyArg_ParseTuple(args, "i:index", &idx))
557 return NULL;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000558#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000559 if (using_libedit_emulation) {
Ned Deily62a19292013-10-12 15:45:25 -0700560 /* Older versions of libedit's readline emulation
561 * use 0-based indexes, while readline and newer
562 * versions of libedit use 1-based indexes.
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000563 */
Mark Dickinson0f981282010-08-03 16:54:19 +0000564 int length = _py_get_history_length();
Ned Deily62a19292013-10-12 15:45:25 -0700565
566 idx = idx - 1 + libedit_history_start;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000567
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000568 /*
569 * Apple's readline emulation crashes when
570 * the index is out of range, therefore
571 * test for that and fail gracefully.
572 */
Ned Deily62a19292013-10-12 15:45:25 -0700573 if (idx < (0 + libedit_history_start)
574 || idx >= (length + libedit_history_start)) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000575 Py_RETURN_NONE;
576 }
577 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000578#endif /* __APPLE__ */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000579 if ((hist_ent = history_get(idx)))
580 return PyString_FromString(hist_ent->line);
581 else {
582 Py_RETURN_NONE;
583 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000584}
585
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000586PyDoc_STRVAR(doc_get_history_item,
587"get_history_item() -> string\n\
588return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000589
Guido van Rossum74f31432003-01-07 20:01:29 +0000590
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000591/* Exported function to get current length of history */
592
593static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000594get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000595{
Mark Dickinson0f981282010-08-03 16:54:19 +0000596 return PyInt_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000597}
598
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000599PyDoc_STRVAR(doc_get_current_history_length,
600"get_current_history_length() -> integer\n\
601return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000602
Guido van Rossum74f31432003-01-07 20:01:29 +0000603
Guido van Rossum79378ff1997-10-07 14:53:21 +0000604/* Exported function to read the current line buffer */
605
606static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000607get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000608{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000609 return PyString_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000610}
611
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000612PyDoc_STRVAR(doc_get_line_buffer,
613"get_line_buffer() -> string\n\
614return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000615
Guido van Rossum74f31432003-01-07 20:01:29 +0000616
Martin v. Löwise7a97962003-09-20 16:08:33 +0000617#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
618
619/* Exported function to clear the current history */
620
621static PyObject *
622py_clear_history(PyObject *self, PyObject *noarg)
623{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000624 clear_history();
625 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000626}
627
628PyDoc_STRVAR(doc_clear_history,
629"clear_history() -> None\n\
630Clear the current readline history.");
631#endif
632
633
Guido van Rossum79378ff1997-10-07 14:53:21 +0000634/* Exported function to insert text into the line buffer */
635
636static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000637insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000638{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000639 char *s;
640 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
641 return NULL;
642 rl_insert_text(s);
643 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000644}
645
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000646PyDoc_STRVAR(doc_insert_text,
647"insert_text(string) -> None\n\
648Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000649
Guido van Rossum74f31432003-01-07 20:01:29 +0000650
651/* Redisplay the line buffer */
652
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000653static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000654redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000655{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000656 rl_redisplay();
657 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000658}
659
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000660PyDoc_STRVAR(doc_redisplay,
661"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000662Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000663contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000664
Guido van Rossum74f31432003-01-07 20:01:29 +0000665
Guido van Rossum290900a1997-09-26 21:51:21 +0000666/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000667
668static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000669{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000670 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
671 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
672 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
673 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
674 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
675 {"read_history_file", read_history_file,
676 METH_VARARGS, doc_read_history_file},
677 {"write_history_file", write_history_file,
678 METH_VARARGS, doc_write_history_file},
679 {"get_history_item", get_history_item,
680 METH_VARARGS, doc_get_history_item},
681 {"get_current_history_length", (PyCFunction)get_current_history_length,
682 METH_NOARGS, doc_get_current_history_length},
683 {"set_history_length", set_history_length,
684 METH_VARARGS, set_history_length_doc},
685 {"get_history_length", get_history_length,
686 METH_NOARGS, get_history_length_doc},
687 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
688 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
689 {"get_completion_type", get_completion_type,
690 METH_NOARGS, doc_get_completion_type},
691 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
692 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000693
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000694 {"set_completer_delims", set_completer_delims,
695 METH_VARARGS, doc_set_completer_delims},
696 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
697 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
698 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
699 {"get_completer_delims", get_completer_delims,
700 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000701
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000702 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
703 METH_VARARGS, doc_set_completion_display_matches_hook},
704 {"set_startup_hook", set_startup_hook,
705 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000706#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000707 {"set_pre_input_hook", set_pre_input_hook,
708 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000709#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000710#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000711 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000712#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000713 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000714};
715
Guido van Rossum05ac4492003-01-07 20:04:12 +0000716
Martin v. Löwis0daad592001-09-30 21:09:59 +0000717/* C function to call the Python hooks. */
718
719static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000720on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000721{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000722 int result = 0;
723 if (func != NULL) {
724 PyObject *r;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000725#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000726 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000727#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000728 r = PyObject_CallFunction(func, NULL);
729 if (r == NULL)
730 goto error;
731 if (r == Py_None)
732 result = 0;
733 else {
734 result = PyInt_AsLong(r);
735 if (result == -1 && PyErr_Occurred())
736 goto error;
737 }
738 Py_DECREF(r);
739 goto done;
740 error:
741 PyErr_Clear();
742 Py_XDECREF(r);
743 done:
Christian Heimes1bc4af42007-11-12 18:58:08 +0000744#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000745 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000746#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000747 return result;
748 }
749 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000750}
751
752static int
753on_startup_hook(void)
754{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000755 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000756}
757
758#ifdef HAVE_RL_PRE_INPUT_HOOK
759static int
760on_pre_input_hook(void)
761{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000762 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000763}
764#endif
765
Guido van Rossum05ac4492003-01-07 20:04:12 +0000766
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000767/* C function to call the Python completion_display_matches */
768
769static void
770on_completion_display_matches_hook(char **matches,
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000771 int num_matches, int max_length)
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000772{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000773 int i;
774 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000775#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000776 PyGILState_STATE gilstate = PyGILState_Ensure();
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000777#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000778 m = PyList_New(num_matches);
779 if (m == NULL)
780 goto error;
781 for (i = 0; i < num_matches; i++) {
782 s = PyString_FromString(matches[i+1]);
783 if (s == NULL)
784 goto error;
785 if (PyList_SetItem(m, i, s) == -1)
786 goto error;
787 }
Martin v. Löwisf3548942007-11-12 04:53:02 +0000788
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000789 r = PyObject_CallFunction(completion_display_matches_hook,
790 "sOi", matches[0], m, max_length);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000791
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000792 Py_DECREF(m); m=NULL;
Brett Cannon23b581a2010-05-04 00:52:41 +0000793
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000794 if (r == NULL ||
795 (r != Py_None && PyInt_AsLong(r) == -1 && PyErr_Occurred())) {
796 goto error;
797 }
798 Py_XDECREF(r); r=NULL;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000799
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000800 if (0) {
801 error:
802 PyErr_Clear();
803 Py_XDECREF(m);
804 Py_XDECREF(r);
805 }
Christian Heimes1bc4af42007-11-12 18:58:08 +0000806#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000807 PyGILState_Release(gilstate);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000808#endif
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000809}
810
811
Guido van Rossum290900a1997-09-26 21:51:21 +0000812/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000813
Guido van Rossum290900a1997-09-26 21:51:21 +0000814static char *
Neal Norwitzbd538702007-04-19 05:52:37 +0000815on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000816{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000817 char *result = NULL;
818 if (completer != NULL) {
819 PyObject *r;
Brett Cannon23b581a2010-05-04 00:52:41 +0000820#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000821 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000822#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000823 rl_attempted_completion_over = 1;
824 r = PyObject_CallFunction(completer, "si", text, state);
825 if (r == NULL)
826 goto error;
827 if (r == Py_None) {
828 result = NULL;
829 }
830 else {
831 char *s = PyString_AsString(r);
832 if (s == NULL)
833 goto error;
834 result = strdup(s);
835 }
836 Py_DECREF(r);
837 goto done;
838 error:
839 PyErr_Clear();
840 Py_XDECREF(r);
841 done:
Brett Cannon23b581a2010-05-04 00:52:41 +0000842#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000843 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000844#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000845 return result;
846 }
847 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000848}
849
Guido van Rossum290900a1997-09-26 21:51:21 +0000850
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000851/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000852 * before calling the normal completer */
853
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000854static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000855flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000856{
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000857#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000858 rl_completion_append_character ='\0';
Antoine Pitroud9ff74e2009-10-26 19:16:46 +0000859#endif
860#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000861 rl_completion_suppress_append = 0;
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000862#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000863 Py_XDECREF(begidx);
864 Py_XDECREF(endidx);
865 begidx = PyInt_FromLong((long) start);
866 endidx = PyInt_FromLong((long) end);
867 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000868}
869
Guido van Rossum05ac4492003-01-07 20:04:12 +0000870
Guido van Rossum290900a1997-09-26 21:51:21 +0000871/* Helper to initialize GNU readline properly. */
872
873static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000874setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000875{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000876#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000877 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
878 if (!saved_locale)
879 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000880#endif
881
R. David Murray7a697252010-12-18 03:52:09 +0000882#ifdef __APPLE__
883 /* the libedit readline emulation resets key bindings etc
884 * when calling rl_initialize. So call it upfront
885 */
886 if (using_libedit_emulation)
887 rl_initialize();
Ned Deily62a19292013-10-12 15:45:25 -0700888
889 /* Detect if libedit's readline emulation uses 0-based
890 * indexing or 1-based indexing.
891 */
892 add_history("1");
893 if (history_get(1) == NULL) {
894 libedit_history_start = 0;
895 } else {
896 libedit_history_start = 1;
897 }
898 clear_history();
R. David Murray7a697252010-12-18 03:52:09 +0000899#endif /* __APPLE__ */
900
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000901 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000902
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000903 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000904#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000905 /* Allow $if term= in .inputrc to work */
906 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000907#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000908 /* Force rebind of TAB to insert-tab */
909 rl_bind_key('\t', rl_insert);
910 /* Bind both ESC-TAB and ESC-ESC to the completion function */
911 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
912 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
913 /* Set our hook functions */
914 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000915#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000916 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000917#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000918 /* Set our completion function */
919 rl_attempted_completion_function = (CPPFunction *)flex_complete;
920 /* Set Python word break characters */
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200921 completer_word_break_characters =
922 rl_completer_word_break_characters =
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000923 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
924 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000925
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000926 begidx = PyInt_FromLong(0L);
927 endidx = PyInt_FromLong(0L);
928 /* Initialize (allows .inputrc to override)
929 *
930 * XXX: A bug in the readline-2.2 library causes a memory leak
931 * inside this function. Nothing we can do about it.
932 */
R. David Murray7a697252010-12-18 03:52:09 +0000933#ifdef __APPLE__
934 if (using_libedit_emulation)
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200935 rl_read_init_file(NULL);
R. David Murray7a697252010-12-18 03:52:09 +0000936 else
937#endif /* __APPLE__ */
938 rl_initialize();
939
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000940 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000941}
942
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000943/* Wrapper around GNU readline that handles signals differently. */
944
945
946#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
947
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000948static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000949static void
950rlhandler(char *text)
951{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000952 completed_input_string = text;
953 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000954}
955
956extern PyThreadState* _PyOS_ReadlineTState;
957
958static char *
959readline_until_enter_or_signal(char *prompt, int *signal)
960{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000961 char * not_done_reading = "";
962 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000963
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000964 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000965#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000966 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000967#endif
968
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000969 rl_callback_handler_install (prompt, rlhandler);
970 FD_ZERO(&selectset);
Brett Cannon23b581a2010-05-04 00:52:41 +0000971
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000972 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000973
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000974 while (completed_input_string == not_done_reading) {
975 int has_input = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000976
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000977 while (!has_input)
978 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Andrew M. Kuchling62e475b2006-09-07 13:59:38 +0000979
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000980 /* [Bug #1552726] Only limit the pause if an input hook has been
981 defined. */
982 struct timeval *timeoutp = NULL;
983 if (PyOS_InputHook)
984 timeoutp = &timeout;
985 FD_SET(fileno(rl_instream), &selectset);
986 /* select resets selectset if no input was available */
987 has_input = select(fileno(rl_instream) + 1, &selectset,
988 NULL, NULL, timeoutp);
989 if(PyOS_InputHook) PyOS_InputHook();
990 }
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000991
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000992 if(has_input > 0) {
993 rl_callback_read_char();
994 }
995 else if (errno == EINTR) {
996 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000997#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000998 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000999#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001000 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001001#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001002 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001003#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001004 if (s < 0) {
1005 rl_free_line_state();
1006 rl_cleanup_after_signal();
1007 rl_callback_handler_remove();
1008 *signal = 1;
1009 completed_input_string = NULL;
1010 }
1011 }
1012 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001013
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001014 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001015}
1016
1017
1018#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001019
1020/* Interrupt handler */
1021
1022static jmp_buf jbuf;
1023
Guido van Rossum0969d361997-08-05 21:27:50 +00001024/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001025static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001026onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001027{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001028 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001029}
1030
Guido van Rossum290900a1997-09-26 21:51:21 +00001031
Guido van Rossum0969d361997-08-05 21:27:50 +00001032static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001033readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001034{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001035 PyOS_sighandler_t old_inthandler;
1036 char *p;
Brett Cannon23b581a2010-05-04 00:52:41 +00001037
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001038 *signal = 0;
Guido van Rossum74f31432003-01-07 20:01:29 +00001039
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001040 old_inthandler = PyOS_setsig(SIGINT, onintr);
1041 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001042#ifdef HAVE_SIGRELSE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001043 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1044 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001045#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001046 PyOS_setsig(SIGINT, old_inthandler);
1047 *signal = 1;
1048 return NULL;
1049 }
1050 rl_event_hook = PyOS_InputHook;
1051 p = readline(prompt);
1052 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001053
1054 return p;
1055}
1056#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1057
1058
1059static char *
1060call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1061{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001062 size_t n;
1063 char *p, *q;
1064 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001065
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001066#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001067 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1068 if (!saved_locale)
1069 Py_FatalError("not enough memory to save locale");
Nadeem Vawda1efd9822013-02-02 20:52:54 +01001070 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001071#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001072
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001073 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1074 rl_instream = sys_stdin;
1075 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001076#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001077 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001078#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001079 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001080
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001081 p = readline_until_enter_or_signal(prompt, &signal);
Brett Cannon23b581a2010-05-04 00:52:41 +00001082
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001083 /* we got an interrupt signal */
1084 if (signal) {
1085 RESTORE_LOCALE(saved_locale)
1086 return NULL;
1087 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001088
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001089 /* We got an EOF, return a empty string. */
1090 if (p == NULL) {
1091 p = PyMem_Malloc(1);
1092 if (p != NULL)
1093 *p = '\0';
1094 RESTORE_LOCALE(saved_locale)
1095 return p;
1096 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001097
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001098 /* we have a valid line */
1099 n = strlen(p);
1100 if (n > 0) {
1101 const char *line;
Mark Dickinson0f981282010-08-03 16:54:19 +00001102 int length = _py_get_history_length();
1103 if (length > 0)
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001104#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001105 if (using_libedit_emulation) {
Ned Deily62a19292013-10-12 15:45:25 -07001106 /* handle older 0-based or newer 1-based indexing */
1107 line = history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001108 } else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001109#endif /* __APPLE__ */
Mark Dickinson0f981282010-08-03 16:54:19 +00001110 line = history_get(length)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001111 else
1112 line = "";
1113 if (strcmp(p, line))
1114 add_history(p);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001115 }
1116 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1117 release the original. */
1118 q = p;
1119 p = PyMem_Malloc(n+2);
1120 if (p != NULL) {
1121 strncpy(p, q, n);
1122 p[n] = '\n';
1123 p[n+1] = '\0';
1124 }
1125 free(q);
1126 RESTORE_LOCALE(saved_locale)
1127 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001128}
1129
Guido van Rossum290900a1997-09-26 21:51:21 +00001130
1131/* Initialize the module */
1132
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001133PyDoc_STRVAR(doc_module,
1134"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001135
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001136#ifdef __APPLE__
1137PyDoc_STRVAR(doc_module_le,
1138"Importing this module enables command line editing using libedit readline.");
1139#endif /* __APPLE__ */
1140
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001141PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001142initreadline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001143{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001144 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001145
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001146#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001147 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1148 using_libedit_emulation = 1;
1149 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001150
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001151 if (using_libedit_emulation)
1152 m = Py_InitModule4("readline", readline_methods, doc_module_le,
1153 (PyObject *)NULL, PYTHON_API_VERSION);
1154 else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001155
1156#endif /* __APPLE__ */
1157
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001158 m = Py_InitModule4("readline", readline_methods, doc_module,
1159 (PyObject *)NULL, PYTHON_API_VERSION);
1160 if (m == NULL)
1161 return;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001162
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001163 PyOS_ReadlineFunctionPointer = call_readline;
1164 setup_readline();
Guido van Rossum0969d361997-08-05 21:27:50 +00001165}