blob: f19fa0bc9f58758a2ff7e608320a3bad73e04318 [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__
890 /* the libedit readline emulation resets key bindings etc
891 * 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);
935 /* Initialize (allows .inputrc to override)
936 *
937 * XXX: A bug in the readline-2.2 library causes a memory leak
938 * inside this function. Nothing we can do about it.
939 */
R. David Murray7a697252010-12-18 03:52:09 +0000940#ifdef __APPLE__
941 if (using_libedit_emulation)
Antoine Pitrou31bc8be2013-05-06 21:51:03 +0200942 rl_read_init_file(NULL);
R. David Murray7a697252010-12-18 03:52:09 +0000943 else
944#endif /* __APPLE__ */
945 rl_initialize();
946
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000947 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000948}
949
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000950/* Wrapper around GNU readline that handles signals differently. */
951
952
953#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
954
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000955static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000956static void
957rlhandler(char *text)
958{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000959 completed_input_string = text;
960 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000961}
962
963extern PyThreadState* _PyOS_ReadlineTState;
964
965static char *
966readline_until_enter_or_signal(char *prompt, int *signal)
967{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000968 char * not_done_reading = "";
969 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000970
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000971 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000972#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000973 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000974#endif
975
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000976 rl_callback_handler_install (prompt, rlhandler);
977 FD_ZERO(&selectset);
Brett Cannon23b581a2010-05-04 00:52:41 +0000978
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000979 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000980
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000981 while (completed_input_string == not_done_reading) {
982 int has_input = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000983
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000984 while (!has_input)
985 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Andrew M. Kuchling62e475b2006-09-07 13:59:38 +0000986
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000987 /* [Bug #1552726] Only limit the pause if an input hook has been
988 defined. */
989 struct timeval *timeoutp = NULL;
990 if (PyOS_InputHook)
991 timeoutp = &timeout;
992 FD_SET(fileno(rl_instream), &selectset);
993 /* select resets selectset if no input was available */
994 has_input = select(fileno(rl_instream) + 1, &selectset,
995 NULL, NULL, timeoutp);
996 if(PyOS_InputHook) PyOS_InputHook();
997 }
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000998
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000999 if(has_input > 0) {
1000 rl_callback_read_char();
1001 }
1002 else if (errno == EINTR) {
1003 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001004#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001005 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001006#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001007 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001008#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001009 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001010#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001011 if (s < 0) {
1012 rl_free_line_state();
1013 rl_cleanup_after_signal();
1014 rl_callback_handler_remove();
1015 *signal = 1;
1016 completed_input_string = NULL;
1017 }
1018 }
1019 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001020
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001021 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001022}
1023
1024
1025#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001026
1027/* Interrupt handler */
1028
1029static jmp_buf jbuf;
1030
Guido van Rossum0969d361997-08-05 21:27:50 +00001031/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001032static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001033onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001034{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001035 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001036}
1037
Guido van Rossum290900a1997-09-26 21:51:21 +00001038
Guido van Rossum0969d361997-08-05 21:27:50 +00001039static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001040readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001041{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001042 PyOS_sighandler_t old_inthandler;
1043 char *p;
Brett Cannon23b581a2010-05-04 00:52:41 +00001044
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001045 *signal = 0;
Guido van Rossum74f31432003-01-07 20:01:29 +00001046
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001047 old_inthandler = PyOS_setsig(SIGINT, onintr);
1048 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001049#ifdef HAVE_SIGRELSE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1051 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001052#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001053 PyOS_setsig(SIGINT, old_inthandler);
1054 *signal = 1;
1055 return NULL;
1056 }
1057 rl_event_hook = PyOS_InputHook;
1058 p = readline(prompt);
1059 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001060
1061 return p;
1062}
1063#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1064
1065
1066static char *
1067call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1068{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001069 size_t n;
1070 char *p, *q;
1071 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001072
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001073#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001074 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1075 if (!saved_locale)
1076 Py_FatalError("not enough memory to save locale");
Nadeem Vawda1efd9822013-02-02 20:52:54 +01001077 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001078#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001079
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001080 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1081 rl_instream = sys_stdin;
1082 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001083#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001084 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001085#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001086 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001087
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001088 p = readline_until_enter_or_signal(prompt, &signal);
Brett Cannon23b581a2010-05-04 00:52:41 +00001089
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001090 /* we got an interrupt signal */
1091 if (signal) {
1092 RESTORE_LOCALE(saved_locale)
1093 return NULL;
1094 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001095
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001096 /* We got an EOF, return a empty string. */
1097 if (p == NULL) {
1098 p = PyMem_Malloc(1);
1099 if (p != NULL)
1100 *p = '\0';
1101 RESTORE_LOCALE(saved_locale)
1102 return p;
1103 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001104
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001105 /* we have a valid line */
1106 n = strlen(p);
1107 if (n > 0) {
1108 const char *line;
Mark Dickinson0f981282010-08-03 16:54:19 +00001109 int length = _py_get_history_length();
1110 if (length > 0)
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001111#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001112 if (using_libedit_emulation) {
Ned Deily62a19292013-10-12 15:45:25 -07001113 /* handle older 0-based or newer 1-based indexing */
1114 line = history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001115 } else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001116#endif /* __APPLE__ */
Mark Dickinson0f981282010-08-03 16:54:19 +00001117 line = history_get(length)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001118 else
1119 line = "";
1120 if (strcmp(p, line))
1121 add_history(p);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001122 }
1123 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1124 release the original. */
1125 q = p;
1126 p = PyMem_Malloc(n+2);
1127 if (p != NULL) {
1128 strncpy(p, q, n);
1129 p[n] = '\n';
1130 p[n+1] = '\0';
1131 }
1132 free(q);
1133 RESTORE_LOCALE(saved_locale)
1134 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001135}
1136
Guido van Rossum290900a1997-09-26 21:51:21 +00001137
1138/* Initialize the module */
1139
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001140PyDoc_STRVAR(doc_module,
1141"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001142
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001143#ifdef __APPLE__
1144PyDoc_STRVAR(doc_module_le,
1145"Importing this module enables command line editing using libedit readline.");
1146#endif /* __APPLE__ */
1147
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001148PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001149initreadline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001150{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001151 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001152
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001153#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001154 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1155 using_libedit_emulation = 1;
1156 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001157
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001158 if (using_libedit_emulation)
1159 m = Py_InitModule4("readline", readline_methods, doc_module_le,
1160 (PyObject *)NULL, PYTHON_API_VERSION);
1161 else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001162
1163#endif /* __APPLE__ */
1164
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001165 m = Py_InitModule4("readline", readline_methods, doc_module,
1166 (PyObject *)NULL, PYTHON_API_VERSION);
1167 if (m == NULL)
1168 return;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001169
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001170 PyOS_ReadlineFunctionPointer = call_readline;
1171 setup_readline();
Guido van Rossum0969d361997-08-05 21:27:50 +00001172}