blob: 18908ef4e6e2345afcd53bf09bfa437c7765e7d4 [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
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000537/* Private function to get current length of history. XXX It may be
538 * possible to replace this with a direct use of history_length instead,
539 * but it's not clear whether BSD's libedit keeps history_length up to date.
540 * See issue #8065.*/
541
542static int
543_py_get_history_length(void)
544{
545 HISTORY_STATE *hist_st = history_get_history_state();
546 int length = hist_st->length;
547 /* the history docs don't say so, but the address of hist_st changes each
548 time history_get_history_state is called which makes me think it's
549 freshly malloc'd memory... on the other hand, the address of the last
550 line stays the same as long as history isn't extended, so it appears to
551 be malloc'd but managed by the history package... */
552 free(hist_st);
553 return length;
554}
555
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000556/* Exported function to get any element of history */
557
558static PyObject *
559get_history_item(PyObject *self, PyObject *args)
560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 int idx = 0;
562 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000563
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 if (!PyArg_ParseTuple(args, "i:index", &idx))
565 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000566#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 if (using_libedit_emulation) {
568 /* Libedit emulation uses 0-based indexes,
569 * the real one uses 1-based indexes,
570 * adjust the index to ensure that Python
571 * code doesn't have to worry about the
572 * difference.
573 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000574 int length = _py_get_history_length();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 idx --;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 /*
578 * Apple's readline emulation crashes when
579 * the index is out of range, therefore
580 * test for that and fail gracefully.
581 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000582 if (idx < 0 || idx >= length) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 Py_RETURN_NONE;
584 }
585 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000586#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 if ((hist_ent = history_get(idx)))
588 return PyUnicode_FromString(hist_ent->line);
589 else {
590 Py_RETURN_NONE;
591 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000592}
593
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000594PyDoc_STRVAR(doc_get_history_item,
595"get_history_item() -> string\n\
596return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000597
Guido van Rossum74f31432003-01-07 20:01:29 +0000598
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000599/* Exported function to get current length of history */
600
601static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000602get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000603{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000604 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000605}
606
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000607PyDoc_STRVAR(doc_get_current_history_length,
608"get_current_history_length() -> integer\n\
609return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000610
Guido van Rossum74f31432003-01-07 20:01:29 +0000611
Guido van Rossum79378ff1997-10-07 14:53:21 +0000612/* Exported function to read the current line buffer */
613
614static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000615get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000616{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000618}
619
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000620PyDoc_STRVAR(doc_get_line_buffer,
621"get_line_buffer() -> string\n\
622return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000623
Guido van Rossum74f31432003-01-07 20:01:29 +0000624
Martin v. Löwise7a97962003-09-20 16:08:33 +0000625#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
626
627/* Exported function to clear the current history */
628
629static PyObject *
630py_clear_history(PyObject *self, PyObject *noarg)
631{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 clear_history();
633 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000634}
635
636PyDoc_STRVAR(doc_clear_history,
637"clear_history() -> None\n\
638Clear the current readline history.");
639#endif
640
641
Guido van Rossum79378ff1997-10-07 14:53:21 +0000642/* Exported function to insert text into the line buffer */
643
644static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000645insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000646{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 char *s;
648 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
649 return NULL;
650 rl_insert_text(s);
651 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000652}
653
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000654PyDoc_STRVAR(doc_insert_text,
655"insert_text(string) -> None\n\
656Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000657
Guido van Rossum74f31432003-01-07 20:01:29 +0000658
659/* Redisplay the line buffer */
660
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000661static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000662redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000663{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 rl_redisplay();
665 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000666}
667
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000668PyDoc_STRVAR(doc_redisplay,
669"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000670Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000672
Guido van Rossum74f31432003-01-07 20:01:29 +0000673
Guido van Rossum290900a1997-09-26 21:51:21 +0000674/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000675
676static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000678 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
679 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
680 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
681 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
682 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
683 {"read_history_file", read_history_file,
684 METH_VARARGS, doc_read_history_file},
685 {"write_history_file", write_history_file,
686 METH_VARARGS, doc_write_history_file},
687 {"get_history_item", get_history_item,
688 METH_VARARGS, doc_get_history_item},
689 {"get_current_history_length", (PyCFunction)get_current_history_length,
690 METH_NOARGS, doc_get_current_history_length},
691 {"set_history_length", set_history_length,
692 METH_VARARGS, set_history_length_doc},
693 {"get_history_length", get_history_length,
694 METH_NOARGS, get_history_length_doc},
695 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
696 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
697 {"get_completion_type", get_completion_type,
698 METH_NOARGS, doc_get_completion_type},
699 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
700 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 {"set_completer_delims", set_completer_delims,
703 METH_VARARGS, doc_set_completer_delims},
704 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
705 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
706 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
707 {"get_completer_delims", get_completer_delims,
708 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
711 METH_VARARGS, doc_set_completion_display_matches_hook},
712 {"set_startup_hook", set_startup_hook,
713 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000714#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 {"set_pre_input_hook", set_pre_input_hook,
716 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000717#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000718#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000720#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000722};
723
Guido van Rossum05ac4492003-01-07 20:04:12 +0000724
Martin v. Löwis0daad592001-09-30 21:09:59 +0000725/* C function to call the Python hooks. */
726
727static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000728on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000729{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 int result = 0;
731 if (func != NULL) {
732 PyObject *r;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000733#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000735#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 r = PyObject_CallFunction(func, NULL);
737 if (r == NULL)
738 goto error;
739 if (r == Py_None)
740 result = 0;
741 else {
742 result = PyLong_AsLong(r);
743 if (result == -1 && PyErr_Occurred())
744 goto error;
745 }
746 Py_DECREF(r);
747 goto done;
748 error:
749 PyErr_Clear();
750 Py_XDECREF(r);
751 done:
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000752#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000754#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000755 return result;
756 }
757 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000758}
759
760static int
761on_startup_hook(void)
762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000764}
765
766#ifdef HAVE_RL_PRE_INPUT_HOOK
767static int
768on_pre_input_hook(void)
769{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000770 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000771}
772#endif
773
Guido van Rossum05ac4492003-01-07 20:04:12 +0000774
Thomas Wouters89d996e2007-09-08 17:39:28 +0000775/* C function to call the Python completion_display_matches */
776
777static void
778on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 int i;
782 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000783#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000785#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 m = PyList_New(num_matches);
787 if (m == NULL)
788 goto error;
789 for (i = 0; i < num_matches; i++) {
790 s = PyUnicode_FromString(matches[i+1]);
791 if (s == NULL)
792 goto error;
793 if (PyList_SetItem(m, i, s) == -1)
794 goto error;
795 }
796 r = PyObject_CallFunction(completion_display_matches_hook,
797 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000800
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000801 if (r == NULL ||
802 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
803 goto error;
804 }
805 Py_XDECREF(r); r=NULL;
806
807 if (0) {
808 error:
809 PyErr_Clear();
810 Py_XDECREF(m);
811 Py_XDECREF(r);
812 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000813#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000815#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000816}
817
818
Guido van Rossum290900a1997-09-26 21:51:21 +0000819/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000820
Guido van Rossum290900a1997-09-26 21:51:21 +0000821static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000822on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000823{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 char *result = NULL;
825 if (completer != NULL) {
826 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000827#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000829#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 rl_attempted_completion_over = 1;
831 r = PyObject_CallFunction(completer, "si", text, state);
832 if (r == NULL)
833 goto error;
834 if (r == Py_None) {
835 result = NULL;
836 }
837 else {
838 char *s = _PyUnicode_AsString(r);
839 if (s == NULL)
840 goto error;
841 result = strdup(s);
842 }
843 Py_DECREF(r);
844 goto done;
845 error:
846 PyErr_Clear();
847 Py_XDECREF(r);
848 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000849#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000851#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 return result;
853 }
854 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000855}
856
Guido van Rossum290900a1997-09-26 21:51:21 +0000857
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000858/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000859 * before calling the normal completer */
860
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000861static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000862flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000863{
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000864#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000866#endif
867#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000869#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 Py_XDECREF(begidx);
871 Py_XDECREF(endidx);
872 begidx = PyLong_FromLong((long) start);
873 endidx = PyLong_FromLong((long) end);
874 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000875}
876
Guido van Rossum05ac4492003-01-07 20:04:12 +0000877
Guido van Rossum290900a1997-09-26 21:51:21 +0000878/* Helper to initialize GNU readline properly. */
879
880static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000881setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000882{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000883#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
885 if (!saved_locale)
886 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000887#endif
888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000892#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 /* Allow $if term= in .inputrc to work */
894 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000895#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 /* Force rebind of TAB to insert-tab */
897 rl_bind_key('\t', rl_insert);
898 /* Bind both ESC-TAB and ESC-ESC to the completion function */
899 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
900 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
901 /* Set our hook functions */
902 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000903#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000905#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 /* Set our completion function */
907 rl_attempted_completion_function = (CPPFunction *)flex_complete;
908 /* Set Python word break characters */
909 rl_completer_word_break_characters =
910 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
911 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 begidx = PyLong_FromLong(0L);
914 endidx = PyLong_FromLong(0L);
915 /* Initialize (allows .inputrc to override)
916 *
917 * XXX: A bug in the readline-2.2 library causes a memory leak
918 * inside this function. Nothing we can do about it.
919 */
920 rl_initialize();
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000923}
924
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000925/* Wrapper around GNU readline that handles signals differently. */
926
927
928#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000931static void
932rlhandler(char *text)
933{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 completed_input_string = text;
935 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000936}
937
938extern PyThreadState* _PyOS_ReadlineTState;
939
940static char *
941readline_until_enter_or_signal(char *prompt, int *signal)
942{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 char * not_done_reading = "";
944 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000947#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000949#endif
950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 rl_callback_handler_install (prompt, rlhandler);
952 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000953
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 while (completed_input_string == not_done_reading) {
957 int has_input = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 while (!has_input)
960 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 /* [Bug #1552726] Only limit the pause if an input hook has been
963 defined. */
964 struct timeval *timeoutp = NULL;
965 if (PyOS_InputHook)
966 timeoutp = &timeout;
967 FD_SET(fileno(rl_instream), &selectset);
968 /* select resets selectset if no input was available */
969 has_input = select(fileno(rl_instream) + 1, &selectset,
970 NULL, NULL, timeoutp);
971 if(PyOS_InputHook) PyOS_InputHook();
972 }
973
974 if(has_input > 0) {
975 rl_callback_read_char();
976 }
977 else if (errno == EINTR) {
978 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000979#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000981#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000983#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000985#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 if (s < 0) {
987 rl_free_line_state();
988 rl_cleanup_after_signal();
989 rl_callback_handler_remove();
990 *signal = 1;
991 completed_input_string = NULL;
992 }
993 }
994 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000997}
998
999
1000#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001001
1002/* Interrupt handler */
1003
1004static jmp_buf jbuf;
1005
Guido van Rossum0969d361997-08-05 21:27:50 +00001006/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001007static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001008onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001011}
1012
Guido van Rossum290900a1997-09-26 21:51:21 +00001013
Guido van Rossum0969d361997-08-05 21:27:50 +00001014static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001015readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001016{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 PyOS_sighandler_t old_inthandler;
1018 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 *signal = 0;
1021
1022 old_inthandler = PyOS_setsig(SIGINT, onintr);
1023 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001024#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1026 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001027#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 PyOS_setsig(SIGINT, old_inthandler);
1029 *signal = 1;
1030 return NULL;
1031 }
1032 rl_event_hook = PyOS_InputHook;
1033 p = readline(prompt);
1034 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001035
1036 return p;
1037}
1038#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1039
1040
1041static char *
1042call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1043{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 size_t n;
1045 char *p, *q;
1046 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001047
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001048#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1050 if (!saved_locale)
1051 Py_FatalError("not enough memory to save locale");
1052 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001053#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1056 rl_instream = sys_stdin;
1057 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001058#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001060#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 /* we got an interrupt signal */
1066 if (signal) {
1067 RESTORE_LOCALE(saved_locale)
1068 return NULL;
1069 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001070
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 /* We got an EOF, return a empty string. */
1072 if (p == NULL) {
1073 p = PyMem_Malloc(1);
1074 if (p != NULL)
1075 *p = '\0';
1076 RESTORE_LOCALE(saved_locale)
1077 return p;
1078 }
1079
1080 /* we have a valid line */
1081 n = strlen(p);
1082 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001083 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001084 int length = _py_get_history_length();
1085 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001086#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 if (using_libedit_emulation) {
1088 /*
1089 * Libedit's emulation uses 0-based indexes,
1090 * the real readline uses 1-based indexes.
1091 */
Brett Cannon2525dc82010-08-22 20:36:25 +00001092 line = (const char *)history_get(length - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001094#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001095 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 else
1097 line = "";
1098 if (strcmp(p, line))
1099 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 }
1101 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1102 release the original. */
1103 q = p;
1104 p = PyMem_Malloc(n+2);
1105 if (p != NULL) {
1106 strncpy(p, q, n);
1107 p[n] = '\n';
1108 p[n+1] = '\0';
1109 }
1110 free(q);
1111 RESTORE_LOCALE(saved_locale)
1112 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001113}
1114
Guido van Rossum290900a1997-09-26 21:51:21 +00001115
1116/* Initialize the module */
1117
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001118PyDoc_STRVAR(doc_module,
1119"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001120
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001121#ifdef __APPLE__
1122PyDoc_STRVAR(doc_module_le,
1123"Importing this module enables command line editing using libedit readline.");
1124#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001125
1126static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 PyModuleDef_HEAD_INIT,
1128 "readline",
1129 doc_module,
1130 -1,
1131 readline_methods,
1132 NULL,
1133 NULL,
1134 NULL,
1135 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001136};
1137
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001138
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001139PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001140PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001141{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001143
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001144#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1146 using_libedit_emulation = 1;
1147 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 if (using_libedit_emulation)
1150 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001151
1152#endif /* __APPLE__ */
1153
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 if (m == NULL)
1157 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001158
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001159
1160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 PyOS_ReadlineFunctionPointer = call_readline;
1162 setup_readline();
1163 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001164}