blob: 6567cc55301fb1415b8a2ca6964ad5871721ecf5 [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
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000026# define RESTORE_LOCALE(sl)
Thomas Wouters0e3f5912006-08-11 14:57:12 +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 Pitrouf95a1b32010-05-09 15:52:27 +000036 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
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000051 * emulation library of editline/libedit.
52 *
Ronald Oussoren2efd9242009-09-20 14:53:22 +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 *
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000057 * Currently there is one know API incompatibility:
Ronald Oussoren2efd9242009-09-20 14:53:22 +000058 * - '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,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000069 int num_matches, int max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +000070
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{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 char *s, *copy;
78 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
79 return NULL;
80 /* 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 */
88 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{
Victor Stinner19e65a32010-06-11 22:27:14 +0000101 PyObject *filename_obj = Py_None, *filename_bytes;
102 if (!PyArg_ParseTuple(args, "|O:read_init_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000103 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000104 if (filename_obj != Py_None) {
105 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
106 return NULL;
107 errno = rl_read_init_file(PyBytes_AsString(filename_bytes));
108 Py_DECREF(filename_bytes);
109 } else
110 errno = rl_read_init_file(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 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{
Victor Stinner19e65a32010-06-11 22:27:14 +0000127 PyObject *filename_obj = Py_None, *filename_bytes;
128 if (!PyArg_ParseTuple(args, "|O:read_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000130 if (filename_obj != Py_None) {
131 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
132 return NULL;
133 errno = read_history(PyBytes_AsString(filename_bytes));
134 Py_DECREF(filename_bytes);
135 } else
136 errno = read_history(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 if (errno)
138 return PyErr_SetFromErrno(PyExc_IOError);
139 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000140}
141
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000142static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000143PyDoc_STRVAR(doc_read_history_file,
144"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000145Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000146The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000147
148
149/* Exported function to save a readline history file */
150
151static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000152write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000153{
Victor Stinner19e65a32010-06-11 22:27:14 +0000154 PyObject *filename_obj = Py_None, *filename_bytes;
155 char *filename;
156 if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000157 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000158 if (filename_obj != Py_None) {
159 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
160 return NULL;
161 filename = PyBytes_AsString(filename_bytes);
162 } else {
163 filename_bytes = NULL;
164 filename = NULL;
165 }
166 errno = write_history(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 if (!errno && _history_length >= 0)
Victor Stinner19e65a32010-06-11 22:27:14 +0000168 history_truncate_file(filename, _history_length);
169 Py_XDECREF(filename_bytes);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 if (errno)
171 return PyErr_SetFromErrno(PyExc_IOError);
172 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000173}
174
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000175PyDoc_STRVAR(doc_write_history_file,
176"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000177Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000178The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000179
180
Guido van Rossum74f31432003-01-07 20:01:29 +0000181/* Set history length */
182
183static PyObject*
184set_history_length(PyObject *self, PyObject *args)
185{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 int length = _history_length;
187 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
188 return NULL;
189 _history_length = length;
190 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000191}
192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000193PyDoc_STRVAR(set_history_length_doc,
194"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000195set the maximal number of items which will be written to\n\
196the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000197history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000198
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000199
Guido van Rossum74f31432003-01-07 20:01:29 +0000200/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000201
202static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000203get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000205 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000206}
207
Guido van Rossum74f31432003-01-07 20:01:29 +0000208PyDoc_STRVAR(get_history_length_doc,
209"get_history_length() -> int\n\
210return the maximum number of items that will be written to\n\
211the history file.");
212
213
Martin v. Löwis0daad592001-09-30 21:09:59 +0000214/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000215
Martin v. Löwis0daad592001-09-30 21:09:59 +0000216static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000217set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000219 PyObject *function = Py_None;
220 char buf[80];
221 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
222 if (!PyArg_ParseTuple(args, buf, &function))
223 return NULL;
224 if (function == Py_None) {
225 Py_XDECREF(*hook_var);
226 *hook_var = NULL;
227 }
228 else if (PyCallable_Check(function)) {
229 PyObject *tmp = *hook_var;
230 Py_INCREF(function);
231 *hook_var = function;
232 Py_XDECREF(tmp);
233 }
234 else {
235 PyOS_snprintf(buf, sizeof(buf),
236 "set_%.50s(func): argument not callable",
237 funcname);
238 PyErr_SetString(PyExc_TypeError, buf);
239 return NULL;
240 }
241 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000242}
243
Guido van Rossum74f31432003-01-07 20:01:29 +0000244
Martin v. Löwis0daad592001-09-30 21:09:59 +0000245/* Exported functions to specify hook functions in Python */
246
Thomas Wouters89d996e2007-09-08 17:39:28 +0000247static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000248static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000249
250#ifdef HAVE_RL_PRE_INPUT_HOOK
251static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000252#endif
253
254static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000255set_completion_display_matches_hook(PyObject *self, PyObject *args)
256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000257 PyObject *result = set_hook("completion_display_matches_hook",
258 &completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000259#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 /* We cannot set this hook globally, since it replaces the
261 default completion display. */
262 rl_completion_display_matches_hook =
263 completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000264#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000265 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000266#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000268#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000269#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000271
Thomas Wouters89d996e2007-09-08 17:39:28 +0000272}
273
274PyDoc_STRVAR(doc_set_completion_display_matches_hook,
275"set_completion_display_matches_hook([function]) -> None\n\
276Set or remove the completion display function.\n\
277The function is called as\n\
278 function(substitution, [matches], longest_match_length)\n\
279once each time matches need to be displayed.");
280
281static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000282set_startup_hook(PyObject *self, PyObject *args)
283{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000284 return set_hook("startup_hook", &startup_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_startup_hook,
288"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000289Set or remove the startup_hook function.\n\
290The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000291before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000292
Guido van Rossum74f31432003-01-07 20:01:29 +0000293
Martin v. Löwis0daad592001-09-30 21:09:59 +0000294#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000295
296/* Set pre-input hook */
297
Martin v. Löwis0daad592001-09-30 21:09:59 +0000298static PyObject *
299set_pre_input_hook(PyObject *self, PyObject *args)
300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000302}
303
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000304PyDoc_STRVAR(doc_set_pre_input_hook,
305"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000306Set or remove the pre_input_hook function.\n\
307The function is called with no arguments after the first prompt\n\
308has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000309characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000310
Martin v. Löwis0daad592001-09-30 21:09:59 +0000311#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000312
Guido van Rossum74f31432003-01-07 20:01:29 +0000313
Guido van Rossum290900a1997-09-26 21:51:21 +0000314/* Exported function to specify a word completer in Python */
315
316static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000317
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000318static PyObject *begidx = NULL;
319static PyObject *endidx = NULL;
320
Guido van Rossum74f31432003-01-07 20:01:29 +0000321
Thomas Wouters89d996e2007-09-08 17:39:28 +0000322/* Get the completion type for the scope of the tab-completion */
323static PyObject *
324get_completion_type(PyObject *self, PyObject *noarg)
325{
Christian Heimes217cfd12007-12-02 14:31:20 +0000326 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000327}
328
329PyDoc_STRVAR(doc_get_completion_type,
330"get_completion_type() -> int\n\
331Get the type of completion being attempted.");
332
333
Guido van Rossum74f31432003-01-07 20:01:29 +0000334/* Get the beginning index for the scope of the tab-completion */
335
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000336static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000337get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000338{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 Py_INCREF(begidx);
340 return begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000341}
342
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000343PyDoc_STRVAR(doc_get_begidx,
344"get_begidx() -> int\n\
345get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000346
Guido van Rossum74f31432003-01-07 20:01:29 +0000347
348/* Get the ending index for the scope of the tab-completion */
349
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000350static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000351get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000352{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 Py_INCREF(endidx);
354 return endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000355}
356
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000357PyDoc_STRVAR(doc_get_endidx,
358"get_endidx() -> int\n\
359get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000360
361
Guido van Rossum74f31432003-01-07 20:01:29 +0000362/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000363
364static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000365set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000366{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
370 return NULL;
371 }
372 free((void*)rl_completer_word_break_characters);
373 rl_completer_word_break_characters = strdup(break_chars);
374 Py_RETURN_NONE;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000375}
376
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000377PyDoc_STRVAR(doc_set_completer_delims,
378"set_completer_delims(string) -> None\n\
379set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000380
Skip Montanaroe5069012004-08-15 14:32:06 +0000381static PyObject *
382py_remove_history(PyObject *self, PyObject *args)
383{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 int entry_number;
385 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000386
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
388 return NULL;
389 if (entry_number < 0) {
390 PyErr_SetString(PyExc_ValueError,
391 "History index cannot be negative");
392 return NULL;
393 }
394 entry = remove_history(entry_number);
395 if (!entry) {
396 PyErr_Format(PyExc_ValueError,
397 "No history item at position %d",
398 entry_number);
399 return NULL;
400 }
401 /* free memory allocated for the history entry */
402 if (entry->line)
403 free(entry->line);
404 if (entry->data)
405 free(entry->data);
406 free(entry);
Skip Montanaroe5069012004-08-15 14:32:06 +0000407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000408 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000409}
410
411PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000412"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000413remove history item given by its position");
414
415static PyObject *
416py_replace_history(PyObject *self, PyObject *args)
417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 int entry_number;
419 char *line;
420 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
423 &line)) {
424 return NULL;
425 }
426 if (entry_number < 0) {
427 PyErr_SetString(PyExc_ValueError,
428 "History index cannot be negative");
429 return NULL;
430 }
431 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
432 if (!old_entry) {
433 PyErr_Format(PyExc_ValueError,
434 "No history item at position %d",
435 entry_number);
436 return NULL;
437 }
438 /* free memory allocated for the old history entry */
439 if (old_entry->line)
440 free(old_entry->line);
441 if (old_entry->data)
442 free(old_entry->data);
443 free(old_entry);
Skip Montanaroe5069012004-08-15 14:32:06 +0000444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000446}
447
448PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000449"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000450replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000451
452/* Add a line to the history buffer */
453
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000454static PyObject *
455py_add_history(PyObject *self, PyObject *args)
456{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
460 return NULL;
461 }
462 add_history(line);
463 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000464}
465
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000466PyDoc_STRVAR(doc_add_history,
467"add_history(string) -> None\n\
468add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000469
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000470
Guido van Rossum74f31432003-01-07 20:01:29 +0000471/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000472
473static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000474get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000475{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000476 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000477}
Guido van Rossum74f31432003-01-07 20:01:29 +0000478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479PyDoc_STRVAR(doc_get_completer_delims,
480"get_completer_delims() -> string\n\
481get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000482
Guido van Rossum74f31432003-01-07 20:01:29 +0000483
484/* Set the completer function */
485
Guido van Rossum290900a1997-09-26 21:51:21 +0000486static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000487set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000490}
491
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000492PyDoc_STRVAR(doc_set_completer,
493"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000494Set or remove the completer function.\n\
495The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000496for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000497It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000498
Guido van Rossum74f31432003-01-07 20:01:29 +0000499
Michael W. Hudson796df152003-01-30 10:12:51 +0000500static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000501get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000502{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 if (completer == NULL) {
504 Py_RETURN_NONE;
505 }
506 Py_INCREF(completer);
507 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000508}
509
510PyDoc_STRVAR(doc_get_completer,
511"get_completer() -> function\n\
512\n\
513Returns current completer function.");
514
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000515/* Exported function to get any element of history */
516
517static PyObject *
518get_history_item(PyObject *self, PyObject *args)
519{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 int idx = 0;
521 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000522
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000523 if (!PyArg_ParseTuple(args, "i:index", &idx))
524 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000525#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 if (using_libedit_emulation) {
527 /* Libedit emulation uses 0-based indexes,
528 * the real one uses 1-based indexes,
529 * adjust the index to ensure that Python
530 * code doesn't have to worry about the
531 * difference.
532 */
533 HISTORY_STATE *hist_st;
534 hist_st = history_get_history_state();
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 idx --;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 /*
539 * Apple's readline emulation crashes when
540 * the index is out of range, therefore
541 * test for that and fail gracefully.
542 */
543 if (idx < 0 || idx >= hist_st->length) {
544 Py_RETURN_NONE;
545 }
546 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000547#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 if ((hist_ent = history_get(idx)))
549 return PyUnicode_FromString(hist_ent->line);
550 else {
551 Py_RETURN_NONE;
552 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000553}
554
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000555PyDoc_STRVAR(doc_get_history_item,
556"get_history_item() -> string\n\
557return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000558
Guido van Rossum74f31432003-01-07 20:01:29 +0000559
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000560/* Exported function to get current length of history */
561
562static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000563get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000564{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 HISTORY_STATE *hist_st;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 hist_st = history_get_history_state();
568 return PyLong_FromLong(hist_st ? (long) hist_st->length : (long) 0);
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000569}
570
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000571PyDoc_STRVAR(doc_get_current_history_length,
572"get_current_history_length() -> integer\n\
573return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000574
Guido van Rossum74f31432003-01-07 20:01:29 +0000575
Guido van Rossum79378ff1997-10-07 14:53:21 +0000576/* Exported function to read the current line buffer */
577
578static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000579get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000580{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000582}
583
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000584PyDoc_STRVAR(doc_get_line_buffer,
585"get_line_buffer() -> string\n\
586return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000587
Guido van Rossum74f31432003-01-07 20:01:29 +0000588
Martin v. Löwise7a97962003-09-20 16:08:33 +0000589#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
590
591/* Exported function to clear the current history */
592
593static PyObject *
594py_clear_history(PyObject *self, PyObject *noarg)
595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 clear_history();
597 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000598}
599
600PyDoc_STRVAR(doc_clear_history,
601"clear_history() -> None\n\
602Clear the current readline history.");
603#endif
604
605
Guido van Rossum79378ff1997-10-07 14:53:21 +0000606/* Exported function to insert text into the line buffer */
607
608static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000609insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 char *s;
612 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
613 return NULL;
614 rl_insert_text(s);
615 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000616}
617
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000618PyDoc_STRVAR(doc_insert_text,
619"insert_text(string) -> None\n\
620Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000621
Guido van Rossum74f31432003-01-07 20:01:29 +0000622
623/* Redisplay the line buffer */
624
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000625static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000626redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000627{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 rl_redisplay();
629 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000630}
631
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000632PyDoc_STRVAR(doc_redisplay,
633"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000634Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000635contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000636
Guido van Rossum74f31432003-01-07 20:01:29 +0000637
Guido van Rossum290900a1997-09-26 21:51:21 +0000638/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000639
640static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000641{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
643 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
644 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
645 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
646 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
647 {"read_history_file", read_history_file,
648 METH_VARARGS, doc_read_history_file},
649 {"write_history_file", write_history_file,
650 METH_VARARGS, doc_write_history_file},
651 {"get_history_item", get_history_item,
652 METH_VARARGS, doc_get_history_item},
653 {"get_current_history_length", (PyCFunction)get_current_history_length,
654 METH_NOARGS, doc_get_current_history_length},
655 {"set_history_length", set_history_length,
656 METH_VARARGS, set_history_length_doc},
657 {"get_history_length", get_history_length,
658 METH_NOARGS, get_history_length_doc},
659 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
660 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
661 {"get_completion_type", get_completion_type,
662 METH_NOARGS, doc_get_completion_type},
663 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
664 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 {"set_completer_delims", set_completer_delims,
667 METH_VARARGS, doc_set_completer_delims},
668 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
669 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
670 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
671 {"get_completer_delims", get_completer_delims,
672 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000674 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
675 METH_VARARGS, doc_set_completion_display_matches_hook},
676 {"set_startup_hook", set_startup_hook,
677 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000678#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 {"set_pre_input_hook", set_pre_input_hook,
680 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000681#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000682#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000683 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000684#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000686};
687
Guido van Rossum05ac4492003-01-07 20:04:12 +0000688
Martin v. Löwis0daad592001-09-30 21:09:59 +0000689/* C function to call the Python hooks. */
690
691static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000692on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000693{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 int result = 0;
695 if (func != NULL) {
696 PyObject *r;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000697#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000699#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000700 r = PyObject_CallFunction(func, NULL);
701 if (r == NULL)
702 goto error;
703 if (r == Py_None)
704 result = 0;
705 else {
706 result = PyLong_AsLong(r);
707 if (result == -1 && PyErr_Occurred())
708 goto error;
709 }
710 Py_DECREF(r);
711 goto done;
712 error:
713 PyErr_Clear();
714 Py_XDECREF(r);
715 done:
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000716#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000718#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 return result;
720 }
721 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000722}
723
724static int
725on_startup_hook(void)
726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000728}
729
730#ifdef HAVE_RL_PRE_INPUT_HOOK
731static int
732on_pre_input_hook(void)
733{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000735}
736#endif
737
Guido van Rossum05ac4492003-01-07 20:04:12 +0000738
Thomas Wouters89d996e2007-09-08 17:39:28 +0000739/* C function to call the Python completion_display_matches */
740
741static void
742on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000743 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000744{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000745 int i;
746 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000747#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000749#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 m = PyList_New(num_matches);
751 if (m == NULL)
752 goto error;
753 for (i = 0; i < num_matches; i++) {
754 s = PyUnicode_FromString(matches[i+1]);
755 if (s == NULL)
756 goto error;
757 if (PyList_SetItem(m, i, s) == -1)
758 goto error;
759 }
760 r = PyObject_CallFunction(completion_display_matches_hook,
761 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 if (r == NULL ||
766 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
767 goto error;
768 }
769 Py_XDECREF(r); r=NULL;
770
771 if (0) {
772 error:
773 PyErr_Clear();
774 Py_XDECREF(m);
775 Py_XDECREF(r);
776 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000777#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000779#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000780}
781
782
Guido van Rossum290900a1997-09-26 21:51:21 +0000783/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000784
Guido van Rossum290900a1997-09-26 21:51:21 +0000785static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000786on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000787{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 char *result = NULL;
789 if (completer != NULL) {
790 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000791#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000793#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 rl_attempted_completion_over = 1;
795 r = PyObject_CallFunction(completer, "si", text, state);
796 if (r == NULL)
797 goto error;
798 if (r == Py_None) {
799 result = NULL;
800 }
801 else {
802 char *s = _PyUnicode_AsString(r);
803 if (s == NULL)
804 goto error;
805 result = strdup(s);
806 }
807 Py_DECREF(r);
808 goto done;
809 error:
810 PyErr_Clear();
811 Py_XDECREF(r);
812 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000813#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000815#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 return result;
817 }
818 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000819}
820
Guido van Rossum290900a1997-09-26 21:51:21 +0000821
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000822/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000823 * before calling the normal completer */
824
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000825static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000826flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000827{
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000828#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000830#endif
831#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000833#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 Py_XDECREF(begidx);
835 Py_XDECREF(endidx);
836 begidx = PyLong_FromLong((long) start);
837 endidx = PyLong_FromLong((long) end);
838 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000839}
840
Guido van Rossum05ac4492003-01-07 20:04:12 +0000841
Guido van Rossum290900a1997-09-26 21:51:21 +0000842/* Helper to initialize GNU readline properly. */
843
844static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000845setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000846{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000847#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000848 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
849 if (!saved_locale)
850 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000851#endif
852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000856#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 /* Allow $if term= in .inputrc to work */
858 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000859#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 /* Force rebind of TAB to insert-tab */
861 rl_bind_key('\t', rl_insert);
862 /* Bind both ESC-TAB and ESC-ESC to the completion function */
863 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
864 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
865 /* Set our hook functions */
866 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000867#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000869#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 /* Set our completion function */
871 rl_attempted_completion_function = (CPPFunction *)flex_complete;
872 /* Set Python word break characters */
873 rl_completer_word_break_characters =
874 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
875 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 begidx = PyLong_FromLong(0L);
878 endidx = PyLong_FromLong(0L);
879 /* Initialize (allows .inputrc to override)
880 *
881 * XXX: A bug in the readline-2.2 library causes a memory leak
882 * inside this function. Nothing we can do about it.
883 */
884 rl_initialize();
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000887}
888
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000889/* Wrapper around GNU readline that handles signals differently. */
890
891
892#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000895static void
896rlhandler(char *text)
897{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 completed_input_string = text;
899 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000900}
901
902extern PyThreadState* _PyOS_ReadlineTState;
903
904static char *
905readline_until_enter_or_signal(char *prompt, int *signal)
906{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 char * not_done_reading = "";
908 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000911#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000913#endif
914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 rl_callback_handler_install (prompt, rlhandler);
916 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 while (completed_input_string == not_done_reading) {
921 int has_input = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 while (!has_input)
924 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 /* [Bug #1552726] Only limit the pause if an input hook has been
927 defined. */
928 struct timeval *timeoutp = NULL;
929 if (PyOS_InputHook)
930 timeoutp = &timeout;
931 FD_SET(fileno(rl_instream), &selectset);
932 /* select resets selectset if no input was available */
933 has_input = select(fileno(rl_instream) + 1, &selectset,
934 NULL, NULL, timeoutp);
935 if(PyOS_InputHook) PyOS_InputHook();
936 }
937
938 if(has_input > 0) {
939 rl_callback_read_char();
940 }
941 else if (errno == EINTR) {
942 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000943#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000945#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000947#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000949#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 if (s < 0) {
951 rl_free_line_state();
952 rl_cleanup_after_signal();
953 rl_callback_handler_remove();
954 *signal = 1;
955 completed_input_string = NULL;
956 }
957 }
958 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000961}
962
963
964#else
Guido van Rossum290900a1997-09-26 21:51:21 +0000965
966/* Interrupt handler */
967
968static jmp_buf jbuf;
969
Guido van Rossum0969d361997-08-05 21:27:50 +0000970/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +0000971static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000972onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +0000973{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +0000975}
976
Guido van Rossum290900a1997-09-26 21:51:21 +0000977
Guido van Rossum0969d361997-08-05 21:27:50 +0000978static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000979readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +0000980{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 PyOS_sighandler_t old_inthandler;
982 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +0000983
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 *signal = 0;
985
986 old_inthandler = PyOS_setsig(SIGINT, onintr);
987 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +0000988#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
990 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +0000991#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 PyOS_setsig(SIGINT, old_inthandler);
993 *signal = 1;
994 return NULL;
995 }
996 rl_event_hook = PyOS_InputHook;
997 p = readline(prompt);
998 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000999
1000 return p;
1001}
1002#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1003
1004
1005static char *
1006call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1007{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 size_t n;
1009 char *p, *q;
1010 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001011
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001012#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1014 if (!saved_locale)
1015 Py_FatalError("not enough memory to save locale");
1016 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001017#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1020 rl_instream = sys_stdin;
1021 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001022#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001024#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 /* we got an interrupt signal */
1030 if (signal) {
1031 RESTORE_LOCALE(saved_locale)
1032 return NULL;
1033 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 /* We got an EOF, return a empty string. */
1036 if (p == NULL) {
1037 p = PyMem_Malloc(1);
1038 if (p != NULL)
1039 *p = '\0';
1040 RESTORE_LOCALE(saved_locale)
1041 return p;
1042 }
1043
1044 /* we have a valid line */
1045 n = strlen(p);
1046 if (n > 0) {
1047 char *line;
1048 HISTORY_STATE *state = history_get_history_state();
1049 if (state->length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001050#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 if (using_libedit_emulation) {
1052 /*
1053 * Libedit's emulation uses 0-based indexes,
1054 * the real readline uses 1-based indexes.
1055 */
1056 line = history_get(state->length - 1)->line;
1057 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001058#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 line = history_get(state->length)->line;
1060 else
1061 line = "";
1062 if (strcmp(p, line))
1063 add_history(p);
1064 /* the history docs don't say so, but the address of state
1065 changes each time history_get_history_state is called
1066 which makes me think it's freshly malloc'd memory...
1067 on the other hand, the address of the last line stays the
1068 same as long as history isn't extended, so it appears to
1069 be malloc'd but managed by the history package... */
1070 free(state);
1071 }
1072 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1073 release the original. */
1074 q = p;
1075 p = PyMem_Malloc(n+2);
1076 if (p != NULL) {
1077 strncpy(p, q, n);
1078 p[n] = '\n';
1079 p[n+1] = '\0';
1080 }
1081 free(q);
1082 RESTORE_LOCALE(saved_locale)
1083 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001084}
1085
Guido van Rossum290900a1997-09-26 21:51:21 +00001086
1087/* Initialize the module */
1088
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001089PyDoc_STRVAR(doc_module,
1090"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001091
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001092#ifdef __APPLE__
1093PyDoc_STRVAR(doc_module_le,
1094"Importing this module enables command line editing using libedit readline.");
1095#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001096
1097static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001098 PyModuleDef_HEAD_INIT,
1099 "readline",
1100 doc_module,
1101 -1,
1102 readline_methods,
1103 NULL,
1104 NULL,
1105 NULL,
1106 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001107};
1108
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001109
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001110PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001111PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001112{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001114
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001115#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1117 using_libedit_emulation = 1;
1118 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 if (using_libedit_emulation)
1121 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001122
1123#endif /* __APPLE__ */
1124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 if (m == NULL)
1128 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001129
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001130
1131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 PyOS_ReadlineFunctionPointer = call_readline;
1133 setup_readline();
1134 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001135}