blob: f255a8747f9f87cff0dca15ed66dba497a3cde0b [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) {
284 Py_XDECREF(*hook_var);
285 *hook_var = NULL;
286 }
287 else if (PyCallable_Check(function)) {
288 PyObject *tmp = *hook_var;
289 Py_INCREF(function);
290 *hook_var = function;
291 Py_XDECREF(tmp);
292 }
293 else {
Victor Stinner6ced7c42011-03-21 18:15:42 +0100294 PyErr_Format(PyExc_TypeError,
295 "set_%.50s(func): argument not callable",
296 funcname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000297 return NULL;
298 }
299 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000300}
301
Guido van Rossum74f31432003-01-07 20:01:29 +0000302
Martin v. Löwis0daad592001-09-30 21:09:59 +0000303/* Exported functions to specify hook functions in Python */
304
Martin v. Löwis0daad592001-09-30 21:09:59 +0000305
306#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200307
Martin v. Löwis0daad592001-09-30 21:09:59 +0000308#endif
309
310static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000311set_completion_display_matches_hook(PyObject *self, PyObject *args)
312{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000313 PyObject *result = set_hook("completion_display_matches_hook",
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200314 &readlinestate_global->completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000315#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000316 /* We cannot set this hook globally, since it replaces the
317 default completion display. */
318 rl_completion_display_matches_hook =
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200319 readlinestate_global->completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000320#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000322#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000324#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000325#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000327
Thomas Wouters89d996e2007-09-08 17:39:28 +0000328}
329
330PyDoc_STRVAR(doc_set_completion_display_matches_hook,
331"set_completion_display_matches_hook([function]) -> None\n\
332Set or remove the completion display function.\n\
333The function is called as\n\
334 function(substitution, [matches], longest_match_length)\n\
335once each time matches need to be displayed.");
336
337static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000338set_startup_hook(PyObject *self, PyObject *args)
339{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200340 return set_hook("startup_hook", &readlinestate_global->startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000341}
342
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000343PyDoc_STRVAR(doc_set_startup_hook,
344"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000345Set or remove the startup_hook function.\n\
346The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000347before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000348
Guido van Rossum74f31432003-01-07 20:01:29 +0000349
Martin v. Löwis0daad592001-09-30 21:09:59 +0000350#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000351
352/* Set pre-input hook */
353
Martin v. Löwis0daad592001-09-30 21:09:59 +0000354static PyObject *
355set_pre_input_hook(PyObject *self, PyObject *args)
356{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200357 return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000358}
359
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000360PyDoc_STRVAR(doc_set_pre_input_hook,
361"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000362Set or remove the pre_input_hook function.\n\
363The function is called with no arguments after the first prompt\n\
364has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000365characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000366
Martin v. Löwis0daad592001-09-30 21:09:59 +0000367#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000368
Guido van Rossum74f31432003-01-07 20:01:29 +0000369
Guido van Rossum290900a1997-09-26 21:51:21 +0000370/* Exported function to specify a word completer in Python */
371
Guido van Rossum290900a1997-09-26 21:51:21 +0000372
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200373
374
375
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000376
Guido van Rossum74f31432003-01-07 20:01:29 +0000377
Thomas Wouters89d996e2007-09-08 17:39:28 +0000378/* Get the completion type for the scope of the tab-completion */
379static PyObject *
380get_completion_type(PyObject *self, PyObject *noarg)
381{
Christian Heimes217cfd12007-12-02 14:31:20 +0000382 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000383}
384
385PyDoc_STRVAR(doc_get_completion_type,
386"get_completion_type() -> int\n\
387Get the type of completion being attempted.");
388
389
Guido van Rossum74f31432003-01-07 20:01:29 +0000390/* Get the beginning index for the scope of the tab-completion */
391
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000392static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000393get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000394{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200395 Py_INCREF(readlinestate_global->begidx);
396 return readlinestate_global->begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000397}
398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000399PyDoc_STRVAR(doc_get_begidx,
400"get_begidx() -> int\n\
401get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000402
Guido van Rossum74f31432003-01-07 20:01:29 +0000403
404/* Get the ending index for the scope of the tab-completion */
405
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000406static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000407get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000408{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200409 Py_INCREF(readlinestate_global->endidx);
410 return readlinestate_global->endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000411}
412
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000413PyDoc_STRVAR(doc_get_endidx,
414"get_endidx() -> int\n\
415get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000416
417
Guido van Rossum74f31432003-01-07 20:01:29 +0000418/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000419
420static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000421set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000422{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000423 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000424
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200425 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 return NULL;
427 }
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200428 /* Keep a reference to the allocated memory in the module state in case
429 some other module modifies rl_completer_word_break_characters
430 (see issue #17289). */
431 free(completer_word_break_characters);
432 completer_word_break_characters = strdup(break_chars);
433 if (completer_word_break_characters) {
434 rl_completer_word_break_characters = completer_word_break_characters;
435 Py_RETURN_NONE;
436 }
437 else
438 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000439}
440
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000441PyDoc_STRVAR(doc_set_completer_delims,
442"set_completer_delims(string) -> None\n\
443set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000444
Mark Dickinson29b238e2010-08-03 16:08:16 +0000445/* _py_free_history_entry: Utility function to free a history entry. */
446
447#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
448
449/* Readline version >= 5.0 introduced a timestamp field into the history entry
450 structure; this needs to be freed to avoid a memory leak. This version of
451 readline also introduced the handy 'free_history_entry' function, which
452 takes care of the timestamp. */
453
454static void
455_py_free_history_entry(HIST_ENTRY *entry)
456{
457 histdata_t data = free_history_entry(entry);
458 free(data);
459}
460
461#else
462
463/* No free_history_entry function; free everything manually. */
464
465static void
466_py_free_history_entry(HIST_ENTRY *entry)
467{
468 if (entry->line)
469 free((void *)entry->line);
470 if (entry->data)
471 free(entry->data);
472 free(entry);
473}
474
475#endif
476
Skip Montanaroe5069012004-08-15 14:32:06 +0000477static PyObject *
478py_remove_history(PyObject *self, PyObject *args)
479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 int entry_number;
481 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
484 return NULL;
485 if (entry_number < 0) {
486 PyErr_SetString(PyExc_ValueError,
487 "History index cannot be negative");
488 return NULL;
489 }
490 entry = remove_history(entry_number);
491 if (!entry) {
492 PyErr_Format(PyExc_ValueError,
493 "No history item at position %d",
494 entry_number);
495 return NULL;
496 }
497 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000498 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000500}
501
502PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000503"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000504remove history item given by its position");
505
506static PyObject *
507py_replace_history(PyObject *self, PyObject *args)
508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 int entry_number;
510 char *line;
511 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
514 &line)) {
515 return NULL;
516 }
517 if (entry_number < 0) {
518 PyErr_SetString(PyExc_ValueError,
519 "History index cannot be negative");
520 return NULL;
521 }
522 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
523 if (!old_entry) {
524 PyErr_Format(PyExc_ValueError,
525 "No history item at position %d",
526 entry_number);
527 return NULL;
528 }
529 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000530 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000532}
533
534PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000535"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000536replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000537
538/* Add a line to the history buffer */
539
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000540static PyObject *
541py_add_history(PyObject *self, PyObject *args)
542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
546 return NULL;
547 }
548 add_history(line);
549 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000550}
551
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000552PyDoc_STRVAR(doc_add_history,
553"add_history(string) -> None\n\
554add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000555
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000556
Guido van Rossum74f31432003-01-07 20:01:29 +0000557/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000558
559static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000560get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000561{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000563}
Guido van Rossum74f31432003-01-07 20:01:29 +0000564
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000565PyDoc_STRVAR(doc_get_completer_delims,
566"get_completer_delims() -> string\n\
567get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000568
Guido van Rossum74f31432003-01-07 20:01:29 +0000569
570/* Set the completer function */
571
Guido van Rossum290900a1997-09-26 21:51:21 +0000572static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000573set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000574{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200575 return set_hook("completer", &readlinestate_global->completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000576}
577
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000578PyDoc_STRVAR(doc_set_completer,
579"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000580Set or remove the completer function.\n\
581The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000582for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000583It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000584
Guido van Rossum74f31432003-01-07 20:01:29 +0000585
Michael W. Hudson796df152003-01-30 10:12:51 +0000586static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000587get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000588{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200589 if (readlinestate_global->completer == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000590 Py_RETURN_NONE;
591 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200592 Py_INCREF(readlinestate_global->completer);
593 return readlinestate_global->completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000594}
595
596PyDoc_STRVAR(doc_get_completer,
597"get_completer() -> function\n\
598\n\
599Returns current completer function.");
600
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000601/* Private function to get current length of history. XXX It may be
602 * possible to replace this with a direct use of history_length instead,
603 * but it's not clear whether BSD's libedit keeps history_length up to date.
604 * See issue #8065.*/
605
606static int
607_py_get_history_length(void)
608{
609 HISTORY_STATE *hist_st = history_get_history_state();
610 int length = hist_st->length;
611 /* the history docs don't say so, but the address of hist_st changes each
612 time history_get_history_state is called which makes me think it's
613 freshly malloc'd memory... on the other hand, the address of the last
614 line stays the same as long as history isn't extended, so it appears to
615 be malloc'd but managed by the history package... */
616 free(hist_st);
617 return length;
618}
619
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000620/* Exported function to get any element of history */
621
622static PyObject *
623get_history_item(PyObject *self, PyObject *args)
624{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 int idx = 0;
626 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 if (!PyArg_ParseTuple(args, "i:index", &idx))
629 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000630#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -0700632 /* Older versions of libedit's readline emulation
633 * use 0-based indexes, while readline and newer
634 * versions of libedit use 1-based indexes.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000636 int length = _py_get_history_length();
Ned Deilyf70f4a62013-09-06 15:16:19 -0700637
638 idx = idx - 1 + libedit_history_start;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 /*
641 * Apple's readline emulation crashes when
642 * the index is out of range, therefore
643 * test for that and fail gracefully.
644 */
Ned Deilyf70f4a62013-09-06 15:16:19 -0700645 if (idx < (0 + libedit_history_start)
646 || idx >= (length + libedit_history_start)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 Py_RETURN_NONE;
648 }
649 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000650#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 if ((hist_ent = history_get(idx)))
652 return PyUnicode_FromString(hist_ent->line);
653 else {
654 Py_RETURN_NONE;
655 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000656}
657
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000658PyDoc_STRVAR(doc_get_history_item,
659"get_history_item() -> string\n\
660return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000661
Guido van Rossum74f31432003-01-07 20:01:29 +0000662
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000663/* Exported function to get current length of history */
664
665static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000666get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000667{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000668 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000669}
670
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000671PyDoc_STRVAR(doc_get_current_history_length,
672"get_current_history_length() -> integer\n\
673return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000674
Guido van Rossum74f31432003-01-07 20:01:29 +0000675
Guido van Rossum79378ff1997-10-07 14:53:21 +0000676/* Exported function to read the current line buffer */
677
678static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000679get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000682}
683
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000684PyDoc_STRVAR(doc_get_line_buffer,
685"get_line_buffer() -> string\n\
686return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000687
Guido van Rossum74f31432003-01-07 20:01:29 +0000688
Martin v. Löwise7a97962003-09-20 16:08:33 +0000689#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
690
691/* Exported function to clear the current history */
692
693static PyObject *
694py_clear_history(PyObject *self, PyObject *noarg)
695{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 clear_history();
697 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000698}
699
700PyDoc_STRVAR(doc_clear_history,
701"clear_history() -> None\n\
702Clear the current readline history.");
703#endif
704
705
Guido van Rossum79378ff1997-10-07 14:53:21 +0000706/* Exported function to insert text into the line buffer */
707
708static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000709insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000710{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 char *s;
712 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
713 return NULL;
714 rl_insert_text(s);
715 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000716}
717
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000718PyDoc_STRVAR(doc_insert_text,
719"insert_text(string) -> None\n\
720Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000721
Guido van Rossum74f31432003-01-07 20:01:29 +0000722
723/* Redisplay the line buffer */
724
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000725static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000726redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000727{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 rl_redisplay();
729 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000730}
731
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000732PyDoc_STRVAR(doc_redisplay,
733"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000734Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000735contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000736
Guido van Rossum74f31432003-01-07 20:01:29 +0000737
Guido van Rossum290900a1997-09-26 21:51:21 +0000738/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000739
740static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000741{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
743 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
744 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
745 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
746 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
747 {"read_history_file", read_history_file,
748 METH_VARARGS, doc_read_history_file},
749 {"write_history_file", write_history_file,
750 METH_VARARGS, doc_write_history_file},
751 {"get_history_item", get_history_item,
752 METH_VARARGS, doc_get_history_item},
753 {"get_current_history_length", (PyCFunction)get_current_history_length,
754 METH_NOARGS, doc_get_current_history_length},
755 {"set_history_length", set_history_length,
756 METH_VARARGS, set_history_length_doc},
757 {"get_history_length", get_history_length,
758 METH_NOARGS, get_history_length_doc},
759 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
760 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
761 {"get_completion_type", get_completion_type,
762 METH_NOARGS, doc_get_completion_type},
763 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
764 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 {"set_completer_delims", set_completer_delims,
767 METH_VARARGS, doc_set_completer_delims},
768 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
769 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
770 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
771 {"get_completer_delims", get_completer_delims,
772 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
775 METH_VARARGS, doc_set_completion_display_matches_hook},
776 {"set_startup_hook", set_startup_hook,
777 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000778#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 {"set_pre_input_hook", set_pre_input_hook,
780 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000781#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000782#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000784#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000786};
787
Guido van Rossum05ac4492003-01-07 20:04:12 +0000788
Martin v. Löwis0daad592001-09-30 21:09:59 +0000789/* C function to call the Python hooks. */
790
791static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000792on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000793{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 int result = 0;
795 if (func != NULL) {
796 PyObject *r;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 r = PyObject_CallFunction(func, NULL);
798 if (r == NULL)
799 goto error;
800 if (r == Py_None)
801 result = 0;
802 else {
803 result = PyLong_AsLong(r);
804 if (result == -1 && PyErr_Occurred())
805 goto error;
806 }
807 Py_DECREF(r);
808 goto done;
809 error:
810 PyErr_Clear();
811 Py_XDECREF(r);
812 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 return result;
814 }
815 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000816}
817
818static int
819on_startup_hook(void)
820{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200821 int r;
822#ifdef WITH_THREAD
823 PyGILState_STATE gilstate = PyGILState_Ensure();
824#endif
825 r = on_hook(readlinestate_global->startup_hook);
826#ifdef WITH_THREAD
827 PyGILState_Release(gilstate);
828#endif
829 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000830}
831
832#ifdef HAVE_RL_PRE_INPUT_HOOK
833static int
834on_pre_input_hook(void)
835{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200836 int r;
837#ifdef WITH_THREAD
838 PyGILState_STATE gilstate = PyGILState_Ensure();
839#endif
840 r = on_hook(readlinestate_global->pre_input_hook);
841#ifdef WITH_THREAD
842 PyGILState_Release(gilstate);
843#endif
844 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000845}
846#endif
847
Guido van Rossum05ac4492003-01-07 20:04:12 +0000848
Thomas Wouters89d996e2007-09-08 17:39:28 +0000849/* C function to call the Python completion_display_matches */
850
Georg Brandl646fdd62010-10-18 07:27:55 +0000851#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Thomas Wouters89d996e2007-09-08 17:39:28 +0000852static void
853on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000855{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 int i;
857 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000858#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000860#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 m = PyList_New(num_matches);
862 if (m == NULL)
863 goto error;
864 for (i = 0; i < num_matches; i++) {
865 s = PyUnicode_FromString(matches[i+1]);
866 if (s == NULL)
867 goto error;
868 if (PyList_SetItem(m, i, s) == -1)
869 goto error;
870 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200871 r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000873
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 if (r == NULL ||
877 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
878 goto error;
879 }
880 Py_XDECREF(r); r=NULL;
881
882 if (0) {
883 error:
884 PyErr_Clear();
885 Py_XDECREF(m);
886 Py_XDECREF(r);
887 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000888#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000890#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000891}
892
Senthil Kumaran95c07002010-11-04 03:51:05 +0000893#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000894
Guido van Rossum290900a1997-09-26 21:51:21 +0000895/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000896
Guido van Rossum290900a1997-09-26 21:51:21 +0000897static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000898on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000899{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000900 char *result = NULL;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200901 if (readlinestate_global->completer != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000903#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000905#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 rl_attempted_completion_over = 1;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200907 r = PyObject_CallFunction(readlinestate_global->completer, "si", text, state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 if (r == NULL)
909 goto error;
910 if (r == Py_None) {
911 result = NULL;
912 }
913 else {
914 char *s = _PyUnicode_AsString(r);
915 if (s == NULL)
916 goto error;
917 result = strdup(s);
918 }
919 Py_DECREF(r);
920 goto done;
921 error:
922 PyErr_Clear();
923 Py_XDECREF(r);
924 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000925#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000927#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 return result;
929 }
930 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000931}
932
Guido van Rossum290900a1997-09-26 21:51:21 +0000933
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000934/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000935 * before calling the normal completer */
936
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000937static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000938flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000939{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200940 char **result;
941#ifdef WITH_THREAD
942 PyGILState_STATE gilstate = PyGILState_Ensure();
943#endif
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000944#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000946#endif
947#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000949#endif
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200950 Py_XDECREF(readlinestate_global->begidx);
951 Py_XDECREF(readlinestate_global->endidx);
952 readlinestate_global->begidx = PyLong_FromLong((long) start);
953 readlinestate_global->endidx = PyLong_FromLong((long) end);
954 result = completion_matches(text, *on_completion);
955#ifdef WITH_THREAD
956 PyGILState_Release(gilstate);
957#endif
958 return result;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000959}
960
Guido van Rossum05ac4492003-01-07 20:04:12 +0000961
Guido van Rossum290900a1997-09-26 21:51:21 +0000962/* Helper to initialize GNU readline properly. */
963
964static void
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200965setup_readline(readlinestate *mod_state)
Guido van Rossum290900a1997-09-26 21:51:21 +0000966{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000967#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
969 if (!saved_locale)
970 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000971#endif
972
R. David Murray52d1b4e2010-12-18 03:48:32 +0000973#ifdef __APPLE__
Victor Stinner6ced7c42011-03-21 18:15:42 +0100974 /* the libedit readline emulation resets key bindings etc
R. David Murray52d1b4e2010-12-18 03:48:32 +0000975 * when calling rl_initialize. So call it upfront
976 */
977 if (using_libedit_emulation)
978 rl_initialize();
Ned Deilyf70f4a62013-09-06 15:16:19 -0700979
980 /* Detect if libedit's readline emulation uses 0-based
981 * indexing or 1-based indexing.
982 */
983 add_history("1");
984 if (history_get(1) == NULL) {
985 libedit_history_start = 0;
986 } else {
987 libedit_history_start = 1;
988 }
989 clear_history();
R. David Murray52d1b4e2010-12-18 03:48:32 +0000990#endif /* __APPLE__ */
991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 rl_readline_name = "python";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 /* Force rebind of TAB to insert-tab */
996 rl_bind_key('\t', rl_insert);
997 /* Bind both ESC-TAB and ESC-ESC to the completion function */
998 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
999 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
1000 /* Set our hook functions */
1001 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001002#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +00001004#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 /* Set our completion function */
1006 rl_attempted_completion_function = (CPPFunction *)flex_complete;
1007 /* Set Python word break characters */
Antoine Pitroua7f7deb2013-05-06 21:51:03 +02001008 completer_word_break_characters =
1009 rl_completer_word_break_characters =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
1011 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +00001012
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001013 mod_state->begidx = PyLong_FromLong(0L);
1014 mod_state->endidx = PyLong_FromLong(0L);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 /* Initialize (allows .inputrc to override)
1016 *
1017 * XXX: A bug in the readline-2.2 library causes a memory leak
1018 * inside this function. Nothing we can do about it.
1019 */
R. David Murray52d1b4e2010-12-18 03:48:32 +00001020#ifdef __APPLE__
1021 if (using_libedit_emulation)
Victor Stinner6ced7c42011-03-21 18:15:42 +01001022 rl_read_init_file(NULL);
R. David Murray52d1b4e2010-12-18 03:48:32 +00001023 else
1024#endif /* __APPLE__ */
1025 rl_initialize();
Victor Stinner6ced7c42011-03-21 18:15:42 +01001026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +00001028}
1029
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001030/* Wrapper around GNU readline that handles signals differently. */
1031
1032
1033#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
1034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001036static void
1037rlhandler(char *text)
1038{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 completed_input_string = text;
1040 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001041}
1042
1043extern PyThreadState* _PyOS_ReadlineTState;
1044
1045static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001046readline_until_enter_or_signal(const char *prompt, int *signal)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001047{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 char * not_done_reading = "";
1049 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001052#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001054#endif
1055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 rl_callback_handler_install (prompt, rlhandler);
1057 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001060
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 while (completed_input_string == not_done_reading) {
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001062 int has_input = 0, err = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +00001063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 while (!has_input)
1065 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +00001066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 /* [Bug #1552726] Only limit the pause if an input hook has been
1068 defined. */
1069 struct timeval *timeoutp = NULL;
1070 if (PyOS_InputHook)
1071 timeoutp = &timeout;
1072 FD_SET(fileno(rl_instream), &selectset);
1073 /* select resets selectset if no input was available */
1074 has_input = select(fileno(rl_instream) + 1, &selectset,
1075 NULL, NULL, timeoutp);
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001076 err = errno;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 if(PyOS_InputHook) PyOS_InputHook();
1078 }
1079
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001080 if (has_input > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 rl_callback_read_char();
1082 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001083 else if (err == EINTR) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001085#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001087#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001088 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001089#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001091#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 if (s < 0) {
1093 rl_free_line_state();
1094 rl_cleanup_after_signal();
1095 rl_callback_handler_remove();
1096 *signal = 1;
1097 completed_input_string = NULL;
1098 }
1099 }
1100 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001103}
1104
1105
1106#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001107
1108/* Interrupt handler */
1109
1110static jmp_buf jbuf;
1111
Guido van Rossum0969d361997-08-05 21:27:50 +00001112/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001113static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001114onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001115{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001117}
1118
Guido van Rossum290900a1997-09-26 21:51:21 +00001119
Guido van Rossum0969d361997-08-05 21:27:50 +00001120static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001121readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001122{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 PyOS_sighandler_t old_inthandler;
1124 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 *signal = 0;
1127
1128 old_inthandler = PyOS_setsig(SIGINT, onintr);
1129 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001130#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1132 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001133#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 PyOS_setsig(SIGINT, old_inthandler);
1135 *signal = 1;
1136 return NULL;
1137 }
1138 rl_event_hook = PyOS_InputHook;
1139 p = readline(prompt);
1140 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001141
1142 return p;
1143}
1144#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1145
1146
1147static char *
Serhiy Storchakac6792272013-10-19 21:03:34 +03001148call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001149{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 size_t n;
1151 char *p, *q;
1152 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001153
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001154#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1156 if (!saved_locale)
1157 Py_FatalError("not enough memory to save locale");
Nadeem Vawda63752572013-02-02 20:05:11 +01001158 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001159#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1162 rl_instream = sys_stdin;
1163 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001164#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001165 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001166#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 /* we got an interrupt signal */
1172 if (signal) {
1173 RESTORE_LOCALE(saved_locale)
1174 return NULL;
1175 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 /* We got an EOF, return a empty string. */
1178 if (p == NULL) {
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001179 p = PyMem_RawMalloc(1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 if (p != NULL)
1181 *p = '\0';
1182 RESTORE_LOCALE(saved_locale)
1183 return p;
1184 }
1185
1186 /* we have a valid line */
1187 n = strlen(p);
1188 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001189 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001190 int length = _py_get_history_length();
1191 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001192#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001193 if (using_libedit_emulation) {
Ned Deilyf70f4a62013-09-06 15:16:19 -07001194 /* handle older 0-based or newer 1-based indexing */
1195 line = (const char *)history_get(length + libedit_history_start - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001197#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001198 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 else
1200 line = "";
1201 if (strcmp(p, line))
1202 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 }
1204 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1205 release the original. */
1206 q = p;
Victor Stinner2fe9bac2013-10-10 16:18:20 +02001207 p = PyMem_RawMalloc(n+2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 if (p != NULL) {
1209 strncpy(p, q, n);
1210 p[n] = '\n';
1211 p[n+1] = '\0';
1212 }
1213 free(q);
1214 RESTORE_LOCALE(saved_locale)
1215 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001216}
1217
Guido van Rossum290900a1997-09-26 21:51:21 +00001218
1219/* Initialize the module */
1220
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001221PyDoc_STRVAR(doc_module,
1222"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001223
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001224#ifdef __APPLE__
1225PyDoc_STRVAR(doc_module_le,
1226"Importing this module enables command line editing using libedit readline.");
1227#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001228
1229static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 PyModuleDef_HEAD_INIT,
1231 "readline",
1232 doc_module,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001233 sizeof(readlinestate),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 readline_methods,
1235 NULL,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001236 readline_traverse,
1237 readline_clear,
1238 readline_free
Martin v. Löwis1a214512008-06-11 05:26:20 +00001239};
1240
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001241
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001242PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001243PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 PyObject *m;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001246 readlinestate *mod_state;
Guido van Rossum290900a1997-09-26 21:51:21 +00001247
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001248#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1250 using_libedit_emulation = 1;
1251 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 if (using_libedit_emulation)
1254 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001255
1256#endif /* __APPLE__ */
1257
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001260 if (m == NULL)
1261 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001262
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001263 mod_state = (readlinestate *) PyModule_GetState(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 PyOS_ReadlineFunctionPointer = call_readline;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001265 setup_readline(mod_state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001267}