blob: c8aac8cd15e75d58b89063a4f3bfd82d2d83ed6c [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
Mark Dickinson29b238e2010-08-03 16:08:16 +0000381/* _py_free_history_entry: Utility function to free a history entry. */
382
383#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
384
385/* Readline version >= 5.0 introduced a timestamp field into the history entry
386 structure; this needs to be freed to avoid a memory leak. This version of
387 readline also introduced the handy 'free_history_entry' function, which
388 takes care of the timestamp. */
389
390static void
391_py_free_history_entry(HIST_ENTRY *entry)
392{
393 histdata_t data = free_history_entry(entry);
394 free(data);
395}
396
397#else
398
399/* No free_history_entry function; free everything manually. */
400
401static void
402_py_free_history_entry(HIST_ENTRY *entry)
403{
404 if (entry->line)
405 free((void *)entry->line);
406 if (entry->data)
407 free(entry->data);
408 free(entry);
409}
410
411#endif
412
Skip Montanaroe5069012004-08-15 14:32:06 +0000413static PyObject *
414py_remove_history(PyObject *self, PyObject *args)
415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 int entry_number;
417 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
420 return NULL;
421 if (entry_number < 0) {
422 PyErr_SetString(PyExc_ValueError,
423 "History index cannot be negative");
424 return NULL;
425 }
426 entry = remove_history(entry_number);
427 if (!entry) {
428 PyErr_Format(PyExc_ValueError,
429 "No history item at position %d",
430 entry_number);
431 return NULL;
432 }
433 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000434 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000436}
437
438PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000439"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000440remove history item given by its position");
441
442static PyObject *
443py_replace_history(PyObject *self, PyObject *args)
444{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 int entry_number;
446 char *line;
447 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000449 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
450 &line)) {
451 return NULL;
452 }
453 if (entry_number < 0) {
454 PyErr_SetString(PyExc_ValueError,
455 "History index cannot be negative");
456 return NULL;
457 }
458 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
459 if (!old_entry) {
460 PyErr_Format(PyExc_ValueError,
461 "No history item at position %d",
462 entry_number);
463 return NULL;
464 }
465 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000466 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000468}
469
470PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000471"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000472replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000473
474/* Add a line to the history buffer */
475
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000476static PyObject *
477py_add_history(PyObject *self, PyObject *args)
478{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
482 return NULL;
483 }
484 add_history(line);
485 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000486}
487
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000488PyDoc_STRVAR(doc_add_history,
489"add_history(string) -> None\n\
490add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000491
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000492
Guido van Rossum74f31432003-01-07 20:01:29 +0000493/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000494
495static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000496get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000497{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000499}
Guido van Rossum74f31432003-01-07 20:01:29 +0000500
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000501PyDoc_STRVAR(doc_get_completer_delims,
502"get_completer_delims() -> string\n\
503get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000504
Guido van Rossum74f31432003-01-07 20:01:29 +0000505
506/* Set the completer function */
507
Guido van Rossum290900a1997-09-26 21:51:21 +0000508static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000509set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000512}
513
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000514PyDoc_STRVAR(doc_set_completer,
515"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000516Set or remove the completer function.\n\
517The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000518for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000519It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000520
Guido van Rossum74f31432003-01-07 20:01:29 +0000521
Michael W. Hudson796df152003-01-30 10:12:51 +0000522static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000523get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000524{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 if (completer == NULL) {
526 Py_RETURN_NONE;
527 }
528 Py_INCREF(completer);
529 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000530}
531
532PyDoc_STRVAR(doc_get_completer,
533"get_completer() -> function\n\
534\n\
535Returns current completer function.");
536
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000537/* Exported function to get any element of history */
538
539static PyObject *
540get_history_item(PyObject *self, PyObject *args)
541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 int idx = 0;
543 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 if (!PyArg_ParseTuple(args, "i:index", &idx))
546 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000547#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 if (using_libedit_emulation) {
549 /* Libedit emulation uses 0-based indexes,
550 * the real one uses 1-based indexes,
551 * adjust the index to ensure that Python
552 * code doesn't have to worry about the
553 * difference.
554 */
555 HISTORY_STATE *hist_st;
556 hist_st = history_get_history_state();
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 idx --;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 /*
561 * Apple's readline emulation crashes when
562 * the index is out of range, therefore
563 * test for that and fail gracefully.
564 */
565 if (idx < 0 || idx >= hist_st->length) {
566 Py_RETURN_NONE;
567 }
568 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000569#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 if ((hist_ent = history_get(idx)))
571 return PyUnicode_FromString(hist_ent->line);
572 else {
573 Py_RETURN_NONE;
574 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000575}
576
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000577PyDoc_STRVAR(doc_get_history_item,
578"get_history_item() -> string\n\
579return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000580
Guido van Rossum74f31432003-01-07 20:01:29 +0000581
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000582/* Exported function to get current length of history */
583
584static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000585get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 HISTORY_STATE *hist_st;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 hist_st = history_get_history_state();
590 return PyLong_FromLong(hist_st ? (long) hist_st->length : (long) 0);
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000591}
592
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000593PyDoc_STRVAR(doc_get_current_history_length,
594"get_current_history_length() -> integer\n\
595return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000596
Guido van Rossum74f31432003-01-07 20:01:29 +0000597
Guido van Rossum79378ff1997-10-07 14:53:21 +0000598/* Exported function to read the current line buffer */
599
600static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000601get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000602{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000604}
605
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000606PyDoc_STRVAR(doc_get_line_buffer,
607"get_line_buffer() -> string\n\
608return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000609
Guido van Rossum74f31432003-01-07 20:01:29 +0000610
Martin v. Löwise7a97962003-09-20 16:08:33 +0000611#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
612
613/* Exported function to clear the current history */
614
615static PyObject *
616py_clear_history(PyObject *self, PyObject *noarg)
617{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 clear_history();
619 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000620}
621
622PyDoc_STRVAR(doc_clear_history,
623"clear_history() -> None\n\
624Clear the current readline history.");
625#endif
626
627
Guido van Rossum79378ff1997-10-07 14:53:21 +0000628/* Exported function to insert text into the line buffer */
629
630static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000631insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000632{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 char *s;
634 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
635 return NULL;
636 rl_insert_text(s);
637 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000638}
639
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000640PyDoc_STRVAR(doc_insert_text,
641"insert_text(string) -> None\n\
642Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000643
Guido van Rossum74f31432003-01-07 20:01:29 +0000644
645/* Redisplay the line buffer */
646
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000647static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000648redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000649{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 rl_redisplay();
651 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000652}
653
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000654PyDoc_STRVAR(doc_redisplay,
655"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000656Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000657contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000658
Guido van Rossum74f31432003-01-07 20:01:29 +0000659
Guido van Rossum290900a1997-09-26 21:51:21 +0000660/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000661
662static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000663{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
665 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
666 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
667 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
668 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
669 {"read_history_file", read_history_file,
670 METH_VARARGS, doc_read_history_file},
671 {"write_history_file", write_history_file,
672 METH_VARARGS, doc_write_history_file},
673 {"get_history_item", get_history_item,
674 METH_VARARGS, doc_get_history_item},
675 {"get_current_history_length", (PyCFunction)get_current_history_length,
676 METH_NOARGS, doc_get_current_history_length},
677 {"set_history_length", set_history_length,
678 METH_VARARGS, set_history_length_doc},
679 {"get_history_length", get_history_length,
680 METH_NOARGS, get_history_length_doc},
681 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
682 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
683 {"get_completion_type", get_completion_type,
684 METH_NOARGS, doc_get_completion_type},
685 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
686 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 {"set_completer_delims", set_completer_delims,
689 METH_VARARGS, doc_set_completer_delims},
690 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
691 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
692 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
693 {"get_completer_delims", get_completer_delims,
694 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
697 METH_VARARGS, doc_set_completion_display_matches_hook},
698 {"set_startup_hook", set_startup_hook,
699 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000700#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 {"set_pre_input_hook", set_pre_input_hook,
702 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000703#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000704#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000706#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000708};
709
Guido van Rossum05ac4492003-01-07 20:04:12 +0000710
Martin v. Löwis0daad592001-09-30 21:09:59 +0000711/* C function to call the Python hooks. */
712
713static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000714on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000715{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 int result = 0;
717 if (func != NULL) {
718 PyObject *r;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000719#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000721#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 r = PyObject_CallFunction(func, NULL);
723 if (r == NULL)
724 goto error;
725 if (r == Py_None)
726 result = 0;
727 else {
728 result = PyLong_AsLong(r);
729 if (result == -1 && PyErr_Occurred())
730 goto error;
731 }
732 Py_DECREF(r);
733 goto done;
734 error:
735 PyErr_Clear();
736 Py_XDECREF(r);
737 done:
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000738#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000740#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 return result;
742 }
743 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000744}
745
746static int
747on_startup_hook(void)
748{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000750}
751
752#ifdef HAVE_RL_PRE_INPUT_HOOK
753static int
754on_pre_input_hook(void)
755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000757}
758#endif
759
Guido van Rossum05ac4492003-01-07 20:04:12 +0000760
Thomas Wouters89d996e2007-09-08 17:39:28 +0000761/* C function to call the Python completion_display_matches */
762
763static void
764on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000766{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 int i;
768 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000769#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000770 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000771#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 m = PyList_New(num_matches);
773 if (m == NULL)
774 goto error;
775 for (i = 0; i < num_matches; i++) {
776 s = PyUnicode_FromString(matches[i+1]);
777 if (s == NULL)
778 goto error;
779 if (PyList_SetItem(m, i, s) == -1)
780 goto error;
781 }
782 r = PyObject_CallFunction(completion_display_matches_hook,
783 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000786
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 if (r == NULL ||
788 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
789 goto error;
790 }
791 Py_XDECREF(r); r=NULL;
792
793 if (0) {
794 error:
795 PyErr_Clear();
796 Py_XDECREF(m);
797 Py_XDECREF(r);
798 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000799#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000801#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000802}
803
804
Guido van Rossum290900a1997-09-26 21:51:21 +0000805/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000806
Guido van Rossum290900a1997-09-26 21:51:21 +0000807static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000808on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000809{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 char *result = NULL;
811 if (completer != NULL) {
812 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000813#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000815#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 rl_attempted_completion_over = 1;
817 r = PyObject_CallFunction(completer, "si", text, state);
818 if (r == NULL)
819 goto error;
820 if (r == Py_None) {
821 result = NULL;
822 }
823 else {
824 char *s = _PyUnicode_AsString(r);
825 if (s == NULL)
826 goto error;
827 result = strdup(s);
828 }
829 Py_DECREF(r);
830 goto done;
831 error:
832 PyErr_Clear();
833 Py_XDECREF(r);
834 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000835#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000837#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 return result;
839 }
840 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000841}
842
Guido van Rossum290900a1997-09-26 21:51:21 +0000843
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000844/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000845 * before calling the normal completer */
846
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000847static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000848flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000849{
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000850#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000852#endif
853#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000855#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 Py_XDECREF(begidx);
857 Py_XDECREF(endidx);
858 begidx = PyLong_FromLong((long) start);
859 endidx = PyLong_FromLong((long) end);
860 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000861}
862
Guido van Rossum05ac4492003-01-07 20:04:12 +0000863
Guido van Rossum290900a1997-09-26 21:51:21 +0000864/* Helper to initialize GNU readline properly. */
865
866static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000867setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000868{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000869#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
871 if (!saved_locale)
872 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000873#endif
874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000878#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 /* Allow $if term= in .inputrc to work */
880 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000881#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000882 /* Force rebind of TAB to insert-tab */
883 rl_bind_key('\t', rl_insert);
884 /* Bind both ESC-TAB and ESC-ESC to the completion function */
885 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
886 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
887 /* Set our hook functions */
888 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000889#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000891#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 /* Set our completion function */
893 rl_attempted_completion_function = (CPPFunction *)flex_complete;
894 /* Set Python word break characters */
895 rl_completer_word_break_characters =
896 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
897 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 begidx = PyLong_FromLong(0L);
900 endidx = PyLong_FromLong(0L);
901 /* Initialize (allows .inputrc to override)
902 *
903 * XXX: A bug in the readline-2.2 library causes a memory leak
904 * inside this function. Nothing we can do about it.
905 */
906 rl_initialize();
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000909}
910
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000911/* Wrapper around GNU readline that handles signals differently. */
912
913
914#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000916static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000917static void
918rlhandler(char *text)
919{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 completed_input_string = text;
921 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000922}
923
924extern PyThreadState* _PyOS_ReadlineTState;
925
926static char *
927readline_until_enter_or_signal(char *prompt, int *signal)
928{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 char * not_done_reading = "";
930 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000933#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000935#endif
936
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 rl_callback_handler_install (prompt, rlhandler);
938 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000939
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 while (completed_input_string == not_done_reading) {
943 int has_input = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 while (!has_input)
946 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 /* [Bug #1552726] Only limit the pause if an input hook has been
949 defined. */
950 struct timeval *timeoutp = NULL;
951 if (PyOS_InputHook)
952 timeoutp = &timeout;
953 FD_SET(fileno(rl_instream), &selectset);
954 /* select resets selectset if no input was available */
955 has_input = select(fileno(rl_instream) + 1, &selectset,
956 NULL, NULL, timeoutp);
957 if(PyOS_InputHook) PyOS_InputHook();
958 }
959
960 if(has_input > 0) {
961 rl_callback_read_char();
962 }
963 else if (errno == EINTR) {
964 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000965#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000967#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000969#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000971#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 if (s < 0) {
973 rl_free_line_state();
974 rl_cleanup_after_signal();
975 rl_callback_handler_remove();
976 *signal = 1;
977 completed_input_string = NULL;
978 }
979 }
980 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000983}
984
985
986#else
Guido van Rossum290900a1997-09-26 21:51:21 +0000987
988/* Interrupt handler */
989
990static jmp_buf jbuf;
991
Guido van Rossum0969d361997-08-05 21:27:50 +0000992/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +0000993static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000994onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +0000995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +0000997}
998
Guido van Rossum290900a1997-09-26 21:51:21 +0000999
Guido van Rossum0969d361997-08-05 21:27:50 +00001000static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001001readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001002{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 PyOS_sighandler_t old_inthandler;
1004 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 *signal = 0;
1007
1008 old_inthandler = PyOS_setsig(SIGINT, onintr);
1009 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001010#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1012 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001013#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 PyOS_setsig(SIGINT, old_inthandler);
1015 *signal = 1;
1016 return NULL;
1017 }
1018 rl_event_hook = PyOS_InputHook;
1019 p = readline(prompt);
1020 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001021
1022 return p;
1023}
1024#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1025
1026
1027static char *
1028call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1029{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 size_t n;
1031 char *p, *q;
1032 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001033
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001034#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1036 if (!saved_locale)
1037 Py_FatalError("not enough memory to save locale");
1038 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001039#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1042 rl_instream = sys_stdin;
1043 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001044#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001046#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 /* we got an interrupt signal */
1052 if (signal) {
1053 RESTORE_LOCALE(saved_locale)
1054 return NULL;
1055 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 /* We got an EOF, return a empty string. */
1058 if (p == NULL) {
1059 p = PyMem_Malloc(1);
1060 if (p != NULL)
1061 *p = '\0';
1062 RESTORE_LOCALE(saved_locale)
1063 return p;
1064 }
1065
1066 /* we have a valid line */
1067 n = strlen(p);
1068 if (n > 0) {
1069 char *line;
1070 HISTORY_STATE *state = history_get_history_state();
1071 if (state->length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001072#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (using_libedit_emulation) {
1074 /*
1075 * Libedit's emulation uses 0-based indexes,
1076 * the real readline uses 1-based indexes.
1077 */
1078 line = history_get(state->length - 1)->line;
1079 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001080#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 line = history_get(state->length)->line;
1082 else
1083 line = "";
1084 if (strcmp(p, line))
1085 add_history(p);
1086 /* the history docs don't say so, but the address of state
1087 changes each time history_get_history_state is called
1088 which makes me think it's freshly malloc'd memory...
1089 on the other hand, the address of the last line stays the
1090 same as long as history isn't extended, so it appears to
1091 be malloc'd but managed by the history package... */
1092 free(state);
1093 }
1094 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1095 release the original. */
1096 q = p;
1097 p = PyMem_Malloc(n+2);
1098 if (p != NULL) {
1099 strncpy(p, q, n);
1100 p[n] = '\n';
1101 p[n+1] = '\0';
1102 }
1103 free(q);
1104 RESTORE_LOCALE(saved_locale)
1105 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001106}
1107
Guido van Rossum290900a1997-09-26 21:51:21 +00001108
1109/* Initialize the module */
1110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111PyDoc_STRVAR(doc_module,
1112"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001113
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001114#ifdef __APPLE__
1115PyDoc_STRVAR(doc_module_le,
1116"Importing this module enables command line editing using libedit readline.");
1117#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001118
1119static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 PyModuleDef_HEAD_INIT,
1121 "readline",
1122 doc_module,
1123 -1,
1124 readline_methods,
1125 NULL,
1126 NULL,
1127 NULL,
1128 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001129};
1130
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001131
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001132PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001133PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001136
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001137#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1139 using_libedit_emulation = 1;
1140 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 if (using_libedit_emulation)
1143 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001144
1145#endif /* __APPLE__ */
1146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 if (m == NULL)
1150 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001151
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001152
1153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 PyOS_ReadlineFunctionPointer = call_readline;
1155 setup_readline();
1156 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001157}