blob: 4d54dade5d3f80c21ef03e333c823778be3ccf4f [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
Georg Brandl646fdd62010-10-18 07:27:55 +000067#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Christian Heimes32fbe592007-11-12 15:01:33 +000068static void
69on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000070 int num_matches, int max_length);
Georg Brandl646fdd62010-10-18 07:27:55 +000071#endif
Guido van Rossum0969d361997-08-05 21:27:50 +000072
Guido van Rossum290900a1997-09-26 21:51:21 +000073/* Exported function to send one line to readline's init file parser */
74
75static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000076parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +000077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000078 char *s, *copy;
79 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
80 return NULL;
81 /* Make a copy -- rl_parse_and_bind() modifies its argument */
82 /* Bernard Herzog */
83 copy = malloc(1 + strlen(s));
84 if (copy == NULL)
85 return PyErr_NoMemory();
86 strcpy(copy, s);
87 rl_parse_and_bind(copy);
88 free(copy); /* Free the copy */
89 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +000090}
91
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000092PyDoc_STRVAR(doc_parse_and_bind,
93"parse_and_bind(string) -> None\n\
94Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +000095
96
97/* Exported function to parse a readline init file */
98
99static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000100read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000101{
Victor Stinner19e65a32010-06-11 22:27:14 +0000102 PyObject *filename_obj = Py_None, *filename_bytes;
103 if (!PyArg_ParseTuple(args, "|O:read_init_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000104 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000105 if (filename_obj != Py_None) {
106 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
107 return NULL;
108 errno = rl_read_init_file(PyBytes_AsString(filename_bytes));
109 Py_DECREF(filename_bytes);
110 } else
111 errno = rl_read_init_file(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000112 if (errno)
113 return PyErr_SetFromErrno(PyExc_IOError);
114 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000115}
116
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000117PyDoc_STRVAR(doc_read_init_file,
118"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000119Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000120The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000121
122
Skip Montanaro28067822000-07-06 18:55:12 +0000123/* Exported function to load a readline history file */
124
125static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000126read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000127{
Victor Stinner19e65a32010-06-11 22:27:14 +0000128 PyObject *filename_obj = Py_None, *filename_bytes;
129 if (!PyArg_ParseTuple(args, "|O:read_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000130 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000131 if (filename_obj != Py_None) {
132 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
133 return NULL;
134 errno = read_history(PyBytes_AsString(filename_bytes));
135 Py_DECREF(filename_bytes);
136 } else
137 errno = read_history(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 if (errno)
139 return PyErr_SetFromErrno(PyExc_IOError);
140 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000141}
142
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000143static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000144PyDoc_STRVAR(doc_read_history_file,
145"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000146Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000147The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000148
149
150/* Exported function to save a readline history file */
151
152static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000153write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000154{
Victor Stinner19e65a32010-06-11 22:27:14 +0000155 PyObject *filename_obj = Py_None, *filename_bytes;
156 char *filename;
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100157 int err;
Victor Stinner19e65a32010-06-11 22:27:14 +0000158 if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000160 if (filename_obj != Py_None) {
161 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
162 return NULL;
163 filename = PyBytes_AsString(filename_bytes);
164 } else {
165 filename_bytes = NULL;
166 filename = NULL;
167 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100168 errno = err = write_history(filename);
169 if (!err && _history_length >= 0)
Victor Stinner19e65a32010-06-11 22:27:14 +0000170 history_truncate_file(filename, _history_length);
171 Py_XDECREF(filename_bytes);
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100172 errno = err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 if (errno)
174 return PyErr_SetFromErrno(PyExc_IOError);
175 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000176}
177
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000178PyDoc_STRVAR(doc_write_history_file,
179"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000180Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000181The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000182
183
Guido van Rossum74f31432003-01-07 20:01:29 +0000184/* Set history length */
185
186static PyObject*
187set_history_length(PyObject *self, PyObject *args)
188{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 int length = _history_length;
190 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
191 return NULL;
192 _history_length = length;
193 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000194}
195
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000196PyDoc_STRVAR(set_history_length_doc,
197"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000198set the maximal number of items which will be written to\n\
199the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000200history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000201
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000202
Guido van Rossum74f31432003-01-07 20:01:29 +0000203/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000204
205static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000206get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000207{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000209}
210
Guido van Rossum74f31432003-01-07 20:01:29 +0000211PyDoc_STRVAR(get_history_length_doc,
212"get_history_length() -> int\n\
213return the maximum number of items that will be written to\n\
214the history file.");
215
216
Martin v. Löwis0daad592001-09-30 21:09:59 +0000217/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000218
Martin v. Löwis0daad592001-09-30 21:09:59 +0000219static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000220set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000221{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 PyObject *function = Py_None;
223 char buf[80];
224 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
225 if (!PyArg_ParseTuple(args, buf, &function))
226 return NULL;
227 if (function == Py_None) {
228 Py_XDECREF(*hook_var);
229 *hook_var = NULL;
230 }
231 else if (PyCallable_Check(function)) {
232 PyObject *tmp = *hook_var;
233 Py_INCREF(function);
234 *hook_var = function;
235 Py_XDECREF(tmp);
236 }
237 else {
238 PyOS_snprintf(buf, sizeof(buf),
239 "set_%.50s(func): argument not callable",
240 funcname);
241 PyErr_SetString(PyExc_TypeError, buf);
242 return NULL;
243 }
244 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000245}
246
Guido van Rossum74f31432003-01-07 20:01:29 +0000247
Martin v. Löwis0daad592001-09-30 21:09:59 +0000248/* Exported functions to specify hook functions in Python */
249
Thomas Wouters89d996e2007-09-08 17:39:28 +0000250static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000251static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000252
253#ifdef HAVE_RL_PRE_INPUT_HOOK
254static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000255#endif
256
257static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000258set_completion_display_matches_hook(PyObject *self, PyObject *args)
259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 PyObject *result = set_hook("completion_display_matches_hook",
261 &completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000262#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000263 /* We cannot set this hook globally, since it replaces the
264 default completion display. */
265 rl_completion_display_matches_hook =
266 completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000267#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000268 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000269#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000271#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000272#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000274
Thomas Wouters89d996e2007-09-08 17:39:28 +0000275}
276
277PyDoc_STRVAR(doc_set_completion_display_matches_hook,
278"set_completion_display_matches_hook([function]) -> None\n\
279Set or remove the completion display function.\n\
280The function is called as\n\
281 function(substitution, [matches], longest_match_length)\n\
282once each time matches need to be displayed.");
283
284static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000285set_startup_hook(PyObject *self, PyObject *args)
286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 return set_hook("startup_hook", &startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000288}
289
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000290PyDoc_STRVAR(doc_set_startup_hook,
291"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000292Set or remove the startup_hook function.\n\
293The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000294before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000295
Guido van Rossum74f31432003-01-07 20:01:29 +0000296
Martin v. Löwis0daad592001-09-30 21:09:59 +0000297#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000298
299/* Set pre-input hook */
300
Martin v. Löwis0daad592001-09-30 21:09:59 +0000301static PyObject *
302set_pre_input_hook(PyObject *self, PyObject *args)
303{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000304 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000305}
306
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000307PyDoc_STRVAR(doc_set_pre_input_hook,
308"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000309Set or remove the pre_input_hook function.\n\
310The function is called with no arguments after the first prompt\n\
311has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000312characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000313
Martin v. Löwis0daad592001-09-30 21:09:59 +0000314#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000315
Guido van Rossum74f31432003-01-07 20:01:29 +0000316
Guido van Rossum290900a1997-09-26 21:51:21 +0000317/* Exported function to specify a word completer in Python */
318
319static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000320
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000321static PyObject *begidx = NULL;
322static PyObject *endidx = NULL;
323
Guido van Rossum74f31432003-01-07 20:01:29 +0000324
Thomas Wouters89d996e2007-09-08 17:39:28 +0000325/* Get the completion type for the scope of the tab-completion */
326static PyObject *
327get_completion_type(PyObject *self, PyObject *noarg)
328{
Christian Heimes217cfd12007-12-02 14:31:20 +0000329 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000330}
331
332PyDoc_STRVAR(doc_get_completion_type,
333"get_completion_type() -> int\n\
334Get the type of completion being attempted.");
335
336
Guido van Rossum74f31432003-01-07 20:01:29 +0000337/* Get the beginning index for the scope of the tab-completion */
338
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000339static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000340get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000341{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 Py_INCREF(begidx);
343 return begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000344}
345
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000346PyDoc_STRVAR(doc_get_begidx,
347"get_begidx() -> int\n\
348get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000349
Guido van Rossum74f31432003-01-07 20:01:29 +0000350
351/* Get the ending index for the scope of the tab-completion */
352
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000353static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000354get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000356 Py_INCREF(endidx);
357 return endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000358}
359
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000360PyDoc_STRVAR(doc_get_endidx,
361"get_endidx() -> int\n\
362get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000363
364
Guido van Rossum74f31432003-01-07 20:01:29 +0000365/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000366
367static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000368set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000369{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
373 return NULL;
374 }
375 free((void*)rl_completer_word_break_characters);
376 rl_completer_word_break_characters = strdup(break_chars);
377 Py_RETURN_NONE;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000378}
379
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000380PyDoc_STRVAR(doc_set_completer_delims,
381"set_completer_delims(string) -> None\n\
382set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000383
Mark Dickinson29b238e2010-08-03 16:08:16 +0000384/* _py_free_history_entry: Utility function to free a history entry. */
385
386#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
387
388/* Readline version >= 5.0 introduced a timestamp field into the history entry
389 structure; this needs to be freed to avoid a memory leak. This version of
390 readline also introduced the handy 'free_history_entry' function, which
391 takes care of the timestamp. */
392
393static void
394_py_free_history_entry(HIST_ENTRY *entry)
395{
396 histdata_t data = free_history_entry(entry);
397 free(data);
398}
399
400#else
401
402/* No free_history_entry function; free everything manually. */
403
404static void
405_py_free_history_entry(HIST_ENTRY *entry)
406{
407 if (entry->line)
408 free((void *)entry->line);
409 if (entry->data)
410 free(entry->data);
411 free(entry);
412}
413
414#endif
415
Skip Montanaroe5069012004-08-15 14:32:06 +0000416static PyObject *
417py_remove_history(PyObject *self, PyObject *args)
418{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 int entry_number;
420 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
423 return NULL;
424 if (entry_number < 0) {
425 PyErr_SetString(PyExc_ValueError,
426 "History index cannot be negative");
427 return NULL;
428 }
429 entry = remove_history(entry_number);
430 if (!entry) {
431 PyErr_Format(PyExc_ValueError,
432 "No history item at position %d",
433 entry_number);
434 return NULL;
435 }
436 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000437 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000438 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000439}
440
441PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000442"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000443remove history item given by its position");
444
445static PyObject *
446py_replace_history(PyObject *self, PyObject *args)
447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000448 int entry_number;
449 char *line;
450 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000452 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
453 &line)) {
454 return NULL;
455 }
456 if (entry_number < 0) {
457 PyErr_SetString(PyExc_ValueError,
458 "History index cannot be negative");
459 return NULL;
460 }
461 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
462 if (!old_entry) {
463 PyErr_Format(PyExc_ValueError,
464 "No history item at position %d",
465 entry_number);
466 return NULL;
467 }
468 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000469 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000470 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000471}
472
473PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000474"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000475replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000476
477/* Add a line to the history buffer */
478
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000479static PyObject *
480py_add_history(PyObject *self, PyObject *args)
481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
485 return NULL;
486 }
487 add_history(line);
488 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000489}
490
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000491PyDoc_STRVAR(doc_add_history,
492"add_history(string) -> None\n\
493add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000494
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000495
Guido van Rossum74f31432003-01-07 20:01:29 +0000496/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000497
498static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000499get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000500{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000502}
Guido van Rossum74f31432003-01-07 20:01:29 +0000503
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000504PyDoc_STRVAR(doc_get_completer_delims,
505"get_completer_delims() -> string\n\
506get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000507
Guido van Rossum74f31432003-01-07 20:01:29 +0000508
509/* Set the completer function */
510
Guido van Rossum290900a1997-09-26 21:51:21 +0000511static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000512set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000515}
516
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000517PyDoc_STRVAR(doc_set_completer,
518"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000519Set or remove the completer function.\n\
520The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000521for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000522It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000523
Guido van Rossum74f31432003-01-07 20:01:29 +0000524
Michael W. Hudson796df152003-01-30 10:12:51 +0000525static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000526get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 if (completer == NULL) {
529 Py_RETURN_NONE;
530 }
531 Py_INCREF(completer);
532 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000533}
534
535PyDoc_STRVAR(doc_get_completer,
536"get_completer() -> function\n\
537\n\
538Returns current completer function.");
539
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000540/* Private function to get current length of history. XXX It may be
541 * possible to replace this with a direct use of history_length instead,
542 * but it's not clear whether BSD's libedit keeps history_length up to date.
543 * See issue #8065.*/
544
545static int
546_py_get_history_length(void)
547{
548 HISTORY_STATE *hist_st = history_get_history_state();
549 int length = hist_st->length;
550 /* the history docs don't say so, but the address of hist_st changes each
551 time history_get_history_state is called which makes me think it's
552 freshly malloc'd memory... on the other hand, the address of the last
553 line stays the same as long as history isn't extended, so it appears to
554 be malloc'd but managed by the history package... */
555 free(hist_st);
556 return length;
557}
558
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000559/* Exported function to get any element of history */
560
561static PyObject *
562get_history_item(PyObject *self, PyObject *args)
563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 int idx = 0;
565 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 if (!PyArg_ParseTuple(args, "i:index", &idx))
568 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000569#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 if (using_libedit_emulation) {
571 /* Libedit emulation uses 0-based indexes,
572 * the real one uses 1-based indexes,
573 * adjust the index to ensure that Python
574 * code doesn't have to worry about the
575 * difference.
576 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000577 int length = _py_get_history_length();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 idx --;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 /*
581 * Apple's readline emulation crashes when
582 * the index is out of range, therefore
583 * test for that and fail gracefully.
584 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000585 if (idx < 0 || idx >= length) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 Py_RETURN_NONE;
587 }
588 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000589#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000590 if ((hist_ent = history_get(idx)))
591 return PyUnicode_FromString(hist_ent->line);
592 else {
593 Py_RETURN_NONE;
594 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000595}
596
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000597PyDoc_STRVAR(doc_get_history_item,
598"get_history_item() -> string\n\
599return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000600
Guido van Rossum74f31432003-01-07 20:01:29 +0000601
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000602/* Exported function to get current length of history */
603
604static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000605get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000606{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000607 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000608}
609
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000610PyDoc_STRVAR(doc_get_current_history_length,
611"get_current_history_length() -> integer\n\
612return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000613
Guido van Rossum74f31432003-01-07 20:01:29 +0000614
Guido van Rossum79378ff1997-10-07 14:53:21 +0000615/* Exported function to read the current line buffer */
616
617static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000618get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000619{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000620 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000621}
622
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000623PyDoc_STRVAR(doc_get_line_buffer,
624"get_line_buffer() -> string\n\
625return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000626
Guido van Rossum74f31432003-01-07 20:01:29 +0000627
Martin v. Löwise7a97962003-09-20 16:08:33 +0000628#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
629
630/* Exported function to clear the current history */
631
632static PyObject *
633py_clear_history(PyObject *self, PyObject *noarg)
634{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 clear_history();
636 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000637}
638
639PyDoc_STRVAR(doc_clear_history,
640"clear_history() -> None\n\
641Clear the current readline history.");
642#endif
643
644
Guido van Rossum79378ff1997-10-07 14:53:21 +0000645/* Exported function to insert text into the line buffer */
646
647static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000648insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000649{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 char *s;
651 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
652 return NULL;
653 rl_insert_text(s);
654 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000655}
656
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000657PyDoc_STRVAR(doc_insert_text,
658"insert_text(string) -> None\n\
659Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000660
Guido van Rossum74f31432003-01-07 20:01:29 +0000661
662/* Redisplay the line buffer */
663
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000664static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000665redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000666{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 rl_redisplay();
668 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000669}
670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671PyDoc_STRVAR(doc_redisplay,
672"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000673Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000674contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000675
Guido van Rossum74f31432003-01-07 20:01:29 +0000676
Guido van Rossum290900a1997-09-26 21:51:21 +0000677/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000678
679static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
682 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
683 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
684 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
685 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
686 {"read_history_file", read_history_file,
687 METH_VARARGS, doc_read_history_file},
688 {"write_history_file", write_history_file,
689 METH_VARARGS, doc_write_history_file},
690 {"get_history_item", get_history_item,
691 METH_VARARGS, doc_get_history_item},
692 {"get_current_history_length", (PyCFunction)get_current_history_length,
693 METH_NOARGS, doc_get_current_history_length},
694 {"set_history_length", set_history_length,
695 METH_VARARGS, set_history_length_doc},
696 {"get_history_length", get_history_length,
697 METH_NOARGS, get_history_length_doc},
698 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
699 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
700 {"get_completion_type", get_completion_type,
701 METH_NOARGS, doc_get_completion_type},
702 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
703 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 {"set_completer_delims", set_completer_delims,
706 METH_VARARGS, doc_set_completer_delims},
707 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
708 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
709 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
710 {"get_completer_delims", get_completer_delims,
711 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000712
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
714 METH_VARARGS, doc_set_completion_display_matches_hook},
715 {"set_startup_hook", set_startup_hook,
716 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000717#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 {"set_pre_input_hook", set_pre_input_hook,
719 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000720#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000721#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000723#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000725};
726
Guido van Rossum05ac4492003-01-07 20:04:12 +0000727
Martin v. Löwis0daad592001-09-30 21:09:59 +0000728/* C function to call the Python hooks. */
729
730static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000731on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000732{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 int result = 0;
734 if (func != NULL) {
735 PyObject *r;
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000736#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000738#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 r = PyObject_CallFunction(func, NULL);
740 if (r == NULL)
741 goto error;
742 if (r == Py_None)
743 result = 0;
744 else {
745 result = PyLong_AsLong(r);
746 if (result == -1 && PyErr_Occurred())
747 goto error;
748 }
749 Py_DECREF(r);
750 goto done;
751 error:
752 PyErr_Clear();
753 Py_XDECREF(r);
754 done:
Guido van Rossum3d392eb2007-11-16 00:35:22 +0000755#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000757#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 return result;
759 }
760 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000761}
762
763static int
764on_startup_hook(void)
765{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000767}
768
769#ifdef HAVE_RL_PRE_INPUT_HOOK
770static int
771on_pre_input_hook(void)
772{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000774}
775#endif
776
Guido van Rossum05ac4492003-01-07 20:04:12 +0000777
Thomas Wouters89d996e2007-09-08 17:39:28 +0000778/* C function to call the Python completion_display_matches */
779
Georg Brandl646fdd62010-10-18 07:27:55 +0000780#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Thomas Wouters89d996e2007-09-08 17:39:28 +0000781static void
782on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000784{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 int i;
786 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000787#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000789#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 m = PyList_New(num_matches);
791 if (m == NULL)
792 goto error;
793 for (i = 0; i < num_matches; i++) {
794 s = PyUnicode_FromString(matches[i+1]);
795 if (s == NULL)
796 goto error;
797 if (PyList_SetItem(m, i, s) == -1)
798 goto error;
799 }
800 r = PyObject_CallFunction(completion_display_matches_hook,
801 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000803 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 if (r == NULL ||
806 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
807 goto error;
808 }
809 Py_XDECREF(r); r=NULL;
810
811 if (0) {
812 error:
813 PyErr_Clear();
814 Py_XDECREF(m);
815 Py_XDECREF(r);
816 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000817#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000819#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000820}
821
Senthil Kumaran95c07002010-11-04 03:51:05 +0000822#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000823
Guido van Rossum290900a1997-09-26 21:51:21 +0000824/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000825
Guido van Rossum290900a1997-09-26 21:51:21 +0000826static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000827on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000828{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 char *result = NULL;
830 if (completer != NULL) {
831 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000832#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000834#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 rl_attempted_completion_over = 1;
836 r = PyObject_CallFunction(completer, "si", text, state);
837 if (r == NULL)
838 goto error;
839 if (r == Py_None) {
840 result = NULL;
841 }
842 else {
843 char *s = _PyUnicode_AsString(r);
844 if (s == NULL)
845 goto error;
846 result = strdup(s);
847 }
848 Py_DECREF(r);
849 goto done;
850 error:
851 PyErr_Clear();
852 Py_XDECREF(r);
853 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000854#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000856#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 return result;
858 }
859 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000860}
861
Guido van Rossum290900a1997-09-26 21:51:21 +0000862
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000863/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000864 * before calling the normal completer */
865
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000866static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000867flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000868{
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000869#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000871#endif
872#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000874#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 Py_XDECREF(begidx);
876 Py_XDECREF(endidx);
877 begidx = PyLong_FromLong((long) start);
878 endidx = PyLong_FromLong((long) end);
879 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000880}
881
Guido van Rossum05ac4492003-01-07 20:04:12 +0000882
Guido van Rossum290900a1997-09-26 21:51:21 +0000883/* Helper to initialize GNU readline properly. */
884
885static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000886setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000887{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000888#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
890 if (!saved_locale)
891 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000892#endif
893
R. David Murray52d1b4e2010-12-18 03:48:32 +0000894#ifdef __APPLE__
895 /* the libedit readline emulation resets key bindings etc
896 * when calling rl_initialize. So call it upfront
897 */
898 if (using_libedit_emulation)
899 rl_initialize();
900#endif /* __APPLE__ */
901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000905#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 /* Allow $if term= in .inputrc to work */
907 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000908#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000909 /* Force rebind of TAB to insert-tab */
910 rl_bind_key('\t', rl_insert);
911 /* Bind both ESC-TAB and ESC-ESC to the completion function */
912 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
913 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
914 /* Set our hook functions */
915 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000916#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000918#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 /* Set our completion function */
920 rl_attempted_completion_function = (CPPFunction *)flex_complete;
921 /* Set Python word break characters */
922 rl_completer_word_break_characters =
923 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
924 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 begidx = PyLong_FromLong(0L);
927 endidx = PyLong_FromLong(0L);
928 /* Initialize (allows .inputrc to override)
929 *
930 * XXX: A bug in the readline-2.2 library causes a memory leak
931 * inside this function. Nothing we can do about it.
932 */
R. David Murray52d1b4e2010-12-18 03:48:32 +0000933#ifdef __APPLE__
934 if (using_libedit_emulation)
935 rl_read_init_file(NULL);
936 else
937#endif /* __APPLE__ */
938 rl_initialize();
939
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000941}
942
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000943/* Wrapper around GNU readline that handles signals differently. */
944
945
946#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000949static void
950rlhandler(char *text)
951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 completed_input_string = text;
953 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000954}
955
956extern PyThreadState* _PyOS_ReadlineTState;
957
958static char *
959readline_until_enter_or_signal(char *prompt, int *signal)
960{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 char * not_done_reading = "";
962 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000965#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000967#endif
968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 rl_callback_handler_install (prompt, rlhandler);
970 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 while (completed_input_string == not_done_reading) {
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100975 int has_input = 0, err = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 while (!has_input)
978 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 /* [Bug #1552726] Only limit the pause if an input hook has been
981 defined. */
982 struct timeval *timeoutp = NULL;
983 if (PyOS_InputHook)
984 timeoutp = &timeout;
985 FD_SET(fileno(rl_instream), &selectset);
986 /* select resets selectset if no input was available */
987 has_input = select(fileno(rl_instream) + 1, &selectset,
988 NULL, NULL, timeoutp);
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100989 err = errno;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 if(PyOS_InputHook) PyOS_InputHook();
991 }
992
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100993 if (has_input > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 rl_callback_read_char();
995 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100996 else if (err == EINTR) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000998#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001000#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001002#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001004#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 if (s < 0) {
1006 rl_free_line_state();
1007 rl_cleanup_after_signal();
1008 rl_callback_handler_remove();
1009 *signal = 1;
1010 completed_input_string = NULL;
1011 }
1012 }
1013 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001016}
1017
1018
1019#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001020
1021/* Interrupt handler */
1022
1023static jmp_buf jbuf;
1024
Guido van Rossum0969d361997-08-05 21:27:50 +00001025/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001026static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001027onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001028{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001030}
1031
Guido van Rossum290900a1997-09-26 21:51:21 +00001032
Guido van Rossum0969d361997-08-05 21:27:50 +00001033static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001034readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001035{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 PyOS_sighandler_t old_inthandler;
1037 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 *signal = 0;
1040
1041 old_inthandler = PyOS_setsig(SIGINT, onintr);
1042 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001043#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001044 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1045 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001046#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 PyOS_setsig(SIGINT, old_inthandler);
1048 *signal = 1;
1049 return NULL;
1050 }
1051 rl_event_hook = PyOS_InputHook;
1052 p = readline(prompt);
1053 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001054
1055 return p;
1056}
1057#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1058
1059
1060static char *
1061call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1062{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 size_t n;
1064 char *p, *q;
1065 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001066
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001067#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1069 if (!saved_locale)
1070 Py_FatalError("not enough memory to save locale");
Nadeem Vawda63752572013-02-02 20:05:11 +01001071 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001072#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001073
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1075 rl_instream = sys_stdin;
1076 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001077#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001079#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 /* we got an interrupt signal */
1085 if (signal) {
1086 RESTORE_LOCALE(saved_locale)
1087 return NULL;
1088 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 /* We got an EOF, return a empty string. */
1091 if (p == NULL) {
1092 p = PyMem_Malloc(1);
1093 if (p != NULL)
1094 *p = '\0';
1095 RESTORE_LOCALE(saved_locale)
1096 return p;
1097 }
1098
1099 /* we have a valid line */
1100 n = strlen(p);
1101 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001102 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001103 int length = _py_get_history_length();
1104 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001105#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 if (using_libedit_emulation) {
1107 /*
1108 * Libedit's emulation uses 0-based indexes,
1109 * the real readline uses 1-based indexes.
1110 */
Brett Cannon2525dc82010-08-22 20:36:25 +00001111 line = (const char *)history_get(length - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001113#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001114 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 else
1116 line = "";
1117 if (strcmp(p, line))
1118 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 }
1120 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1121 release the original. */
1122 q = p;
1123 p = PyMem_Malloc(n+2);
1124 if (p != NULL) {
1125 strncpy(p, q, n);
1126 p[n] = '\n';
1127 p[n+1] = '\0';
1128 }
1129 free(q);
1130 RESTORE_LOCALE(saved_locale)
1131 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001132}
1133
Guido van Rossum290900a1997-09-26 21:51:21 +00001134
1135/* Initialize the module */
1136
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001137PyDoc_STRVAR(doc_module,
1138"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001139
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001140#ifdef __APPLE__
1141PyDoc_STRVAR(doc_module_le,
1142"Importing this module enables command line editing using libedit readline.");
1143#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001144
1145static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 PyModuleDef_HEAD_INIT,
1147 "readline",
1148 doc_module,
1149 -1,
1150 readline_methods,
1151 NULL,
1152 NULL,
1153 NULL,
1154 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001155};
1156
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001157
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001158PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001159PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001162
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001163#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1165 using_libedit_emulation = 1;
1166 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001167
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 if (using_libedit_emulation)
1169 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001170
1171#endif /* __APPLE__ */
1172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 if (m == NULL)
1176 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001177
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001178
1179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 PyOS_ReadlineFunctionPointer = call_readline;
1181 setup_readline();
1182 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001183}