blob: 69304154b1a5d07936c64a8be3bd98a3f214140b [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
Benjamin Petersond1e22ba2014-11-26 14:35:12 -0600240#ifdef HAVE_RL_APPEND_HISTORY
Benjamin Peterson33f8f152014-11-26 13:58:16 -0600241/* Exported function to save part of a readline history file */
242
243static PyObject *
244append_history_file(PyObject *self, PyObject *args)
245{
246 int nelements;
247 PyObject *filename_obj = Py_None, *filename_bytes;
248 char *filename;
249 int err;
250 if (!PyArg_ParseTuple(args, "i|O:append_history_file", &nelements, &filename_obj))
251 return NULL;
252 if (filename_obj != Py_None) {
253 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
254 return NULL;
255 filename = PyBytes_AsString(filename_bytes);
256 } else {
257 filename_bytes = NULL;
258 filename = NULL;
259 }
260 errno = err = append_history(nelements, filename);
261 if (!err && _history_length >= 0)
262 history_truncate_file(filename, _history_length);
263 Py_XDECREF(filename_bytes);
264 errno = err;
265 if (errno)
266 return PyErr_SetFromErrno(PyExc_IOError);
267 Py_RETURN_NONE;
268}
269
270PyDoc_STRVAR(doc_append_history_file,
271"append_history_file(nelements[, filename]) -> None\n\
272Append the last nelements of the history list to file.\n\
273The default filename is ~/.history.");
Benjamin Petersond1e22ba2014-11-26 14:35:12 -0600274#endif
Benjamin Peterson33f8f152014-11-26 13:58:16 -0600275
276
Guido van Rossum74f31432003-01-07 20:01:29 +0000277/* Set history length */
278
279static PyObject*
280set_history_length(PyObject *self, PyObject *args)
281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000282 int length = _history_length;
283 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
284 return NULL;
285 _history_length = length;
286 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000287}
288
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000289PyDoc_STRVAR(set_history_length_doc,
290"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000291set the maximal number of items which will be written to\n\
292the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000293history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000294
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000295
Guido van Rossum74f31432003-01-07 20:01:29 +0000296/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000297
298static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000299get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000302}
303
Guido van Rossum74f31432003-01-07 20:01:29 +0000304PyDoc_STRVAR(get_history_length_doc,
305"get_history_length() -> int\n\
306return the maximum number of items that will be written to\n\
307the history file.");
308
309
Martin v. Löwis0daad592001-09-30 21:09:59 +0000310/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000311
Martin v. Löwis0daad592001-09-30 21:09:59 +0000312static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000313set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000315 PyObject *function = Py_None;
316 char buf[80];
317 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
318 if (!PyArg_ParseTuple(args, buf, &function))
319 return NULL;
320 if (function == Py_None) {
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200321 Py_CLEAR(*hook_var);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 }
323 else if (PyCallable_Check(function)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 Py_INCREF(function);
Serhiy Storchaka576f1322016-01-05 21:27:54 +0200325 Py_SETREF(*hook_var, function);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 }
327 else {
Victor Stinner6ced7c42011-03-21 18:15:42 +0100328 PyErr_Format(PyExc_TypeError,
329 "set_%.50s(func): argument not callable",
330 funcname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 return NULL;
332 }
333 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000334}
335
Guido van Rossum74f31432003-01-07 20:01:29 +0000336
Martin v. Löwis0daad592001-09-30 21:09:59 +0000337/* Exported functions to specify hook functions in Python */
338
Martin v. Löwis0daad592001-09-30 21:09:59 +0000339
340#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200341
Martin v. Löwis0daad592001-09-30 21:09:59 +0000342#endif
343
344static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000345set_completion_display_matches_hook(PyObject *self, PyObject *args)
346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 PyObject *result = set_hook("completion_display_matches_hook",
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200348 &readlinestate_global->completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000349#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 /* We cannot set this hook globally, since it replaces the
351 default completion display. */
352 rl_completion_display_matches_hook =
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200353 readlinestate_global->completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000354#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000355 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000356#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000358#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000359#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000360 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000361
Thomas Wouters89d996e2007-09-08 17:39:28 +0000362}
363
364PyDoc_STRVAR(doc_set_completion_display_matches_hook,
365"set_completion_display_matches_hook([function]) -> None\n\
366Set or remove the completion display function.\n\
367The function is called as\n\
368 function(substitution, [matches], longest_match_length)\n\
369once each time matches need to be displayed.");
370
371static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000372set_startup_hook(PyObject *self, PyObject *args)
373{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200374 return set_hook("startup_hook", &readlinestate_global->startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000375}
376
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000377PyDoc_STRVAR(doc_set_startup_hook,
378"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000379Set or remove the startup_hook function.\n\
380The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000381before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000382
Guido van Rossum74f31432003-01-07 20:01:29 +0000383
Martin v. Löwis0daad592001-09-30 21:09:59 +0000384#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000385
386/* Set pre-input hook */
387
Martin v. Löwis0daad592001-09-30 21:09:59 +0000388static PyObject *
389set_pre_input_hook(PyObject *self, PyObject *args)
390{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200391 return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000392}
393
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000394PyDoc_STRVAR(doc_set_pre_input_hook,
395"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000396Set or remove the pre_input_hook function.\n\
397The function is called with no arguments after the first prompt\n\
398has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000399characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000400
Martin v. Löwis0daad592001-09-30 21:09:59 +0000401#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000402
Guido van Rossum74f31432003-01-07 20:01:29 +0000403
Guido van Rossum290900a1997-09-26 21:51:21 +0000404/* Exported function to specify a word completer in Python */
405
Guido van Rossum290900a1997-09-26 21:51:21 +0000406
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200407
408
409
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000410
Guido van Rossum74f31432003-01-07 20:01:29 +0000411
Thomas Wouters89d996e2007-09-08 17:39:28 +0000412/* Get the completion type for the scope of the tab-completion */
413static PyObject *
414get_completion_type(PyObject *self, PyObject *noarg)
415{
Christian Heimes217cfd12007-12-02 14:31:20 +0000416 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000417}
418
419PyDoc_STRVAR(doc_get_completion_type,
420"get_completion_type() -> int\n\
421Get the type of completion being attempted.");
422
423
Guido van Rossum74f31432003-01-07 20:01:29 +0000424/* Get the beginning index for the scope of the tab-completion */
425
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000426static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000427get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000428{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200429 Py_INCREF(readlinestate_global->begidx);
430 return readlinestate_global->begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000431}
432
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000433PyDoc_STRVAR(doc_get_begidx,
434"get_begidx() -> int\n\
435get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000436
Guido van Rossum74f31432003-01-07 20:01:29 +0000437
438/* Get the ending index for the scope of the tab-completion */
439
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000440static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000441get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000442{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200443 Py_INCREF(readlinestate_global->endidx);
444 return readlinestate_global->endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000445}
446
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000447PyDoc_STRVAR(doc_get_endidx,
448"get_endidx() -> int\n\
449get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000450
451
Guido van Rossum74f31432003-01-07 20:01:29 +0000452/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000453
454static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000455set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000456{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000458
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200459 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 return NULL;
461 }
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200462 /* Keep a reference to the allocated memory in the module state in case
463 some other module modifies rl_completer_word_break_characters
464 (see issue #17289). */
Serhiy Storchaka11384392015-09-27 22:34:59 +0300465 break_chars = strdup(break_chars);
466 if (break_chars) {
467 free(completer_word_break_characters);
468 completer_word_break_characters = break_chars;
469 rl_completer_word_break_characters = break_chars;
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200470 Py_RETURN_NONE;
471 }
472 else
473 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000474}
475
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000476PyDoc_STRVAR(doc_set_completer_delims,
477"set_completer_delims(string) -> None\n\
478set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000479
Mark Dickinson29b238e2010-08-03 16:08:16 +0000480/* _py_free_history_entry: Utility function to free a history entry. */
481
482#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
483
484/* Readline version >= 5.0 introduced a timestamp field into the history entry
485 structure; this needs to be freed to avoid a memory leak. This version of
486 readline also introduced the handy 'free_history_entry' function, which
487 takes care of the timestamp. */
488
489static void
490_py_free_history_entry(HIST_ENTRY *entry)
491{
492 histdata_t data = free_history_entry(entry);
493 free(data);
494}
495
496#else
497
498/* No free_history_entry function; free everything manually. */
499
500static void
501_py_free_history_entry(HIST_ENTRY *entry)
502{
503 if (entry->line)
504 free((void *)entry->line);
505 if (entry->data)
506 free(entry->data);
507 free(entry);
508}
509
510#endif
511
Skip Montanaroe5069012004-08-15 14:32:06 +0000512static PyObject *
513py_remove_history(PyObject *self, PyObject *args)
514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 int entry_number;
516 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
519 return NULL;
520 if (entry_number < 0) {
521 PyErr_SetString(PyExc_ValueError,
522 "History index cannot be negative");
523 return NULL;
524 }
525 entry = remove_history(entry_number);
526 if (!entry) {
527 PyErr_Format(PyExc_ValueError,
528 "No history item at position %d",
529 entry_number);
530 return NULL;
531 }
532 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000533 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000535}
536
537PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000538"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000539remove history item given by its position");
540
541static PyObject *
542py_replace_history(PyObject *self, PyObject *args)
543{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 int entry_number;
545 char *line;
546 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
549 &line)) {
550 return NULL;
551 }
552 if (entry_number < 0) {
553 PyErr_SetString(PyExc_ValueError,
554 "History index cannot be negative");
555 return NULL;
556 }
557 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
558 if (!old_entry) {
559 PyErr_Format(PyExc_ValueError,
560 "No history item at position %d",
561 entry_number);
562 return NULL;
563 }
564 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000565 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000567}
568
569PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000570"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000571replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000572
573/* Add a line to the history buffer */
574
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000575static PyObject *
576py_add_history(PyObject *self, PyObject *args)
577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
581 return NULL;
582 }
583 add_history(line);
584 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000585}
586
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000587PyDoc_STRVAR(doc_add_history,
588"add_history(string) -> None\n\
589add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000590
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000591
Guido van Rossum74f31432003-01-07 20:01:29 +0000592/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000593
594static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000595get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000598}
Guido van Rossum74f31432003-01-07 20:01:29 +0000599
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000600PyDoc_STRVAR(doc_get_completer_delims,
601"get_completer_delims() -> string\n\
602get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000603
Guido van Rossum74f31432003-01-07 20:01:29 +0000604
605/* Set the completer function */
606
Guido van Rossum290900a1997-09-26 21:51:21 +0000607static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000608set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000609{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200610 return set_hook("completer", &readlinestate_global->completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000611}
612
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000613PyDoc_STRVAR(doc_set_completer,
614"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000615Set or remove the completer function.\n\
616The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000617for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000618It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000619
Guido van Rossum74f31432003-01-07 20:01:29 +0000620
Michael W. Hudson796df152003-01-30 10:12:51 +0000621static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000622get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000623{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200624 if (readlinestate_global->completer == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 Py_RETURN_NONE;
626 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200627 Py_INCREF(readlinestate_global->completer);
628 return readlinestate_global->completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000629}
630
631PyDoc_STRVAR(doc_get_completer,
632"get_completer() -> function\n\
633\n\
634Returns current completer function.");
635
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000636/* Private function to get current length of history. XXX It may be
637 * possible to replace this with a direct use of history_length instead,
638 * but it's not clear whether BSD's libedit keeps history_length up to date.
639 * See issue #8065.*/
640
641static int
642_py_get_history_length(void)
643{
644 HISTORY_STATE *hist_st = history_get_history_state();
645 int length = hist_st->length;
646 /* the history docs don't say so, but the address of hist_st changes each
647 time history_get_history_state is called which makes me think it's
648 freshly malloc'd memory... on the other hand, the address of the last
649 line stays the same as long as history isn't extended, so it appears to
650 be malloc'd but managed by the history package... */
651 free(hist_st);
652 return length;
653}
654
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000655/* Exported function to get any element of history */
656
657static PyObject *
658get_history_item(PyObject *self, PyObject *args)
659{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000660 int idx = 0;
661 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 if (!PyArg_ParseTuple(args, "i:index", &idx))
664 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000665#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -0700667 /* Older versions of libedit's readline emulation
668 * use 0-based indexes, while readline and newer
669 * versions of libedit use 1-based indexes.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000671 int length = _py_get_history_length();
Ned Deilyf70f4a62013-09-06 15:16:19 -0700672
673 idx = idx - 1 + libedit_history_start;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000675 /*
676 * Apple's readline emulation crashes when
677 * the index is out of range, therefore
678 * test for that and fail gracefully.
679 */
Ned Deilyf70f4a62013-09-06 15:16:19 -0700680 if (idx < (0 + libedit_history_start)
681 || idx >= (length + libedit_history_start)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000682 Py_RETURN_NONE;
683 }
684 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000685#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 if ((hist_ent = history_get(idx)))
687 return PyUnicode_FromString(hist_ent->line);
688 else {
689 Py_RETURN_NONE;
690 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000691}
692
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000693PyDoc_STRVAR(doc_get_history_item,
694"get_history_item() -> string\n\
695return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000696
Guido van Rossum74f31432003-01-07 20:01:29 +0000697
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000698/* Exported function to get current length of history */
699
700static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000701get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000702{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000703 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000704}
705
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000706PyDoc_STRVAR(doc_get_current_history_length,
707"get_current_history_length() -> integer\n\
708return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000709
Guido van Rossum74f31432003-01-07 20:01:29 +0000710
Guido van Rossum79378ff1997-10-07 14:53:21 +0000711/* Exported function to read the current line buffer */
712
713static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000714get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000715{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000717}
718
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000719PyDoc_STRVAR(doc_get_line_buffer,
720"get_line_buffer() -> string\n\
721return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000722
Guido van Rossum74f31432003-01-07 20:01:29 +0000723
Martin v. Löwise7a97962003-09-20 16:08:33 +0000724#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
725
726/* Exported function to clear the current history */
727
728static PyObject *
729py_clear_history(PyObject *self, PyObject *noarg)
730{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 clear_history();
732 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000733}
734
735PyDoc_STRVAR(doc_clear_history,
736"clear_history() -> None\n\
737Clear the current readline history.");
738#endif
739
740
Guido van Rossum79378ff1997-10-07 14:53:21 +0000741/* Exported function to insert text into the line buffer */
742
743static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000744insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 char *s;
747 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
748 return NULL;
749 rl_insert_text(s);
750 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000751}
752
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000753PyDoc_STRVAR(doc_insert_text,
754"insert_text(string) -> None\n\
755Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000756
Guido van Rossum74f31432003-01-07 20:01:29 +0000757
758/* Redisplay the line buffer */
759
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000760static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000761redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 rl_redisplay();
764 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000765}
766
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000767PyDoc_STRVAR(doc_redisplay,
768"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000769Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000770contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000771
Guido van Rossum74f31432003-01-07 20:01:29 +0000772
Guido van Rossum290900a1997-09-26 21:51:21 +0000773/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000774
775static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000776{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
778 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
779 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
780 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
781 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
782 {"read_history_file", read_history_file,
783 METH_VARARGS, doc_read_history_file},
784 {"write_history_file", write_history_file,
785 METH_VARARGS, doc_write_history_file},
Benjamin Petersond1e22ba2014-11-26 14:35:12 -0600786#ifdef HAVE_RL_APPEND_HISTORY
Benjamin Peterson33f8f152014-11-26 13:58:16 -0600787 {"append_history_file", append_history_file,
788 METH_VARARGS, doc_append_history_file},
Ned Deily8007cbc2014-11-26 13:02:33 -0800789#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 {"get_history_item", get_history_item,
791 METH_VARARGS, doc_get_history_item},
792 {"get_current_history_length", (PyCFunction)get_current_history_length,
793 METH_NOARGS, doc_get_current_history_length},
794 {"set_history_length", set_history_length,
795 METH_VARARGS, set_history_length_doc},
796 {"get_history_length", get_history_length,
797 METH_NOARGS, get_history_length_doc},
798 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
799 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
800 {"get_completion_type", get_completion_type,
801 METH_NOARGS, doc_get_completion_type},
802 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
803 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 {"set_completer_delims", set_completer_delims,
806 METH_VARARGS, doc_set_completer_delims},
807 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
808 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
809 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
810 {"get_completer_delims", get_completer_delims,
811 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
814 METH_VARARGS, doc_set_completion_display_matches_hook},
815 {"set_startup_hook", set_startup_hook,
816 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000817#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 {"set_pre_input_hook", set_pre_input_hook,
819 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000820#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000821#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000823#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000825};
826
Guido van Rossum05ac4492003-01-07 20:04:12 +0000827
Martin v. Löwis0daad592001-09-30 21:09:59 +0000828/* C function to call the Python hooks. */
829
830static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000831on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000832{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 int result = 0;
834 if (func != NULL) {
835 PyObject *r;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 r = PyObject_CallFunction(func, NULL);
837 if (r == NULL)
838 goto error;
839 if (r == Py_None)
840 result = 0;
841 else {
Serhiy Storchaka56f6e762015-09-06 21:25:30 +0300842 result = _PyLong_AsInt(r);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 if (result == -1 && PyErr_Occurred())
844 goto error;
845 }
846 Py_DECREF(r);
847 goto done;
848 error:
849 PyErr_Clear();
850 Py_XDECREF(r);
851 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 return result;
853 }
854 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000855}
856
857static int
Ned Deily7b9ddea2014-02-05 16:53:10 -0800858#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000859on_startup_hook(void)
Ned Deily7b9ddea2014-02-05 16:53:10 -0800860#else
861on_startup_hook()
862#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000863{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200864 int r;
865#ifdef WITH_THREAD
866 PyGILState_STATE gilstate = PyGILState_Ensure();
867#endif
868 r = on_hook(readlinestate_global->startup_hook);
869#ifdef WITH_THREAD
870 PyGILState_Release(gilstate);
871#endif
872 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000873}
874
875#ifdef HAVE_RL_PRE_INPUT_HOOK
876static int
Ned Deily7b9ddea2014-02-05 16:53:10 -0800877#if defined(_RL_FUNCTION_TYPEDEF)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000878on_pre_input_hook(void)
Ned Deily7b9ddea2014-02-05 16:53:10 -0800879#else
880on_pre_input_hook()
881#endif
Martin v. Löwis0daad592001-09-30 21:09:59 +0000882{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200883 int r;
884#ifdef WITH_THREAD
885 PyGILState_STATE gilstate = PyGILState_Ensure();
886#endif
887 r = on_hook(readlinestate_global->pre_input_hook);
888#ifdef WITH_THREAD
889 PyGILState_Release(gilstate);
890#endif
891 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000892}
893#endif
894
Guido van Rossum05ac4492003-01-07 20:04:12 +0000895
Thomas Wouters89d996e2007-09-08 17:39:28 +0000896/* C function to call the Python completion_display_matches */
897
Georg Brandl646fdd62010-10-18 07:27:55 +0000898#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Thomas Wouters89d996e2007-09-08 17:39:28 +0000899static void
900on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000903 int i;
904 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000905#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000907#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 m = PyList_New(num_matches);
909 if (m == NULL)
910 goto error;
911 for (i = 0; i < num_matches; i++) {
912 s = PyUnicode_FromString(matches[i+1]);
913 if (s == NULL)
914 goto error;
915 if (PyList_SetItem(m, i, s) == -1)
916 goto error;
917 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200918 r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 if (r == NULL ||
924 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
925 goto error;
926 }
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200927 Py_CLEAR(r);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928
929 if (0) {
930 error:
931 PyErr_Clear();
932 Py_XDECREF(m);
933 Py_XDECREF(r);
934 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000935#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000937#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000938}
939
Senthil Kumaran95c07002010-11-04 03:51:05 +0000940#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000941
Guido van Rossum290900a1997-09-26 21:51:21 +0000942/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000943
Guido van Rossum290900a1997-09-26 21:51:21 +0000944static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000945on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000946{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 char *result = NULL;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200948 if (readlinestate_global->completer != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000950#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000952#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 rl_attempted_completion_over = 1;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200954 r = PyObject_CallFunction(readlinestate_global->completer, "si", text, state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 if (r == NULL)
956 goto error;
957 if (r == Py_None) {
958 result = NULL;
959 }
960 else {
961 char *s = _PyUnicode_AsString(r);
962 if (s == NULL)
963 goto error;
964 result = strdup(s);
965 }
966 Py_DECREF(r);
967 goto done;
968 error:
969 PyErr_Clear();
970 Py_XDECREF(r);
971 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000972#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000974#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 return result;
976 }
977 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000978}
979
Guido van Rossum290900a1997-09-26 21:51:21 +0000980
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000981/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000982 * before calling the normal completer */
983
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000984static char **
Benjamin Petersonf0b463a2014-01-24 11:44:16 -0500985flex_complete(const char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000986{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200987 char **result;
988#ifdef WITH_THREAD
989 PyGILState_STATE gilstate = PyGILState_Ensure();
990#endif
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000991#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000993#endif
994#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000996#endif
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200997 Py_XDECREF(readlinestate_global->begidx);
998 Py_XDECREF(readlinestate_global->endidx);
999 readlinestate_global->begidx = PyLong_FromLong((long) start);
1000 readlinestate_global->endidx = PyLong_FromLong((long) end);
1001 result = completion_matches(text, *on_completion);
1002#ifdef WITH_THREAD
1003 PyGILState_Release(gilstate);
1004#endif
1005 return result;
Guido van Rossumb960e7a1999-11-18 17:51:02 +00001006}
1007
Guido van Rossum05ac4492003-01-07 20:04:12 +00001008
Guido van Rossum290900a1997-09-26 21:51:21 +00001009/* Helper to initialize GNU readline properly. */
1010
1011static void
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001012setup_readline(readlinestate *mod_state)
Guido van Rossum290900a1997-09-26 21:51:21 +00001013{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +00001014#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1016 if (!saved_locale)
1017 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +00001018#endif
1019
R. David Murray52d1b4e2010-12-18 03:48:32 +00001020#ifdef __APPLE__
Victor Stinner6ced7c42011-03-21 18:15:42 +01001021 /* the libedit readline emulation resets key bindings etc
R. David Murray52d1b4e2010-12-18 03:48:32 +00001022 * when calling rl_initialize. So call it upfront
1023 */
1024 if (using_libedit_emulation)
1025 rl_initialize();
Ned Deilyf70f4a62013-09-06 15:16:19 -07001026
1027 /* Detect if libedit's readline emulation uses 0-based
1028 * indexing or 1-based indexing.
1029 */
1030 add_history("1");
1031 if (history_get(1) == NULL) {
1032 libedit_history_start = 0;
1033 } else {
1034 libedit_history_start = 1;
1035 }
1036 clear_history();
R. David Murray52d1b4e2010-12-18 03:48:32 +00001037#endif /* __APPLE__ */
1038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +00001040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 rl_readline_name = "python";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 /* Force rebind of TAB to insert-tab */
1043 rl_bind_key('\t', rl_insert);
1044 /* Bind both ESC-TAB and ESC-ESC to the completion function */
1045 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
1046 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
1047 /* Set our hook functions */
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001048 rl_startup_hook = on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001049#ifdef HAVE_RL_PRE_INPUT_HOOK
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001050 rl_pre_input_hook = on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001051#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 /* Set our completion function */
Benjamin Petersonf0b463a2014-01-24 11:44:16 -05001053 rl_attempted_completion_function = flex_complete;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001054 /* Set Python word break characters */
Antoine Pitroua7f7deb2013-05-06 21:51:03 +02001055 completer_word_break_characters =
1056 rl_completer_word_break_characters =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
1058 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +00001059
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001060 mod_state->begidx = PyLong_FromLong(0L);
1061 mod_state->endidx = PyLong_FromLong(0L);
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001062
Victor Stinner92639cc2014-07-24 22:11:38 +02001063#ifndef __APPLE__
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001064 if (!isatty(STDOUT_FILENO)) {
1065 /* Issue #19884: stdout is no a terminal. Disable meta modifier
1066 keys to not write the ANSI sequence "\033[1034h" into stdout. On
1067 terminals supporting 8 bit characters like TERM=xterm-256color
1068 (which is now the default Fedora since Fedora 18), the meta key is
1069 used to enable support of 8 bit characters (ANSI sequence
Victor Stinner92639cc2014-07-24 22:11:38 +02001070 "\033[1034h").
1071
1072 With libedit, this call makes readline() crash. */
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001073 rl_variable_bind ("enable-meta-key", "off");
1074 }
Victor Stinner92639cc2014-07-24 22:11:38 +02001075#endif
Victor Stinnera3c80ce2014-07-24 12:23:56 +02001076
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 /* Initialize (allows .inputrc to override)
1078 *
1079 * XXX: A bug in the readline-2.2 library causes a memory leak
1080 * inside this function. Nothing we can do about it.
1081 */
R. David Murray52d1b4e2010-12-18 03:48:32 +00001082#ifdef __APPLE__
1083 if (using_libedit_emulation)
Victor Stinner6ced7c42011-03-21 18:15:42 +01001084 rl_read_init_file(NULL);
R. David Murray52d1b4e2010-12-18 03:48:32 +00001085 else
1086#endif /* __APPLE__ */
1087 rl_initialize();
Victor Stinner6ced7c42011-03-21 18:15:42 +01001088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +00001090}
1091
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001092/* Wrapper around GNU readline that handles signals differently. */
1093
1094
1095#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
1096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001098static void
1099rlhandler(char *text)
1100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 completed_input_string = text;
1102 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001103}
1104
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001105static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001106readline_until_enter_or_signal(const char *prompt, int *signal)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001107{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 char * not_done_reading = "";
1109 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001112#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001114#endif
1115
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 rl_callback_handler_install (prompt, rlhandler);
1117 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 while (completed_input_string == not_done_reading) {
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001122 int has_input = 0, err = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 while (!has_input)
1125 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +00001126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 /* [Bug #1552726] Only limit the pause if an input hook has been
1128 defined. */
1129 struct timeval *timeoutp = NULL;
1130 if (PyOS_InputHook)
1131 timeoutp = &timeout;
1132 FD_SET(fileno(rl_instream), &selectset);
1133 /* select resets selectset if no input was available */
1134 has_input = select(fileno(rl_instream) + 1, &selectset,
1135 NULL, NULL, timeoutp);
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001136 err = errno;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 if(PyOS_InputHook) PyOS_InputHook();
1138 }
1139
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001140 if (has_input > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 rl_callback_read_char();
1142 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001143 else if (err == EINTR) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001145#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001147#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001149#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001151#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 if (s < 0) {
1153 rl_free_line_state();
1154 rl_cleanup_after_signal();
1155 rl_callback_handler_remove();
1156 *signal = 1;
1157 completed_input_string = NULL;
1158 }
1159 }
1160 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001161
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001163}
1164
1165
1166#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001167
1168/* Interrupt handler */
1169
1170static jmp_buf jbuf;
1171
Guido van Rossum0969d361997-08-05 21:27:50 +00001172/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001173static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001174onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001175{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001177}
1178
Guido van Rossum290900a1997-09-26 21:51:21 +00001179
Guido van Rossum0969d361997-08-05 21:27:50 +00001180static char *
Christian Heimesa3da7c52013-12-04 09:31:47 +01001181readline_until_enter_or_signal(const char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001182{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 PyOS_sighandler_t old_inthandler;
1184 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001185
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001186 *signal = 0;
1187
1188 old_inthandler = PyOS_setsig(SIGINT, onintr);
1189 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001190#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1192 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001193#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 PyOS_setsig(SIGINT, old_inthandler);
1195 *signal = 1;
1196 return NULL;
1197 }
1198 rl_event_hook = PyOS_InputHook;
1199 p = readline(prompt);
1200 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001201
1202 return p;
1203}
1204#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1205
1206
1207static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001208call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001209{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 size_t n;
1211 char *p, *q;
1212 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001213
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001214#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1216 if (!saved_locale)
1217 Py_FatalError("not enough memory to save locale");
Nadeem Vawda63752572013-02-02 20:05:11 +01001218 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001219#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001220
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1222 rl_instream = sys_stdin;
1223 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001224#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001226#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 /* we got an interrupt signal */
1232 if (signal) {
1233 RESTORE_LOCALE(saved_locale)
1234 return NULL;
1235 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001236
Martin Panter7462b6492015-11-02 03:37:02 +00001237 /* We got an EOF, return an empty string. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 if (p == NULL) {
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001239 p = PyMem_RawMalloc(1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001240 if (p != NULL)
1241 *p = '\0';
1242 RESTORE_LOCALE(saved_locale)
1243 return p;
1244 }
1245
1246 /* we have a valid line */
1247 n = strlen(p);
1248 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001249 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001250 int length = _py_get_history_length();
1251 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001252#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -07001254 /* handle older 0-based or newer 1-based indexing */
1255 line = (const char *)history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001257#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001258 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 else
1260 line = "";
1261 if (strcmp(p, line))
1262 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 }
1264 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1265 release the original. */
1266 q = p;
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001267 p = PyMem_RawMalloc(n+2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001268 if (p != NULL) {
1269 strncpy(p, q, n);
1270 p[n] = '\n';
1271 p[n+1] = '\0';
1272 }
1273 free(q);
1274 RESTORE_LOCALE(saved_locale)
1275 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001276}
1277
Guido van Rossum290900a1997-09-26 21:51:21 +00001278
1279/* Initialize the module */
1280
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001281PyDoc_STRVAR(doc_module,
1282"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001283
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001284#ifdef __APPLE__
1285PyDoc_STRVAR(doc_module_le,
1286"Importing this module enables command line editing using libedit readline.");
1287#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001288
1289static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 PyModuleDef_HEAD_INIT,
1291 "readline",
1292 doc_module,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001293 sizeof(readlinestate),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 readline_methods,
1295 NULL,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001296 readline_traverse,
1297 readline_clear,
1298 readline_free
Martin v. Löwis1a214512008-06-11 05:26:20 +00001299};
1300
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001301
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001302PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001303PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 PyObject *m;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001306 readlinestate *mod_state;
Guido van Rossum290900a1997-09-26 21:51:21 +00001307
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001308#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001309 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1310 using_libedit_emulation = 1;
1311 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 if (using_libedit_emulation)
1314 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001315
1316#endif /* __APPLE__ */
1317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001318 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 if (m == NULL)
1321 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001322
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001323 mod_state = (readlinestate *) PyModule_GetState(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 PyOS_ReadlineFunctionPointer = call_readline;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001325 setup_readline(mod_state);
Antoine Pitrou7e8b8672014-11-04 14:52:10 +01001326
1327 PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
1328 PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
1329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001331}