blob: f349d3b109df29640fd93285ebba9e29a1401cf1 [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"
Antoine Pitrou5c30a752013-07-31 21:52:53 +02009#include <stddef.h>
Guido van Rossum0969d361997-08-05 21:27:50 +000010#include <setjmp.h>
11#include <signal.h>
Guido van Rossum290900a1997-09-26 21:51:21 +000012#include <errno.h>
Michael W. Hudson8da2b012004-10-07 13:46:33 +000013#include <sys/time.h>
Guido van Rossum0969d361997-08-05 21:27:50 +000014
Skip Montanaro7befb992004-02-10 16:50:21 +000015#if defined(HAVE_SETLOCALE)
Guido van Rossum60c8a3a2002-10-09 21:27:33 +000016/* GNU readline() mistakenly sets the LC_CTYPE locale.
17 * This is evil. Only the user or the app's main() should do this!
18 * We must save and restore the locale around the rl_initialize() call.
19 */
20#define SAVE_LOCALE
21#include <locale.h>
22#endif
23
Thomas Wouters0e3f5912006-08-11 14:57:12 +000024#ifdef SAVE_LOCALE
25# define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
26#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000027# define RESTORE_LOCALE(sl)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000028#endif
29
Guido van Rossum290900a1997-09-26 21:51:21 +000030/* GNU readline definitions */
Guido van Rossumb0e51b22001-04-13 18:14:27 +000031#undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
Guido van Rossumbcc20741998-08-04 22:53:56 +000032#include <readline/readline.h>
33#include <readline/history.h>
Guido van Rossum730806d1998-04-10 22:27:42 +000034
Guido van Rossum353ae582001-07-10 16:45:32 +000035#ifdef HAVE_RL_COMPLETION_MATCHES
Guido van Rossum74f31432003-01-07 20:01:29 +000036#define completion_matches(x, y) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000037 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
Guido van Rossumd8faa362007-04-27 19:54:29 +000038#else
Martin v. Löwisb37509b2008-11-04 20:45:29 +000039#if defined(_RL_FUNCTION_TYPEDEF)
Guido van Rossumd8faa362007-04-27 19:54:29 +000040extern char **completion_matches(char *, rl_compentry_func_t *);
Martin v. Löwisb37509b2008-11-04 20:45:29 +000041#else
Ronald Oussoren25696bb2010-02-11 13:15:00 +000042
43#if !defined(__APPLE__)
Martin v. Löwisb37509b2008-11-04 20:45:29 +000044extern char **completion_matches(char *, CPFunction *);
45#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000046#endif
Ronald Oussoren25696bb2010-02-11 13:15:00 +000047#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000048
Ronald Oussoren2efd9242009-09-20 14:53:22 +000049#ifdef __APPLE__
50/*
51 * It is possible to link the readline module to the readline
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000052 * emulation library of editline/libedit.
53 *
Ronald Oussoren2efd9242009-09-20 14:53:22 +000054 * On OSX this emulation library is not 100% API compatible
55 * with the "real" readline and cannot be detected at compile-time,
56 * hence we use a runtime check to detect if we're using libedit
57 *
Ned Deily5d4121a2013-10-12 15:47:58 -070058 * Currently there is one known API incompatibility:
Ronald Oussoren2efd9242009-09-20 14:53:22 +000059 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
Ned Deily5d4121a2013-10-12 15:47:58 -070060 * index with older versions of libedit's emulation.
Ronald Oussoren2efd9242009-09-20 14:53:22 +000061 * - Note that replace_history and remove_history use a 0-based index
Ned Deily5d4121a2013-10-12 15:47:58 -070062 * with both implementations.
Ronald Oussoren2efd9242009-09-20 14:53:22 +000063 */
64static int using_libedit_emulation = 0;
65static const char libedit_version_tag[] = "EditLine wrapper";
Ned Deilyf70f4a62013-09-06 15:16:19 -070066
67static int libedit_history_start = 0;
Ronald Oussoren2efd9242009-09-20 14:53:22 +000068#endif /* __APPLE__ */
69
Georg Brandl646fdd62010-10-18 07:27:55 +000070#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Christian Heimes32fbe592007-11-12 15:01:33 +000071static void
72on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000073 int num_matches, int max_length);
Georg Brandl646fdd62010-10-18 07:27:55 +000074#endif
Guido van Rossum0969d361997-08-05 21:27:50 +000075
Antoine Pitroua7f7deb2013-05-06 21:51:03 +020076/* Memory allocated for rl_completer_word_break_characters
77 (see issue #17289 for the motivation). */
78static char *completer_word_break_characters;
79
Antoine Pitrou5c30a752013-07-31 21:52:53 +020080typedef struct {
81 PyObject *completion_display_matches_hook;
82 PyObject *startup_hook;
83 PyObject *pre_input_hook;
84 PyObject *completer;
85 PyObject *begidx;
86 PyObject *endidx;
87} readlinestate;
88
89
90#define readline_state(o) ((readlinestate *)PyModule_GetState(o))
91
92static int
93readline_clear(PyObject *m)
94{
95 readlinestate *state = readline_state(m);
96 Py_CLEAR(state->completion_display_matches_hook);
97 Py_CLEAR(state->startup_hook);
98 Py_CLEAR(state->pre_input_hook);
99 Py_CLEAR(state->completer);
100 Py_CLEAR(state->begidx);
101 Py_CLEAR(state->endidx);
102 return 0;
103}
104
105static int
106readline_traverse(PyObject *m, visitproc visit, void *arg)
107{
108 readlinestate *state = readline_state(m);
109 Py_VISIT(state->completion_display_matches_hook);
110 Py_VISIT(state->startup_hook);
111 Py_VISIT(state->pre_input_hook);
112 Py_VISIT(state->completer);
113 Py_VISIT(state->begidx);
114 Py_VISIT(state->endidx);
115 return 0;
116}
117
118static void
119readline_free(void *m)
120{
121 readline_clear((PyObject *)m);
122}
123
124static PyModuleDef readlinemodule;
125
126#define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule)))
127
128
Guido van Rossum290900a1997-09-26 21:51:21 +0000129/* Exported function to send one line to readline's init file parser */
130
131static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000132parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000134 char *s, *copy;
135 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
136 return NULL;
137 /* Make a copy -- rl_parse_and_bind() modifies its argument */
138 /* Bernard Herzog */
Victor Stinnerb6404912013-07-07 16:21:41 +0200139 copy = PyMem_Malloc(1 + strlen(s));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000140 if (copy == NULL)
141 return PyErr_NoMemory();
142 strcpy(copy, s);
143 rl_parse_and_bind(copy);
Victor Stinnerb6404912013-07-07 16:21:41 +0200144 PyMem_Free(copy); /* Free the copy */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000145 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000146}
147
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000148PyDoc_STRVAR(doc_parse_and_bind,
149"parse_and_bind(string) -> None\n\
150Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000151
152
153/* Exported function to parse a readline init file */
154
155static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000156read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000157{
Victor Stinner19e65a32010-06-11 22:27:14 +0000158 PyObject *filename_obj = Py_None, *filename_bytes;
159 if (!PyArg_ParseTuple(args, "|O:read_init_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000161 if (filename_obj != Py_None) {
162 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
163 return NULL;
164 errno = rl_read_init_file(PyBytes_AsString(filename_bytes));
165 Py_DECREF(filename_bytes);
166 } else
167 errno = rl_read_init_file(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 if (errno)
169 return PyErr_SetFromErrno(PyExc_IOError);
170 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000171}
172
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000173PyDoc_STRVAR(doc_read_init_file,
174"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000175Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000176The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000177
178
Skip Montanaro28067822000-07-06 18:55:12 +0000179/* Exported function to load a readline history file */
180
181static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000182read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000183{
Victor Stinner19e65a32010-06-11 22:27:14 +0000184 PyObject *filename_obj = Py_None, *filename_bytes;
185 if (!PyArg_ParseTuple(args, "|O:read_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000187 if (filename_obj != Py_None) {
188 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
189 return NULL;
190 errno = read_history(PyBytes_AsString(filename_bytes));
191 Py_DECREF(filename_bytes);
192 } else
193 errno = read_history(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000194 if (errno)
195 return PyErr_SetFromErrno(PyExc_IOError);
196 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000197}
198
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000199static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000200PyDoc_STRVAR(doc_read_history_file,
201"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000202Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000203The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000204
205
206/* Exported function to save a readline history file */
207
208static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000209write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000210{
Victor Stinner19e65a32010-06-11 22:27:14 +0000211 PyObject *filename_obj = Py_None, *filename_bytes;
212 char *filename;
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100213 int err;
Victor Stinner19e65a32010-06-11 22:27:14 +0000214 if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000216 if (filename_obj != Py_None) {
217 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
218 return NULL;
219 filename = PyBytes_AsString(filename_bytes);
220 } else {
221 filename_bytes = NULL;
222 filename = NULL;
223 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100224 errno = err = write_history(filename);
225 if (!err && _history_length >= 0)
Victor Stinner19e65a32010-06-11 22:27:14 +0000226 history_truncate_file(filename, _history_length);
227 Py_XDECREF(filename_bytes);
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100228 errno = err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 if (errno)
230 return PyErr_SetFromErrno(PyExc_IOError);
231 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000232}
233
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000234PyDoc_STRVAR(doc_write_history_file,
235"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000236Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000237The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000238
239
Guido van Rossum74f31432003-01-07 20:01:29 +0000240/* Set history length */
241
242static PyObject*
243set_history_length(PyObject *self, PyObject *args)
244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 int length = _history_length;
246 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
247 return NULL;
248 _history_length = length;
249 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000250}
251
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000252PyDoc_STRVAR(set_history_length_doc,
253"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000254set the maximal number of items which will be written to\n\
255the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000256history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000257
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000258
Guido van Rossum74f31432003-01-07 20:01:29 +0000259/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000260
261static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000262get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000263{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000265}
266
Guido van Rossum74f31432003-01-07 20:01:29 +0000267PyDoc_STRVAR(get_history_length_doc,
268"get_history_length() -> int\n\
269return the maximum number of items that will be written to\n\
270the history file.");
271
272
Martin v. Löwis0daad592001-09-30 21:09:59 +0000273/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000274
Martin v. Löwis0daad592001-09-30 21:09:59 +0000275static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000276set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 PyObject *function = Py_None;
279 char buf[80];
280 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
281 if (!PyArg_ParseTuple(args, buf, &function))
282 return NULL;
283 if (function == Py_None) {
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200284 Py_CLEAR(*hook_var);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000285 }
286 else if (PyCallable_Check(function)) {
287 PyObject *tmp = *hook_var;
288 Py_INCREF(function);
289 *hook_var = function;
290 Py_XDECREF(tmp);
291 }
292 else {
Victor Stinner6ced7c42011-03-21 18:15:42 +0100293 PyErr_Format(PyExc_TypeError,
294 "set_%.50s(func): argument not callable",
295 funcname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000296 return NULL;
297 }
298 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000299}
300
Guido van Rossum74f31432003-01-07 20:01:29 +0000301
Martin v. Löwis0daad592001-09-30 21:09:59 +0000302/* Exported functions to specify hook functions in Python */
303
Martin v. Löwis0daad592001-09-30 21:09:59 +0000304
305#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200306
Martin v. Löwis0daad592001-09-30 21:09:59 +0000307#endif
308
309static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000310set_completion_display_matches_hook(PyObject *self, PyObject *args)
311{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 PyObject *result = set_hook("completion_display_matches_hook",
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200313 &readlinestate_global->completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000314#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 /* We cannot set this hook globally, since it replaces the
316 default completion display. */
317 rl_completion_display_matches_hook =
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200318 readlinestate_global->completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000319#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000320 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000321#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000323#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000324#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000326
Thomas Wouters89d996e2007-09-08 17:39:28 +0000327}
328
329PyDoc_STRVAR(doc_set_completion_display_matches_hook,
330"set_completion_display_matches_hook([function]) -> None\n\
331Set or remove the completion display function.\n\
332The function is called as\n\
333 function(substitution, [matches], longest_match_length)\n\
334once each time matches need to be displayed.");
335
336static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000337set_startup_hook(PyObject *self, PyObject *args)
338{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200339 return set_hook("startup_hook", &readlinestate_global->startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000340}
341
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000342PyDoc_STRVAR(doc_set_startup_hook,
343"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000344Set or remove the startup_hook function.\n\
345The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000346before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000347
Guido van Rossum74f31432003-01-07 20:01:29 +0000348
Martin v. Löwis0daad592001-09-30 21:09:59 +0000349#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000350
351/* Set pre-input hook */
352
Martin v. Löwis0daad592001-09-30 21:09:59 +0000353static PyObject *
354set_pre_input_hook(PyObject *self, PyObject *args)
355{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200356 return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000357}
358
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000359PyDoc_STRVAR(doc_set_pre_input_hook,
360"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000361Set or remove the pre_input_hook function.\n\
362The function is called with no arguments after the first prompt\n\
363has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000364characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000365
Martin v. Löwis0daad592001-09-30 21:09:59 +0000366#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000367
Guido van Rossum74f31432003-01-07 20:01:29 +0000368
Guido van Rossum290900a1997-09-26 21:51:21 +0000369/* Exported function to specify a word completer in Python */
370
Guido van Rossum290900a1997-09-26 21:51:21 +0000371
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200372
373
374
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000375
Guido van Rossum74f31432003-01-07 20:01:29 +0000376
Thomas Wouters89d996e2007-09-08 17:39:28 +0000377/* Get the completion type for the scope of the tab-completion */
378static PyObject *
379get_completion_type(PyObject *self, PyObject *noarg)
380{
Christian Heimes217cfd12007-12-02 14:31:20 +0000381 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000382}
383
384PyDoc_STRVAR(doc_get_completion_type,
385"get_completion_type() -> int\n\
386Get the type of completion being attempted.");
387
388
Guido van Rossum74f31432003-01-07 20:01:29 +0000389/* Get the beginning index for the scope of the tab-completion */
390
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000391static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000392get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000393{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200394 Py_INCREF(readlinestate_global->begidx);
395 return readlinestate_global->begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000396}
397
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000398PyDoc_STRVAR(doc_get_begidx,
399"get_begidx() -> int\n\
400get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000401
Guido van Rossum74f31432003-01-07 20:01:29 +0000402
403/* Get the ending index for the scope of the tab-completion */
404
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000405static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000406get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000407{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200408 Py_INCREF(readlinestate_global->endidx);
409 return readlinestate_global->endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000410}
411
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000412PyDoc_STRVAR(doc_get_endidx,
413"get_endidx() -> int\n\
414get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000415
416
Guido van Rossum74f31432003-01-07 20:01:29 +0000417/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000418
419static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000420set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000423
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200424 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 return NULL;
426 }
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200427 /* Keep a reference to the allocated memory in the module state in case
428 some other module modifies rl_completer_word_break_characters
429 (see issue #17289). */
430 free(completer_word_break_characters);
431 completer_word_break_characters = strdup(break_chars);
432 if (completer_word_break_characters) {
433 rl_completer_word_break_characters = completer_word_break_characters;
434 Py_RETURN_NONE;
435 }
436 else
437 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000438}
439
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000440PyDoc_STRVAR(doc_set_completer_delims,
441"set_completer_delims(string) -> None\n\
442set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000443
Mark Dickinson29b238e2010-08-03 16:08:16 +0000444/* _py_free_history_entry: Utility function to free a history entry. */
445
446#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
447
448/* Readline version >= 5.0 introduced a timestamp field into the history entry
449 structure; this needs to be freed to avoid a memory leak. This version of
450 readline also introduced the handy 'free_history_entry' function, which
451 takes care of the timestamp. */
452
453static void
454_py_free_history_entry(HIST_ENTRY *entry)
455{
456 histdata_t data = free_history_entry(entry);
457 free(data);
458}
459
460#else
461
462/* No free_history_entry function; free everything manually. */
463
464static void
465_py_free_history_entry(HIST_ENTRY *entry)
466{
467 if (entry->line)
468 free((void *)entry->line);
469 if (entry->data)
470 free(entry->data);
471 free(entry);
472}
473
474#endif
475
Skip Montanaroe5069012004-08-15 14:32:06 +0000476static PyObject *
477py_remove_history(PyObject *self, PyObject *args)
478{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000479 int entry_number;
480 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
483 return NULL;
484 if (entry_number < 0) {
485 PyErr_SetString(PyExc_ValueError,
486 "History index cannot be negative");
487 return NULL;
488 }
489 entry = remove_history(entry_number);
490 if (!entry) {
491 PyErr_Format(PyExc_ValueError,
492 "No history item at position %d",
493 entry_number);
494 return NULL;
495 }
496 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000497 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000499}
500
501PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000502"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000503remove history item given by its position");
504
505static PyObject *
506py_replace_history(PyObject *self, PyObject *args)
507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 int entry_number;
509 char *line;
510 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
513 &line)) {
514 return NULL;
515 }
516 if (entry_number < 0) {
517 PyErr_SetString(PyExc_ValueError,
518 "History index cannot be negative");
519 return NULL;
520 }
521 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
522 if (!old_entry) {
523 PyErr_Format(PyExc_ValueError,
524 "No history item at position %d",
525 entry_number);
526 return NULL;
527 }
528 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000529 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000531}
532
533PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000534"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000535replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000536
537/* Add a line to the history buffer */
538
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000539static PyObject *
540py_add_history(PyObject *self, PyObject *args)
541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
545 return NULL;
546 }
547 add_history(line);
548 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000549}
550
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000551PyDoc_STRVAR(doc_add_history,
552"add_history(string) -> None\n\
553add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000554
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000555
Guido van Rossum74f31432003-01-07 20:01:29 +0000556/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000557
558static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000559get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000562}
Guido van Rossum74f31432003-01-07 20:01:29 +0000563
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000564PyDoc_STRVAR(doc_get_completer_delims,
565"get_completer_delims() -> string\n\
566get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000567
Guido van Rossum74f31432003-01-07 20:01:29 +0000568
569/* Set the completer function */
570
Guido van Rossum290900a1997-09-26 21:51:21 +0000571static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000572set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000573{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200574 return set_hook("completer", &readlinestate_global->completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000575}
576
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000577PyDoc_STRVAR(doc_set_completer,
578"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000579Set or remove the completer function.\n\
580The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000581for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000582It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000583
Guido van Rossum74f31432003-01-07 20:01:29 +0000584
Michael W. Hudson796df152003-01-30 10:12:51 +0000585static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000586get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000587{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200588 if (readlinestate_global->completer == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 Py_RETURN_NONE;
590 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200591 Py_INCREF(readlinestate_global->completer);
592 return readlinestate_global->completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000593}
594
595PyDoc_STRVAR(doc_get_completer,
596"get_completer() -> function\n\
597\n\
598Returns current completer function.");
599
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000600/* Private function to get current length of history. XXX It may be
601 * possible to replace this with a direct use of history_length instead,
602 * but it's not clear whether BSD's libedit keeps history_length up to date.
603 * See issue #8065.*/
604
605static int
606_py_get_history_length(void)
607{
608 HISTORY_STATE *hist_st = history_get_history_state();
609 int length = hist_st->length;
610 /* the history docs don't say so, but the address of hist_st changes each
611 time history_get_history_state is called which makes me think it's
612 freshly malloc'd memory... on the other hand, the address of the last
613 line stays the same as long as history isn't extended, so it appears to
614 be malloc'd but managed by the history package... */
615 free(hist_st);
616 return length;
617}
618
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000619/* Exported function to get any element of history */
620
621static PyObject *
622get_history_item(PyObject *self, PyObject *args)
623{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 int idx = 0;
625 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 if (!PyArg_ParseTuple(args, "i:index", &idx))
628 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000629#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -0700631 /* Older versions of libedit's readline emulation
632 * use 0-based indexes, while readline and newer
633 * versions of libedit use 1-based indexes.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000635 int length = _py_get_history_length();
Ned Deilyf70f4a62013-09-06 15:16:19 -0700636
637 idx = idx - 1 + libedit_history_start;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 /*
640 * Apple's readline emulation crashes when
641 * the index is out of range, therefore
642 * test for that and fail gracefully.
643 */
Ned Deilyf70f4a62013-09-06 15:16:19 -0700644 if (idx < (0 + libedit_history_start)
645 || idx >= (length + libedit_history_start)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 Py_RETURN_NONE;
647 }
648 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000649#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 if ((hist_ent = history_get(idx)))
651 return PyUnicode_FromString(hist_ent->line);
652 else {
653 Py_RETURN_NONE;
654 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000655}
656
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000657PyDoc_STRVAR(doc_get_history_item,
658"get_history_item() -> string\n\
659return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000660
Guido van Rossum74f31432003-01-07 20:01:29 +0000661
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000662/* Exported function to get current length of history */
663
664static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000665get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000666{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000667 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000668}
669
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000670PyDoc_STRVAR(doc_get_current_history_length,
671"get_current_history_length() -> integer\n\
672return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000673
Guido van Rossum74f31432003-01-07 20:01:29 +0000674
Guido van Rossum79378ff1997-10-07 14:53:21 +0000675/* Exported function to read the current line buffer */
676
677static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000678get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000681}
682
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000683PyDoc_STRVAR(doc_get_line_buffer,
684"get_line_buffer() -> string\n\
685return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000686
Guido van Rossum74f31432003-01-07 20:01:29 +0000687
Martin v. Löwise7a97962003-09-20 16:08:33 +0000688#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
689
690/* Exported function to clear the current history */
691
692static PyObject *
693py_clear_history(PyObject *self, PyObject *noarg)
694{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 clear_history();
696 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000697}
698
699PyDoc_STRVAR(doc_clear_history,
700"clear_history() -> None\n\
701Clear the current readline history.");
702#endif
703
704
Guido van Rossum79378ff1997-10-07 14:53:21 +0000705/* Exported function to insert text into the line buffer */
706
707static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000708insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000709{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 char *s;
711 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
712 return NULL;
713 rl_insert_text(s);
714 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000715}
716
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000717PyDoc_STRVAR(doc_insert_text,
718"insert_text(string) -> None\n\
719Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000720
Guido van Rossum74f31432003-01-07 20:01:29 +0000721
722/* Redisplay the line buffer */
723
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000724static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000725redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 rl_redisplay();
728 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000729}
730
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000731PyDoc_STRVAR(doc_redisplay,
732"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000733Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000734contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000735
Guido van Rossum74f31432003-01-07 20:01:29 +0000736
Guido van Rossum290900a1997-09-26 21:51:21 +0000737/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000738
739static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000740{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
742 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
743 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
744 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
745 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
746 {"read_history_file", read_history_file,
747 METH_VARARGS, doc_read_history_file},
748 {"write_history_file", write_history_file,
749 METH_VARARGS, doc_write_history_file},
750 {"get_history_item", get_history_item,
751 METH_VARARGS, doc_get_history_item},
752 {"get_current_history_length", (PyCFunction)get_current_history_length,
753 METH_NOARGS, doc_get_current_history_length},
754 {"set_history_length", set_history_length,
755 METH_VARARGS, set_history_length_doc},
756 {"get_history_length", get_history_length,
757 METH_NOARGS, get_history_length_doc},
758 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
759 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
760 {"get_completion_type", get_completion_type,
761 METH_NOARGS, doc_get_completion_type},
762 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
763 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 {"set_completer_delims", set_completer_delims,
766 METH_VARARGS, doc_set_completer_delims},
767 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
768 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
769 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
770 {"get_completer_delims", get_completer_delims,
771 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
774 METH_VARARGS, doc_set_completion_display_matches_hook},
775 {"set_startup_hook", set_startup_hook,
776 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000777#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 {"set_pre_input_hook", set_pre_input_hook,
779 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000780#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000781#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000783#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000785};
786
Guido van Rossum05ac4492003-01-07 20:04:12 +0000787
Martin v. Löwis0daad592001-09-30 21:09:59 +0000788/* C function to call the Python hooks. */
789
790static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000791on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 int result = 0;
794 if (func != NULL) {
795 PyObject *r;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 r = PyObject_CallFunction(func, NULL);
797 if (r == NULL)
798 goto error;
799 if (r == Py_None)
800 result = 0;
801 else {
802 result = PyLong_AsLong(r);
803 if (result == -1 && PyErr_Occurred())
804 goto error;
805 }
806 Py_DECREF(r);
807 goto done;
808 error:
809 PyErr_Clear();
810 Py_XDECREF(r);
811 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 return result;
813 }
814 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000815}
816
817static int
Ned Deily7b9ddea2014-02-05 16:53:10 -0800818#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000819on_startup_hook(void)
Ned Deily7b9ddea2014-02-05 16:53:10 -0800820#else
821on_startup_hook()
822#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000823{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200824 int r;
825#ifdef WITH_THREAD
826 PyGILState_STATE gilstate = PyGILState_Ensure();
827#endif
828 r = on_hook(readlinestate_global->startup_hook);
829#ifdef WITH_THREAD
830 PyGILState_Release(gilstate);
831#endif
832 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000833}
834
835#ifdef HAVE_RL_PRE_INPUT_HOOK
836static int
Ned Deily7b9ddea2014-02-05 16:53:10 -0800837#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000838on_pre_input_hook(void)
Ned Deily7b9ddea2014-02-05 16:53:10 -0800839#else
840on_pre_input_hook()
841#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000842{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200843 int r;
844#ifdef WITH_THREAD
845 PyGILState_STATE gilstate = PyGILState_Ensure();
846#endif
847 r = on_hook(readlinestate_global->pre_input_hook);
848#ifdef WITH_THREAD
849 PyGILState_Release(gilstate);
850#endif
851 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000852}
853#endif
854
Guido van Rossum05ac4492003-01-07 20:04:12 +0000855
Thomas Wouters89d996e2007-09-08 17:39:28 +0000856/* C function to call the Python completion_display_matches */
857
Georg Brandl646fdd62010-10-18 07:27:55 +0000858#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Thomas Wouters89d996e2007-09-08 17:39:28 +0000859static void
860on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000862{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 int i;
864 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000865#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000867#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 m = PyList_New(num_matches);
869 if (m == NULL)
870 goto error;
871 for (i = 0; i < num_matches; i++) {
872 s = PyUnicode_FromString(matches[i+1]);
873 if (s == NULL)
874 goto error;
875 if (PyList_SetItem(m, i, s) == -1)
876 goto error;
877 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200878 r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 if (r == NULL ||
884 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
885 goto error;
886 }
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200887 Py_CLEAR(r);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888
889 if (0) {
890 error:
891 PyErr_Clear();
892 Py_XDECREF(m);
893 Py_XDECREF(r);
894 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000895#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000897#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000898}
899
Senthil Kumaran95c07002010-11-04 03:51:05 +0000900#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000901
Guido van Rossum290900a1997-09-26 21:51:21 +0000902/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000903
Guido van Rossum290900a1997-09-26 21:51:21 +0000904static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000905on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000906{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 char *result = NULL;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200908 if (readlinestate_global->completer != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000909 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000910#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000912#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 rl_attempted_completion_over = 1;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200914 r = PyObject_CallFunction(readlinestate_global->completer, "si", text, state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 if (r == NULL)
916 goto error;
917 if (r == Py_None) {
918 result = NULL;
919 }
920 else {
921 char *s = _PyUnicode_AsString(r);
922 if (s == NULL)
923 goto error;
924 result = strdup(s);
925 }
926 Py_DECREF(r);
927 goto done;
928 error:
929 PyErr_Clear();
930 Py_XDECREF(r);
931 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000932#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000934#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 return result;
936 }
937 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000938}
939
Guido van Rossum290900a1997-09-26 21:51:21 +0000940
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000941/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000942 * before calling the normal completer */
943
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000944static char **
Benjamin Petersonf0b463a2014-01-24 11:44:16 -0500945flex_complete(const char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000946{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200947 char **result;
948#ifdef WITH_THREAD
949 PyGILState_STATE gilstate = PyGILState_Ensure();
950#endif
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000951#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000953#endif
954#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000956#endif
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200957 Py_XDECREF(readlinestate_global->begidx);
958 Py_XDECREF(readlinestate_global->endidx);
959 readlinestate_global->begidx = PyLong_FromLong((long) start);
960 readlinestate_global->endidx = PyLong_FromLong((long) end);
961 result = completion_matches(text, *on_completion);
962#ifdef WITH_THREAD
963 PyGILState_Release(gilstate);
964#endif
965 return result;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000966}
967
Guido van Rossum05ac4492003-01-07 20:04:12 +0000968
Guido van Rossum290900a1997-09-26 21:51:21 +0000969/* Helper to initialize GNU readline properly. */
970
971static void
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200972setup_readline(readlinestate *mod_state)
Guido van Rossum290900a1997-09-26 21:51:21 +0000973{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000974#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
976 if (!saved_locale)
977 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000978#endif
979
R. David Murray52d1b4e2010-12-18 03:48:32 +0000980#ifdef __APPLE__
Victor Stinner6ced7c42011-03-21 18:15:42 +0100981 /* the libedit readline emulation resets key bindings etc
R. David Murray52d1b4e2010-12-18 03:48:32 +0000982 * when calling rl_initialize. So call it upfront
983 */
984 if (using_libedit_emulation)
985 rl_initialize();
Ned Deilyf70f4a62013-09-06 15:16:19 -0700986
987 /* Detect if libedit's readline emulation uses 0-based
988 * indexing or 1-based indexing.
989 */
990 add_history("1");
991 if (history_get(1) == NULL) {
992 libedit_history_start = 0;
993 } else {
994 libedit_history_start = 1;
995 }
996 clear_history();
R. David Murray52d1b4e2010-12-18 03:48:32 +0000997#endif /* __APPLE__ */
998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +00001000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 rl_readline_name = "python";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 /* Force rebind of TAB to insert-tab */
1003 rl_bind_key('\t', rl_insert);
1004 /* Bind both ESC-TAB and ESC-ESC to the completion function */
1005 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
1006 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
1007 /* Set our hook functions */
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001008 rl_startup_hook = on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001009#ifdef HAVE_RL_PRE_INPUT_HOOK
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001010 rl_pre_input_hook = on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001011#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 /* Set our completion function */
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001013 rl_attempted_completion_function = flex_complete;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 /* Set Python word break characters */
Antoine Pitroua7f7deb2013-05-06 21:51:03 +02001015 completer_word_break_characters =
1016 rl_completer_word_break_characters =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
1018 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +00001019
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001020 mod_state->begidx = PyLong_FromLong(0L);
1021 mod_state->endidx = PyLong_FromLong(0L);
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001022
Victor Stinner92639cc2014-07-24 22:11:38 +02001023#ifndef __APPLE__
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001024 if (!isatty(STDOUT_FILENO)) {
1025 /* Issue #19884: stdout is no a terminal. Disable meta modifier
1026 keys to not write the ANSI sequence "\033[1034h" into stdout. On
1027 terminals supporting 8 bit characters like TERM=xterm-256color
1028 (which is now the default Fedora since Fedora 18), the meta key is
1029 used to enable support of 8 bit characters (ANSI sequence
Victor Stinner92639cc2014-07-24 22:11:38 +02001030 "\033[1034h").
1031
1032 With libedit, this call makes readline() crash. */
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001033 rl_variable_bind ("enable-meta-key", "off");
1034 }
Victor Stinner92639cc2014-07-24 22:11:38 +02001035#endif
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001036
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037 /* Initialize (allows .inputrc to override)
1038 *
1039 * XXX: A bug in the readline-2.2 library causes a memory leak
1040 * inside this function. Nothing we can do about it.
1041 */
R. David Murray52d1b4e2010-12-18 03:48:32 +00001042#ifdef __APPLE__
1043 if (using_libedit_emulation)
Victor Stinner6ced7c42011-03-21 18:15:42 +01001044 rl_read_init_file(NULL);
R. David Murray52d1b4e2010-12-18 03:48:32 +00001045 else
1046#endif /* __APPLE__ */
1047 rl_initialize();
Victor Stinner6ced7c42011-03-21 18:15:42 +01001048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +00001050}
1051
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001052/* Wrapper around GNU readline that handles signals differently. */
1053
1054
1055#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
1056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001058static void
1059rlhandler(char *text)
1060{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 completed_input_string = text;
1062 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001063}
1064
1065extern PyThreadState* _PyOS_ReadlineTState;
1066
1067static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001068readline_until_enter_or_signal(const char *prompt, int *signal)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001069{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 char * not_done_reading = "";
1071 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001074#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001076#endif
1077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 rl_callback_handler_install (prompt, rlhandler);
1079 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 while (completed_input_string == not_done_reading) {
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001084 int has_input = 0, err = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +00001085
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 while (!has_input)
1087 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +00001088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 /* [Bug #1552726] Only limit the pause if an input hook has been
1090 defined. */
1091 struct timeval *timeoutp = NULL;
1092 if (PyOS_InputHook)
1093 timeoutp = &timeout;
1094 FD_SET(fileno(rl_instream), &selectset);
1095 /* select resets selectset if no input was available */
1096 has_input = select(fileno(rl_instream) + 1, &selectset,
1097 NULL, NULL, timeoutp);
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001098 err = errno;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 if(PyOS_InputHook) PyOS_InputHook();
1100 }
1101
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001102 if (has_input > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 rl_callback_read_char();
1104 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001105 else if (err == EINTR) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001107#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001109#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001111#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001113#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 if (s < 0) {
1115 rl_free_line_state();
1116 rl_cleanup_after_signal();
1117 rl_callback_handler_remove();
1118 *signal = 1;
1119 completed_input_string = NULL;
1120 }
1121 }
1122 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001125}
1126
1127
1128#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001129
1130/* Interrupt handler */
1131
1132static jmp_buf jbuf;
1133
Guido van Rossum0969d361997-08-05 21:27:50 +00001134/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001135static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001136onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001137{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001139}
1140
Guido van Rossum290900a1997-09-26 21:51:21 +00001141
Guido van Rossum0969d361997-08-05 21:27:50 +00001142static char *
Christian Heimesa3da7c52013-12-04 09:31:47 +01001143readline_until_enter_or_signal(const char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001144{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 PyOS_sighandler_t old_inthandler;
1146 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001147
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 *signal = 0;
1149
1150 old_inthandler = PyOS_setsig(SIGINT, onintr);
1151 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001152#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001153 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1154 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001155#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 PyOS_setsig(SIGINT, old_inthandler);
1157 *signal = 1;
1158 return NULL;
1159 }
1160 rl_event_hook = PyOS_InputHook;
1161 p = readline(prompt);
1162 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001163
1164 return p;
1165}
1166#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1167
1168
1169static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001170call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 size_t n;
1173 char *p, *q;
1174 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001175
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001176#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1178 if (!saved_locale)
1179 Py_FatalError("not enough memory to save locale");
Nadeem Vawda63752572013-02-02 20:05:11 +01001180 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001181#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1184 rl_instream = sys_stdin;
1185 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001186#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001187 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001188#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001193 /* we got an interrupt signal */
1194 if (signal) {
1195 RESTORE_LOCALE(saved_locale)
1196 return NULL;
1197 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001198
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 /* We got an EOF, return a empty string. */
1200 if (p == NULL) {
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001201 p = PyMem_RawMalloc(1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 if (p != NULL)
1203 *p = '\0';
1204 RESTORE_LOCALE(saved_locale)
1205 return p;
1206 }
1207
1208 /* we have a valid line */
1209 n = strlen(p);
1210 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001211 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001212 int length = _py_get_history_length();
1213 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001214#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -07001216 /* handle older 0-based or newer 1-based indexing */
1217 line = (const char *)history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001219#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001220 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 else
1222 line = "";
1223 if (strcmp(p, line))
1224 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 }
1226 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1227 release the original. */
1228 q = p;
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001229 p = PyMem_RawMalloc(n+2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 if (p != NULL) {
1231 strncpy(p, q, n);
1232 p[n] = '\n';
1233 p[n+1] = '\0';
1234 }
1235 free(q);
1236 RESTORE_LOCALE(saved_locale)
1237 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001238}
1239
Guido van Rossum290900a1997-09-26 21:51:21 +00001240
1241/* Initialize the module */
1242
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001243PyDoc_STRVAR(doc_module,
1244"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001245
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001246#ifdef __APPLE__
1247PyDoc_STRVAR(doc_module_le,
1248"Importing this module enables command line editing using libedit readline.");
1249#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001250
1251static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252 PyModuleDef_HEAD_INIT,
1253 "readline",
1254 doc_module,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001255 sizeof(readlinestate),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 readline_methods,
1257 NULL,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001258 readline_traverse,
1259 readline_clear,
1260 readline_free
Martin v. Löwis1a214512008-06-11 05:26:20 +00001261};
1262
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001263
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001264PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001265PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001266{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 PyObject *m;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001268 readlinestate *mod_state;
Guido van Rossum290900a1997-09-26 21:51:21 +00001269
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001270#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1272 using_libedit_emulation = 1;
1273 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 if (using_libedit_emulation)
1276 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001277
1278#endif /* __APPLE__ */
1279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001282 if (m == NULL)
1283 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001284
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001285 mod_state = (readlinestate *) PyModule_GetState(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 PyOS_ReadlineFunctionPointer = call_readline;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001287 setup_readline(mod_state);
Antoine Pitrou7e8b8672014-11-04 14:52:10 +01001288
1289 PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
1290 PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
1291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001293}