blob: a3dc4d9785b638a290ebc6485fe29f5e1e83fbe8 [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
Thomas Wouters0e3f5912006-08-11 14:57:12 +000023#ifdef SAVE_LOCALE
24# define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
25#else
26# define RESTORE_LOCALE(sl)
27#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) \
36 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
Guido van Rossumd8faa362007-04-27 19:54:29 +000037#else
Martin v. Löwisb37509b2008-11-04 20:45:29 +000038#if defined(_RL_FUNCTION_TYPEDEF)
Guido van Rossumd8faa362007-04-27 19:54:29 +000039extern char **completion_matches(char *, rl_compentry_func_t *);
Martin v. Löwisb37509b2008-11-04 20:45:29 +000040#else
Ronald Oussoren25696bb2010-02-11 13:15:00 +000041
42#if !defined(__APPLE__)
Martin v. Löwisb37509b2008-11-04 20:45:29 +000043extern char **completion_matches(char *, CPFunction *);
44#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000045#endif
Ronald Oussoren25696bb2010-02-11 13:15:00 +000046#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000047
Ronald Oussoren2efd9242009-09-20 14:53:22 +000048#ifdef __APPLE__
49/*
50 * It is possible to link the readline module to the readline
51 * emulation library of editline/libedit.
52 *
53 * 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 *
57 * Currently there is one know API incompatibility:
58 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
59 * index with libedit's emulation.
60 * - Note that replace_history and remove_history use a 0-based index
61 * with both implementation.
62 */
63static int using_libedit_emulation = 0;
64static const char libedit_version_tag[] = "EditLine wrapper";
65#endif /* __APPLE__ */
66
Christian Heimes32fbe592007-11-12 15:01:33 +000067static void
68on_completion_display_matches_hook(char **matches,
69 int num_matches, int max_length);
70
Guido van Rossum0969d361997-08-05 21:27:50 +000071
Guido van Rossum290900a1997-09-26 21:51:21 +000072/* Exported function to send one line to readline's init file parser */
73
74static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000075parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +000076{
Guido van Rossum3b5330e1998-12-04 15:34:39 +000077 char *s, *copy;
Guido van Rossum43713e52000-02-29 13:59:29 +000078 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
Guido van Rossum290900a1997-09-26 21:51:21 +000079 return NULL;
Guido van Rossum3b5330e1998-12-04 15:34:39 +000080 /* Make a copy -- rl_parse_and_bind() modifies its argument */
81 /* Bernard Herzog */
82 copy = malloc(1 + strlen(s));
83 if (copy == NULL)
84 return PyErr_NoMemory();
85 strcpy(copy, s);
86 rl_parse_and_bind(copy);
87 free(copy); /* Free the copy */
Guido van Rossum3d392eb2007-11-16 00:35:22 +000088 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +000089}
90
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000091PyDoc_STRVAR(doc_parse_and_bind,
92"parse_and_bind(string) -> None\n\
93Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +000094
95
96/* Exported function to parse a readline init file */
97
98static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000099read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000100{
101 char *s = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +0000102 if (!PyArg_ParseTuple(args, "|z:read_init_file", &s))
Guido van Rossum290900a1997-09-26 21:51:21 +0000103 return NULL;
104 errno = rl_read_init_file(s);
105 if (errno)
106 return PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000107 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000108}
109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000110PyDoc_STRVAR(doc_read_init_file,
111"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000112Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000113The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000114
115
Skip Montanaro28067822000-07-06 18:55:12 +0000116/* Exported function to load a readline history file */
117
118static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000119read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000120{
121 char *s = NULL;
122 if (!PyArg_ParseTuple(args, "|z:read_history_file", &s))
123 return NULL;
124 errno = read_history(s);
125 if (errno)
126 return PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000127 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000128}
129
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000130static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000131PyDoc_STRVAR(doc_read_history_file,
132"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000133Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000134The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000135
136
137/* Exported function to save a readline history file */
138
139static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000140write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000141{
142 char *s = NULL;
143 if (!PyArg_ParseTuple(args, "|z:write_history_file", &s))
144 return NULL;
145 errno = write_history(s);
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000146 if (!errno && _history_length >= 0)
147 history_truncate_file(s, _history_length);
Skip Montanaro28067822000-07-06 18:55:12 +0000148 if (errno)
149 return PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000150 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000151}
152
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000153PyDoc_STRVAR(doc_write_history_file,
154"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000155Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000156The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000157
158
Guido van Rossum74f31432003-01-07 20:01:29 +0000159/* Set history length */
160
161static PyObject*
162set_history_length(PyObject *self, PyObject *args)
163{
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000164 int length = _history_length;
Guido van Rossum74f31432003-01-07 20:01:29 +0000165 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
166 return NULL;
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000167 _history_length = length;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000168 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000169}
170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000171PyDoc_STRVAR(set_history_length_doc,
172"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000173set the maximal number of items which will be written to\n\
174the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000175history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000176
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000177
Guido van Rossum74f31432003-01-07 20:01:29 +0000178/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000179
180static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000181get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000182{
Christian Heimes217cfd12007-12-02 14:31:20 +0000183 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000184}
185
Guido van Rossum74f31432003-01-07 20:01:29 +0000186PyDoc_STRVAR(get_history_length_doc,
187"get_history_length() -> int\n\
188return the maximum number of items that will be written to\n\
189the history file.");
190
191
Martin v. Löwis0daad592001-09-30 21:09:59 +0000192/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000193
Martin v. Löwis0daad592001-09-30 21:09:59 +0000194static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000195set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000196{
197 PyObject *function = Py_None;
198 char buf[80];
Tim Peters885d4572001-11-28 20:27:42 +0000199 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000200 if (!PyArg_ParseTuple(args, buf, &function))
201 return NULL;
202 if (function == Py_None) {
203 Py_XDECREF(*hook_var);
204 *hook_var = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000205 }
206 else if (PyCallable_Check(function)) {
207 PyObject *tmp = *hook_var;
208 Py_INCREF(function);
209 *hook_var = function;
210 Py_XDECREF(tmp);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000211 }
212 else {
Tim Peters885d4572001-11-28 20:27:42 +0000213 PyOS_snprintf(buf, sizeof(buf),
214 "set_%.50s(func): argument not callable",
215 funcname);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000216 PyErr_SetString(PyExc_TypeError, buf);
217 return NULL;
218 }
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000219 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000220}
221
Guido van Rossum74f31432003-01-07 20:01:29 +0000222
Martin v. Löwis0daad592001-09-30 21:09:59 +0000223/* Exported functions to specify hook functions in Python */
224
Thomas Wouters89d996e2007-09-08 17:39:28 +0000225static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000226static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000227
228#ifdef HAVE_RL_PRE_INPUT_HOOK
229static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000230#endif
231
232static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000233set_completion_display_matches_hook(PyObject *self, PyObject *args)
234{
Christian Heimes32fbe592007-11-12 15:01:33 +0000235 PyObject *result = set_hook("completion_display_matches_hook",
Thomas Wouters89d996e2007-09-08 17:39:28 +0000236 &completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000237#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
238 /* We cannot set this hook globally, since it replaces the
239 default completion display. */
240 rl_completion_display_matches_hook =
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000241 completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000242#if defined(_RL_FUNCTION_TYPEDEF)
Christian Heimes32fbe592007-11-12 15:01:33 +0000243 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000244#else
245 (VFunction *)on_completion_display_matches_hook : 0;
246#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000247#endif
248 return result;
249
Thomas Wouters89d996e2007-09-08 17:39:28 +0000250}
251
252PyDoc_STRVAR(doc_set_completion_display_matches_hook,
253"set_completion_display_matches_hook([function]) -> None\n\
254Set or remove the completion display function.\n\
255The function is called as\n\
256 function(substitution, [matches], longest_match_length)\n\
257once each time matches need to be displayed.");
258
259static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000260set_startup_hook(PyObject *self, PyObject *args)
261{
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000262 return set_hook("startup_hook", &startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000263}
264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000265PyDoc_STRVAR(doc_set_startup_hook,
266"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000267Set or remove the startup_hook function.\n\
268The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000270
Guido van Rossum74f31432003-01-07 20:01:29 +0000271
Martin v. Löwis0daad592001-09-30 21:09:59 +0000272#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000273
274/* Set pre-input hook */
275
Martin v. Löwis0daad592001-09-30 21:09:59 +0000276static PyObject *
277set_pre_input_hook(PyObject *self, PyObject *args)
278{
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000279 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000280}
281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000282PyDoc_STRVAR(doc_set_pre_input_hook,
283"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000284Set or remove the pre_input_hook function.\n\
285The function is called with no arguments after the first prompt\n\
286has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000288
Martin v. Löwis0daad592001-09-30 21:09:59 +0000289#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000290
Guido van Rossum74f31432003-01-07 20:01:29 +0000291
Guido van Rossum290900a1997-09-26 21:51:21 +0000292/* Exported function to specify a word completer in Python */
293
294static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000295
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000296static PyObject *begidx = NULL;
297static PyObject *endidx = NULL;
298
Guido van Rossum74f31432003-01-07 20:01:29 +0000299
Thomas Wouters89d996e2007-09-08 17:39:28 +0000300/* Get the completion type for the scope of the tab-completion */
301static PyObject *
302get_completion_type(PyObject *self, PyObject *noarg)
303{
Christian Heimes217cfd12007-12-02 14:31:20 +0000304 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000305}
306
307PyDoc_STRVAR(doc_get_completion_type,
308"get_completion_type() -> int\n\
309Get the type of completion being attempted.");
310
311
Guido van Rossum74f31432003-01-07 20:01:29 +0000312/* Get the beginning index for the scope of the tab-completion */
313
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000314static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000315get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000316{
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000317 Py_INCREF(begidx);
318 return begidx;
319}
320
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000321PyDoc_STRVAR(doc_get_begidx,
322"get_begidx() -> int\n\
323get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000324
Guido van Rossum74f31432003-01-07 20:01:29 +0000325
326/* Get the ending index for the scope of the tab-completion */
327
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000328static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000329get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000330{
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000331 Py_INCREF(endidx);
332 return endidx;
333}
334
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000335PyDoc_STRVAR(doc_get_endidx,
336"get_endidx() -> int\n\
337get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000338
339
Guido van Rossum74f31432003-01-07 20:01:29 +0000340/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000341
342static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000343set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000344{
345 char *break_chars;
346
Guido van Rossum43713e52000-02-29 13:59:29 +0000347 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000348 return NULL;
349 }
Neal Norwitz0e0ee592002-04-21 15:03:18 +0000350 free((void*)rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000351 rl_completer_word_break_characters = strdup(break_chars);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000352 Py_RETURN_NONE;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000353}
354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000355PyDoc_STRVAR(doc_set_completer_delims,
356"set_completer_delims(string) -> None\n\
357set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000358
Skip Montanaroe5069012004-08-15 14:32:06 +0000359static PyObject *
360py_remove_history(PyObject *self, PyObject *args)
361{
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000362 int entry_number;
363 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000364
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000365 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
366 return NULL;
367 if (entry_number < 0) {
368 PyErr_SetString(PyExc_ValueError,
369 "History index cannot be negative");
370 return NULL;
371 }
372 entry = remove_history(entry_number);
373 if (!entry) {
374 PyErr_Format(PyExc_ValueError,
375 "No history item at position %d",
376 entry_number);
377 return NULL;
378 }
379 /* free memory allocated for the history entry */
380 if (entry->line)
381 free(entry->line);
382 if (entry->data)
383 free(entry->data);
384 free(entry);
Skip Montanaroe5069012004-08-15 14:32:06 +0000385
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000386 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000387}
388
389PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000390"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000391remove history item given by its position");
392
393static PyObject *
394py_replace_history(PyObject *self, PyObject *args)
395{
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000396 int entry_number;
397 char *line;
398 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000399
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000400 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
401 &line)) {
402 return NULL;
403 }
404 if (entry_number < 0) {
405 PyErr_SetString(PyExc_ValueError,
406 "History index cannot be negative");
407 return NULL;
408 }
409 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
410 if (!old_entry) {
411 PyErr_Format(PyExc_ValueError,
412 "No history item at position %d",
413 entry_number);
414 return NULL;
415 }
416 /* free memory allocated for the old history entry */
417 if (old_entry->line)
418 free(old_entry->line);
419 if (old_entry->data)
420 free(old_entry->data);
421 free(old_entry);
Skip Montanaroe5069012004-08-15 14:32:06 +0000422
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000423 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000424}
425
426PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000427"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000428replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000429
430/* Add a line to the history buffer */
431
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000432static PyObject *
433py_add_history(PyObject *self, PyObject *args)
434{
435 char *line;
436
437 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
438 return NULL;
439 }
440 add_history(line);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000441 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000442}
443
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000444PyDoc_STRVAR(doc_add_history,
445"add_history(string) -> None\n\
446add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000447
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000448
Guido van Rossum74f31432003-01-07 20:01:29 +0000449/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000450
451static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000452get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000453{
Christian Heimesaec75c32007-11-11 22:42:36 +0000454 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000455}
Guido van Rossum74f31432003-01-07 20:01:29 +0000456
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000457PyDoc_STRVAR(doc_get_completer_delims,
458"get_completer_delims() -> string\n\
459get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000460
Guido van Rossum74f31432003-01-07 20:01:29 +0000461
462/* Set the completer function */
463
Guido van Rossum290900a1997-09-26 21:51:21 +0000464static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000465set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000466{
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000467 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000468}
469
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000470PyDoc_STRVAR(doc_set_completer,
471"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000472Set or remove the completer function.\n\
473The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000474for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000475It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000476
Guido van Rossum74f31432003-01-07 20:01:29 +0000477
Michael W. Hudson796df152003-01-30 10:12:51 +0000478static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000479get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000480{
481 if (completer == NULL) {
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000482 Py_RETURN_NONE;
Michael W. Hudson796df152003-01-30 10:12:51 +0000483 }
484 Py_INCREF(completer);
485 return completer;
486}
487
488PyDoc_STRVAR(doc_get_completer,
489"get_completer() -> function\n\
490\n\
491Returns current completer function.");
492
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000493/* Exported function to get any element of history */
494
495static PyObject *
496get_history_item(PyObject *self, PyObject *args)
497{
498 int idx = 0;
499 HIST_ENTRY *hist_ent;
500
501 if (!PyArg_ParseTuple(args, "i:index", &idx))
502 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000503#ifdef __APPLE__
504 if (using_libedit_emulation) {
505 /* Libedit emulation uses 0-based indexes,
506 * the real one uses 1-based indexes,
507 * adjust the index to ensure that Python
508 * code doesn't have to worry about the
509 * difference.
510 */
511 HISTORY_STATE *hist_st;
512 hist_st = history_get_history_state();
513
514 idx --;
515
516 /*
517 * Apple's readline emulation crashes when
518 * the index is out of range, therefore
519 * test for that and fail gracefully.
520 */
521 if (idx < 0 || idx >= hist_st->length) {
522 Py_RETURN_NONE;
523 }
524 }
525#endif /* __APPLE__ */
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000526 if ((hist_ent = history_get(idx)))
Christian Heimesaec75c32007-11-11 22:42:36 +0000527 return PyUnicode_FromString(hist_ent->line);
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000528 else {
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000529 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000530 }
531}
532
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000533PyDoc_STRVAR(doc_get_history_item,
534"get_history_item() -> string\n\
535return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000536
Guido van Rossum74f31432003-01-07 20:01:29 +0000537
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000538/* Exported function to get current length of history */
539
540static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000541get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000542{
543 HISTORY_STATE *hist_st;
544
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000545 hist_st = history_get_history_state();
Christian Heimes217cfd12007-12-02 14:31:20 +0000546 return PyLong_FromLong(hist_st ? (long) hist_st->length : (long) 0);
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000547}
548
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000549PyDoc_STRVAR(doc_get_current_history_length,
550"get_current_history_length() -> integer\n\
551return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000552
Guido van Rossum74f31432003-01-07 20:01:29 +0000553
Guido van Rossum79378ff1997-10-07 14:53:21 +0000554/* Exported function to read the current line buffer */
555
556static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000557get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000558{
Christian Heimesaec75c32007-11-11 22:42:36 +0000559 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000560}
561
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000562PyDoc_STRVAR(doc_get_line_buffer,
563"get_line_buffer() -> string\n\
564return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000565
Guido van Rossum74f31432003-01-07 20:01:29 +0000566
Martin v. Löwise7a97962003-09-20 16:08:33 +0000567#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
568
569/* Exported function to clear the current history */
570
571static PyObject *
572py_clear_history(PyObject *self, PyObject *noarg)
573{
574 clear_history();
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000575 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000576}
577
578PyDoc_STRVAR(doc_clear_history,
579"clear_history() -> None\n\
580Clear the current readline history.");
581#endif
582
583
Guido van Rossum79378ff1997-10-07 14:53:21 +0000584/* Exported function to insert text into the line buffer */
585
586static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000587insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000588{
589 char *s;
Guido van Rossum43713e52000-02-29 13:59:29 +0000590 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
Guido van Rossum79378ff1997-10-07 14:53:21 +0000591 return NULL;
592 rl_insert_text(s);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000593 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000594}
595
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000596PyDoc_STRVAR(doc_insert_text,
597"insert_text(string) -> None\n\
598Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000599
Guido van Rossum74f31432003-01-07 20:01:29 +0000600
601/* Redisplay the line buffer */
602
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000603static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000604redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000605{
606 rl_redisplay();
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000607 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000608}
609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000610PyDoc_STRVAR(doc_redisplay,
611"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000612Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000614
Guido van Rossum74f31432003-01-07 20:01:29 +0000615
Guido van Rossum290900a1997-09-26 21:51:21 +0000616/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000617
618static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000619{
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000620 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000621 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000622 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000623 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000624 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
Guido van Rossum74f31432003-01-07 20:01:29 +0000625 {"read_history_file", read_history_file,
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000626 METH_VARARGS, doc_read_history_file},
Guido van Rossum74f31432003-01-07 20:01:29 +0000627 {"write_history_file", write_history_file,
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000628 METH_VARARGS, doc_write_history_file},
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000629 {"get_history_item", get_history_item,
630 METH_VARARGS, doc_get_history_item},
Neal Norwitz767f8352002-03-31 16:13:39 +0000631 {"get_current_history_length", (PyCFunction)get_current_history_length,
Neal Norwitz3a6f9782002-03-25 20:46:46 +0000632 METH_NOARGS, doc_get_current_history_length},
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000633 {"set_history_length", set_history_length,
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000634 METH_VARARGS, set_history_length_doc},
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000635 {"get_history_length", get_history_length,
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000636 METH_NOARGS, get_history_length_doc},
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000637 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
Michael W. Hudson796df152003-01-30 10:12:51 +0000638 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
Thomas Wouters89d996e2007-09-08 17:39:28 +0000639 {"get_completion_type", get_completion_type,
640 METH_NOARGS, doc_get_completion_type},
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000641 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
642 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000643
Guido van Rossum74f31432003-01-07 20:01:29 +0000644 {"set_completer_delims", set_completer_delims,
Andrew M. Kuchlinga1abb722000-08-03 02:34:44 +0000645 METH_VARARGS, doc_set_completer_delims},
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000646 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000647 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
648 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000649 {"get_completer_delims", get_completer_delims,
Neal Norwitz3a6f9782002-03-25 20:46:46 +0000650 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000651
Thomas Wouters89d996e2007-09-08 17:39:28 +0000652 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
653 METH_VARARGS, doc_set_completion_display_matches_hook},
Guido van Rossum74f31432003-01-07 20:01:29 +0000654 {"set_startup_hook", set_startup_hook,
655 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000656#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000657 {"set_pre_input_hook", set_pre_input_hook,
658 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000659#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000660#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
661 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
662#endif
Guido van Rossum290900a1997-09-26 21:51:21 +0000663 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000664};
665
Guido van Rossum05ac4492003-01-07 20:04:12 +0000666
Martin v. Löwis0daad592001-09-30 21:09:59 +0000667/* C function to call the Python hooks. */
668
669static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000670on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000671{
672 int result = 0;
673 if (func != NULL) {
674 PyObject *r;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000675#ifdef WITH_THREAD
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000676 PyGILState_STATE gilstate = PyGILState_Ensure();
677#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000678 r = PyObject_CallFunction(func, NULL);
679 if (r == NULL)
680 goto error;
Guido van Rossum74f31432003-01-07 20:01:29 +0000681 if (r == Py_None)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000682 result = 0;
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000683 else {
Christian Heimes217cfd12007-12-02 14:31:20 +0000684 result = PyLong_AsLong(r);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000685 if (result == -1 && PyErr_Occurred())
686 goto error;
687 }
Martin v. Löwis0daad592001-09-30 21:09:59 +0000688 Py_DECREF(r);
689 goto done;
690 error:
691 PyErr_Clear();
692 Py_XDECREF(r);
693 done:
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000694#ifdef WITH_THREAD
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000695 PyGILState_Release(gilstate);
696#endif
Georg Brandle677adc2005-09-29 13:40:49 +0000697 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000698 }
699 return result;
700}
701
702static int
703on_startup_hook(void)
704{
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000705 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000706}
707
708#ifdef HAVE_RL_PRE_INPUT_HOOK
709static int
710on_pre_input_hook(void)
711{
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000712 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000713}
714#endif
715
Guido van Rossum05ac4492003-01-07 20:04:12 +0000716
Thomas Wouters89d996e2007-09-08 17:39:28 +0000717/* C function to call the Python completion_display_matches */
718
719static void
720on_completion_display_matches_hook(char **matches,
721 int num_matches, int max_length)
722{
Christian Heimes32fbe592007-11-12 15:01:33 +0000723 int i;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000724 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000725#ifdef WITH_THREAD
Christian Heimes32fbe592007-11-12 15:01:33 +0000726 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000727#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000728 m = PyList_New(num_matches);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000729 if (m == NULL)
730 goto error;
Christian Heimes32fbe592007-11-12 15:01:33 +0000731 for (i = 0; i < num_matches; i++) {
732 s = PyUnicode_FromString(matches[i+1]);
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000733 if (s == NULL)
Christian Heimes32fbe592007-11-12 15:01:33 +0000734 goto error;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000735 if (PyList_SetItem(m, i, s) == -1)
736 goto error;
Thomas Wouters89d996e2007-09-08 17:39:28 +0000737 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000738 r = PyObject_CallFunction(completion_display_matches_hook,
739 "sOi", matches[0], m, max_length);
740
Matthias Klose091c7b12009-04-07 13:24:27 +0000741 Py_DECREF(m); m=NULL;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000742
Christian Heimes32fbe592007-11-12 15:01:33 +0000743 if (r == NULL ||
Christian Heimes217cfd12007-12-02 14:31:20 +0000744 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
Christian Heimes32fbe592007-11-12 15:01:33 +0000745 goto error;
746 }
Matthias Klose091c7b12009-04-07 13:24:27 +0000747 Py_XDECREF(r); r=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000748
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000749 if (0) {
750 error:
751 PyErr_Clear();
752 Py_XDECREF(m);
753 Py_XDECREF(r);
754 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000755#ifdef WITH_THREAD
756 PyGILState_Release(gilstate);
757#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000758}
759
760
Guido van Rossum290900a1997-09-26 21:51:21 +0000761/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000762
Guido van Rossum290900a1997-09-26 21:51:21 +0000763static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000764on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000765{
Guido van Rossum290900a1997-09-26 21:51:21 +0000766 char *result = NULL;
767 if (completer != NULL) {
768 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000769#ifdef WITH_THREAD
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000770 PyGILState_STATE gilstate = PyGILState_Ensure();
771#endif
Michael W. Hudson0c1ceaf2002-02-13 11:58:25 +0000772 rl_attempted_completion_over = 1;
Guido van Rossum290900a1997-09-26 21:51:21 +0000773 r = PyObject_CallFunction(completer, "si", text, state);
774 if (r == NULL)
775 goto error;
776 if (r == Py_None) {
777 result = NULL;
778 }
779 else {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000780 char *s = _PyUnicode_AsString(r);
Guido van Rossum290900a1997-09-26 21:51:21 +0000781 if (s == NULL)
782 goto error;
783 result = strdup(s);
784 }
785 Py_DECREF(r);
786 goto done;
787 error:
788 PyErr_Clear();
789 Py_XDECREF(r);
790 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000791#ifdef WITH_THREAD
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000792 PyGILState_Release(gilstate);
793#endif
Georg Brandle677adc2005-09-29 13:40:49 +0000794 return result;
Guido van Rossum290900a1997-09-26 21:51:21 +0000795 }
796 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000797}
798
Guido van Rossum290900a1997-09-26 21:51:21 +0000799
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000800/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000801 * before calling the normal completer */
802
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000803static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000804flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000805{
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000806#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
807 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000808#endif
809#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000810 rl_completion_suppress_append = 0;
811#endif
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000812 Py_XDECREF(begidx);
813 Py_XDECREF(endidx);
Christian Heimes217cfd12007-12-02 14:31:20 +0000814 begidx = PyLong_FromLong((long) start);
815 endidx = PyLong_FromLong((long) end);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000816 return completion_matches(text, *on_completion);
817}
818
Guido van Rossum05ac4492003-01-07 20:04:12 +0000819
Guido van Rossum290900a1997-09-26 21:51:21 +0000820/* Helper to initialize GNU readline properly. */
821
822static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000823setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000824{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000825#ifdef SAVE_LOCALE
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000826 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwis701abe72004-08-20 06:26:59 +0000827 if (!saved_locale)
828 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000829#endif
830
Skip Montanaroa0392742002-06-11 14:32:46 +0000831 using_history();
832
Guido van Rossum290900a1997-09-26 21:51:21 +0000833 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000834#if defined(PYOS_OS2) && defined(PYCC_GCC)
835 /* Allow $if term= in .inputrc to work */
836 rl_terminal_name = getenv("TERM");
837#endif
Guido van Rossum290900a1997-09-26 21:51:21 +0000838 /* Force rebind of TAB to insert-tab */
839 rl_bind_key('\t', rl_insert);
840 /* Bind both ESC-TAB and ESC-ESC to the completion function */
841 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
842 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000843 /* Set our hook functions */
844 rl_startup_hook = (Function *)on_startup_hook;
845#ifdef HAVE_RL_PRE_INPUT_HOOK
846 rl_pre_input_hook = (Function *)on_pre_input_hook;
847#endif
Guido van Rossum290900a1997-09-26 21:51:21 +0000848 /* Set our completion function */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000849 rl_attempted_completion_function = (CPPFunction *)flex_complete;
Guido van Rossumb6c935a1997-09-26 23:00:37 +0000850 /* Set Python word break characters */
851 rl_completer_word_break_characters =
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000852 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
Guido van Rossumb6c935a1997-09-26 23:00:37 +0000853 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000854
Christian Heimes217cfd12007-12-02 14:31:20 +0000855 begidx = PyLong_FromLong(0L);
856 endidx = PyLong_FromLong(0L);
Barry Warsawf7612871999-01-29 21:55:03 +0000857 /* Initialize (allows .inputrc to override)
858 *
859 * XXX: A bug in the readline-2.2 library causes a memory leak
860 * inside this function. Nothing we can do about it.
861 */
Guido van Rossum290900a1997-09-26 21:51:21 +0000862 rl_initialize();
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000863
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000864 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000865}
866
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000867/* Wrapper around GNU readline that handles signals differently. */
868
869
870#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
871
872static char *completed_input_string;
873static void
874rlhandler(char *text)
875{
876 completed_input_string = text;
877 rl_callback_handler_remove();
878}
879
880extern PyThreadState* _PyOS_ReadlineTState;
881
882static char *
883readline_until_enter_or_signal(char *prompt, int *signal)
884{
885 char * not_done_reading = "";
886 fd_set selectset;
887
888 *signal = 0;
889#ifdef HAVE_RL_CATCH_SIGNAL
890 rl_catch_signals = 0;
891#endif
892
893 rl_callback_handler_install (prompt, rlhandler);
894 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000895
896 completed_input_string = not_done_reading;
897
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000898 while (completed_input_string == not_done_reading) {
899 int has_input = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000900
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000901 while (!has_input)
902 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Thomas Wouters89f507f2006-12-13 04:49:30 +0000903
904 /* [Bug #1552726] Only limit the pause if an input hook has been
905 defined. */
906 struct timeval *timeoutp = NULL;
907 if (PyOS_InputHook)
908 timeoutp = &timeout;
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000909 FD_SET(fileno(rl_instream), &selectset);
910 /* select resets selectset if no input was available */
911 has_input = select(fileno(rl_instream) + 1, &selectset,
Thomas Wouters89f507f2006-12-13 04:49:30 +0000912 NULL, NULL, timeoutp);
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000913 if(PyOS_InputHook) PyOS_InputHook();
914 }
915
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000916 if(has_input > 0) {
917 rl_callback_read_char();
918 }
919 else if (errno == EINTR) {
920 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000921#ifdef WITH_THREAD
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000922 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000923#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000924 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000925#ifdef WITH_THREAD
Michael W. Hudson23849902004-07-08 15:28:26 +0000926 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000927#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000928 if (s < 0) {
929 rl_free_line_state();
930 rl_cleanup_after_signal();
931 rl_callback_handler_remove();
932 *signal = 1;
933 completed_input_string = NULL;
934 }
935 }
936 }
937
938 return completed_input_string;
939}
940
941
942#else
Guido van Rossum290900a1997-09-26 21:51:21 +0000943
944/* Interrupt handler */
945
946static jmp_buf jbuf;
947
Guido van Rossum0969d361997-08-05 21:27:50 +0000948/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +0000949static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000950onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +0000951{
Guido van Rossum290900a1997-09-26 21:51:21 +0000952 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +0000953}
954
Guido van Rossum290900a1997-09-26 21:51:21 +0000955
Guido van Rossum0969d361997-08-05 21:27:50 +0000956static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000957readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +0000958{
Guido van Rossum174efc92000-09-16 16:37:53 +0000959 PyOS_sighandler_t old_inthandler;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000960 char *p;
961
962 *signal = 0;
Guido van Rossum74f31432003-01-07 20:01:29 +0000963
Guido van Rossum174efc92000-09-16 16:37:53 +0000964 old_inthandler = PyOS_setsig(SIGINT, onintr);
Guido van Rossum0969d361997-08-05 21:27:50 +0000965 if (setjmp(jbuf)) {
966#ifdef HAVE_SIGRELSE
967 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
968 sigrelse(SIGINT);
969#endif
Guido van Rossum174efc92000-09-16 16:37:53 +0000970 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000971 *signal = 1;
Guido van Rossum0969d361997-08-05 21:27:50 +0000972 return NULL;
973 }
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000974 rl_event_hook = PyOS_InputHook;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000975 p = readline(prompt);
976 PyOS_setsig(SIGINT, old_inthandler);
977
978 return p;
979}
980#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
981
982
983static char *
984call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
985{
Neal Norwitz1fa040b2004-08-25 01:20:18 +0000986 size_t n;
987 char *p, *q;
988 int signal;
989
Martin v. Löwis78a8acc2004-08-18 13:34:00 +0000990#ifdef SAVE_LOCALE
991 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwis701abe72004-08-20 06:26:59 +0000992 if (!saved_locale)
993 Py_FatalError("not enough memory to save locale");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +0000994 setlocale(LC_CTYPE, "");
995#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000996
Guido van Rossum74f31432003-01-07 20:01:29 +0000997 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
998 rl_instream = sys_stdin;
999 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001000#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Guido van Rossum74f31432003-01-07 20:01:29 +00001001 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001002#endif
Guido van Rossum74f31432003-01-07 20:01:29 +00001003 }
1004
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001005 p = readline_until_enter_or_signal(prompt, &signal);
1006
1007 /* we got an interrupt signal */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001008 if (signal) {
1009 RESTORE_LOCALE(saved_locale)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001010 return NULL;
1011 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001012
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001013 /* We got an EOF, return a empty string. */
Guido van Rossum0969d361997-08-05 21:27:50 +00001014 if (p == NULL) {
Guido van Rossumb18618d2000-05-03 23:44:39 +00001015 p = PyMem_Malloc(1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001016 if (p != NULL)
1017 *p = '\0';
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001018 RESTORE_LOCALE(saved_locale)
Guido van Rossum0969d361997-08-05 21:27:50 +00001019 return p;
1020 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001021
1022 /* we have a valid line */
Guido van Rossum0969d361997-08-05 21:27:50 +00001023 n = strlen(p);
Skip Montanaroa0392742002-06-11 14:32:46 +00001024 if (n > 0) {
1025 char *line;
1026 HISTORY_STATE *state = history_get_history_state();
1027 if (state->length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001028#ifdef __APPLE__
1029 if (using_libedit_emulation) {
1030 /*
1031 * Libedit's emulation uses 0-based indexes,
1032 * the real readline uses 1-based indexes.
1033 */
1034 line = history_get(state->length - 1)->line;
1035 } else
1036#endif /* __APPLE__ */
Skip Montanaroa0392742002-06-11 14:32:46 +00001037 line = history_get(state->length)->line;
1038 else
1039 line = "";
1040 if (strcmp(p, line))
1041 add_history(p);
1042 /* the history docs don't say so, but the address of state
1043 changes each time history_get_history_state is called
1044 which makes me think it's freshly malloc'd memory...
1045 on the other hand, the address of the last line stays the
1046 same as long as history isn't extended, so it appears to
1047 be malloc'd but managed by the history package... */
1048 free(state);
1049 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001050 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1051 release the original. */
1052 q = p;
1053 p = PyMem_Malloc(n+2);
1054 if (p != NULL) {
1055 strncpy(p, q, n);
Guido van Rossum0969d361997-08-05 21:27:50 +00001056 p[n] = '\n';
1057 p[n+1] = '\0';
1058 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001059 free(q);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001060 RESTORE_LOCALE(saved_locale)
Guido van Rossum0969d361997-08-05 21:27:50 +00001061 return p;
1062}
1063
Guido van Rossum290900a1997-09-26 21:51:21 +00001064
1065/* Initialize the module */
1066
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001067PyDoc_STRVAR(doc_module,
1068"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001069
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001070#ifdef __APPLE__
1071PyDoc_STRVAR(doc_module_le,
1072"Importing this module enables command line editing using libedit readline.");
1073#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001074
1075static struct PyModuleDef readlinemodule = {
1076 PyModuleDef_HEAD_INIT,
1077 "readline",
1078 doc_module,
1079 -1,
1080 readline_methods,
1081 NULL,
1082 NULL,
1083 NULL,
1084 NULL
1085};
1086
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001087
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001088PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001089PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001090{
Guido van Rossum1ea64ea2000-10-02 15:53:08 +00001091 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001092
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001093#ifdef __APPLE__
1094 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1095 using_libedit_emulation = 1;
1096 }
1097
1098 if (using_libedit_emulation)
1099 readlinemodule.m_doc = doc_module_le;
1100
1101#endif /* __APPLE__ */
1102
Martin v. Löwis1a214512008-06-11 05:26:20 +00001103 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001104
Neal Norwitz1ac754f2006-01-19 06:09:39 +00001105 if (m == NULL)
Martin v. Löwis1a214512008-06-11 05:26:20 +00001106 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001107
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001108
1109
Guido van Rossum74f31432003-01-07 20:01:29 +00001110 PyOS_ReadlineFunctionPointer = call_readline;
1111 setup_readline();
Martin v. Löwis1a214512008-06-11 05:26:20 +00001112 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001113}