blob: ab24636e2ffe76731299398f336aac6265650b80 [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 *
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000058 * Currently there is one know API incompatibility:
Ronald Oussoren2efd9242009-09-20 14:53:22 +000059 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
60 * index with libedit's emulation.
61 * - Note that replace_history and remove_history use a 0-based index
62 * with both implementation.
63 */
64static int using_libedit_emulation = 0;
65static const char libedit_version_tag[] = "EditLine wrapper";
66#endif /* __APPLE__ */
67
Georg Brandl646fdd62010-10-18 07:27:55 +000068#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Christian Heimes32fbe592007-11-12 15:01:33 +000069static void
70on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000071 int num_matches, int max_length);
Georg Brandl646fdd62010-10-18 07:27:55 +000072#endif
Guido van Rossum0969d361997-08-05 21:27:50 +000073
Antoine Pitroua7f7deb2013-05-06 21:51:03 +020074/* Memory allocated for rl_completer_word_break_characters
75 (see issue #17289 for the motivation). */
76static char *completer_word_break_characters;
77
Antoine Pitrou5c30a752013-07-31 21:52:53 +020078typedef struct {
79 PyObject *completion_display_matches_hook;
80 PyObject *startup_hook;
81 PyObject *pre_input_hook;
82 PyObject *completer;
83 PyObject *begidx;
84 PyObject *endidx;
85} readlinestate;
86
87
88#define readline_state(o) ((readlinestate *)PyModule_GetState(o))
89
90static int
91readline_clear(PyObject *m)
92{
93 readlinestate *state = readline_state(m);
94 Py_CLEAR(state->completion_display_matches_hook);
95 Py_CLEAR(state->startup_hook);
96 Py_CLEAR(state->pre_input_hook);
97 Py_CLEAR(state->completer);
98 Py_CLEAR(state->begidx);
99 Py_CLEAR(state->endidx);
100 return 0;
101}
102
103static int
104readline_traverse(PyObject *m, visitproc visit, void *arg)
105{
106 readlinestate *state = readline_state(m);
107 Py_VISIT(state->completion_display_matches_hook);
108 Py_VISIT(state->startup_hook);
109 Py_VISIT(state->pre_input_hook);
110 Py_VISIT(state->completer);
111 Py_VISIT(state->begidx);
112 Py_VISIT(state->endidx);
113 return 0;
114}
115
116static void
117readline_free(void *m)
118{
119 readline_clear((PyObject *)m);
120}
121
122static PyModuleDef readlinemodule;
123
124#define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule)))
125
126
Guido van Rossum290900a1997-09-26 21:51:21 +0000127/* Exported function to send one line to readline's init file parser */
128
129static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000130parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000132 char *s, *copy;
133 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
134 return NULL;
135 /* Make a copy -- rl_parse_and_bind() modifies its argument */
136 /* Bernard Herzog */
Victor Stinnerb6404912013-07-07 16:21:41 +0200137 copy = PyMem_Malloc(1 + strlen(s));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 if (copy == NULL)
139 return PyErr_NoMemory();
140 strcpy(copy, s);
141 rl_parse_and_bind(copy);
Victor Stinnerb6404912013-07-07 16:21:41 +0200142 PyMem_Free(copy); /* Free the copy */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000144}
145
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000146PyDoc_STRVAR(doc_parse_and_bind,
147"parse_and_bind(string) -> None\n\
148Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000149
150
151/* Exported function to parse a readline init file */
152
153static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000154read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000155{
Victor Stinner19e65a32010-06-11 22:27:14 +0000156 PyObject *filename_obj = Py_None, *filename_bytes;
157 if (!PyArg_ParseTuple(args, "|O:read_init_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000159 if (filename_obj != Py_None) {
160 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
161 return NULL;
162 errno = rl_read_init_file(PyBytes_AsString(filename_bytes));
163 Py_DECREF(filename_bytes);
164 } else
165 errno = rl_read_init_file(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000166 if (errno)
167 return PyErr_SetFromErrno(PyExc_IOError);
168 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000169}
170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000171PyDoc_STRVAR(doc_read_init_file,
172"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000173Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000174The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000175
176
Skip Montanaro28067822000-07-06 18:55:12 +0000177/* Exported function to load a readline history file */
178
179static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000180read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000181{
Victor Stinner19e65a32010-06-11 22:27:14 +0000182 PyObject *filename_obj = Py_None, *filename_bytes;
183 if (!PyArg_ParseTuple(args, "|O:read_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000185 if (filename_obj != Py_None) {
186 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
187 return NULL;
188 errno = read_history(PyBytes_AsString(filename_bytes));
189 Py_DECREF(filename_bytes);
190 } else
191 errno = read_history(NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 if (errno)
193 return PyErr_SetFromErrno(PyExc_IOError);
194 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000195}
196
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000197static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000198PyDoc_STRVAR(doc_read_history_file,
199"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000200Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000201The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000202
203
204/* Exported function to save a readline history file */
205
206static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000207write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000208{
Victor Stinner19e65a32010-06-11 22:27:14 +0000209 PyObject *filename_obj = Py_None, *filename_bytes;
210 char *filename;
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100211 int err;
Victor Stinner19e65a32010-06-11 22:27:14 +0000212 if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000213 return NULL;
Victor Stinner19e65a32010-06-11 22:27:14 +0000214 if (filename_obj != Py_None) {
215 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
216 return NULL;
217 filename = PyBytes_AsString(filename_bytes);
218 } else {
219 filename_bytes = NULL;
220 filename = NULL;
221 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100222 errno = err = write_history(filename);
223 if (!err && _history_length >= 0)
Victor Stinner19e65a32010-06-11 22:27:14 +0000224 history_truncate_file(filename, _history_length);
225 Py_XDECREF(filename_bytes);
Antoine Pitrouc345ce12011-12-16 12:28:32 +0100226 errno = err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000227 if (errno)
228 return PyErr_SetFromErrno(PyExc_IOError);
229 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000230}
231
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000232PyDoc_STRVAR(doc_write_history_file,
233"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000234Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000235The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000236
237
Guido van Rossum74f31432003-01-07 20:01:29 +0000238/* Set history length */
239
240static PyObject*
241set_history_length(PyObject *self, PyObject *args)
242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000243 int length = _history_length;
244 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
245 return NULL;
246 _history_length = length;
247 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000248}
249
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000250PyDoc_STRVAR(set_history_length_doc,
251"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000252set the maximal number of items which will be written to\n\
253the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000254history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000255
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000256
Guido van Rossum74f31432003-01-07 20:01:29 +0000257/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000258
259static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000260get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 return PyLong_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000263}
264
Guido van Rossum74f31432003-01-07 20:01:29 +0000265PyDoc_STRVAR(get_history_length_doc,
266"get_history_length() -> int\n\
267return the maximum number of items that will be written to\n\
268the history file.");
269
270
Martin v. Löwis0daad592001-09-30 21:09:59 +0000271/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000272
Martin v. Löwis0daad592001-09-30 21:09:59 +0000273static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000274set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000276 PyObject *function = Py_None;
277 char buf[80];
278 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
279 if (!PyArg_ParseTuple(args, buf, &function))
280 return NULL;
281 if (function == Py_None) {
282 Py_XDECREF(*hook_var);
283 *hook_var = NULL;
284 }
285 else if (PyCallable_Check(function)) {
286 PyObject *tmp = *hook_var;
287 Py_INCREF(function);
288 *hook_var = function;
289 Py_XDECREF(tmp);
290 }
291 else {
Victor Stinner6ced7c42011-03-21 18:15:42 +0100292 PyErr_Format(PyExc_TypeError,
293 "set_%.50s(func): argument not callable",
294 funcname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000295 return NULL;
296 }
297 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000298}
299
Guido van Rossum74f31432003-01-07 20:01:29 +0000300
Martin v. Löwis0daad592001-09-30 21:09:59 +0000301/* Exported functions to specify hook functions in Python */
302
Martin v. Löwis0daad592001-09-30 21:09:59 +0000303
304#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200305
Martin v. Löwis0daad592001-09-30 21:09:59 +0000306#endif
307
308static PyObject *
Thomas Wouters89d996e2007-09-08 17:39:28 +0000309set_completion_display_matches_hook(PyObject *self, PyObject *args)
310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000311 PyObject *result = set_hook("completion_display_matches_hook",
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200312 &readlinestate_global->completion_display_matches_hook, args);
Christian Heimes32fbe592007-11-12 15:01:33 +0000313#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000314 /* We cannot set this hook globally, since it replaces the
315 default completion display. */
316 rl_completion_display_matches_hook =
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200317 readlinestate_global->completion_display_matches_hook ?
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000318#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000319 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000320#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisb37509b2008-11-04 20:45:29 +0000322#endif
Christian Heimes32fbe592007-11-12 15:01:33 +0000323#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 return result;
Christian Heimes32fbe592007-11-12 15:01:33 +0000325
Thomas Wouters89d996e2007-09-08 17:39:28 +0000326}
327
328PyDoc_STRVAR(doc_set_completion_display_matches_hook,
329"set_completion_display_matches_hook([function]) -> None\n\
330Set or remove the completion display function.\n\
331The function is called as\n\
332 function(substitution, [matches], longest_match_length)\n\
333once each time matches need to be displayed.");
334
335static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000336set_startup_hook(PyObject *self, PyObject *args)
337{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200338 return set_hook("startup_hook", &readlinestate_global->startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000339}
340
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000341PyDoc_STRVAR(doc_set_startup_hook,
342"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000343Set or remove the startup_hook function.\n\
344The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000345before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000346
Guido van Rossum74f31432003-01-07 20:01:29 +0000347
Martin v. Löwis0daad592001-09-30 21:09:59 +0000348#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000349
350/* Set pre-input hook */
351
Martin v. Löwis0daad592001-09-30 21:09:59 +0000352static PyObject *
353set_pre_input_hook(PyObject *self, PyObject *args)
354{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200355 return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000356}
357
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000358PyDoc_STRVAR(doc_set_pre_input_hook,
359"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000360Set or remove the pre_input_hook function.\n\
361The function is called with no arguments after the first prompt\n\
362has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000363characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000364
Martin v. Löwis0daad592001-09-30 21:09:59 +0000365#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000366
Guido van Rossum74f31432003-01-07 20:01:29 +0000367
Guido van Rossum290900a1997-09-26 21:51:21 +0000368/* Exported function to specify a word completer in Python */
369
Guido van Rossum290900a1997-09-26 21:51:21 +0000370
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200371
372
373
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000374
Guido van Rossum74f31432003-01-07 20:01:29 +0000375
Thomas Wouters89d996e2007-09-08 17:39:28 +0000376/* Get the completion type for the scope of the tab-completion */
377static PyObject *
378get_completion_type(PyObject *self, PyObject *noarg)
379{
Christian Heimes217cfd12007-12-02 14:31:20 +0000380 return PyLong_FromLong(rl_completion_type);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000381}
382
383PyDoc_STRVAR(doc_get_completion_type,
384"get_completion_type() -> int\n\
385Get the type of completion being attempted.");
386
387
Guido van Rossum74f31432003-01-07 20:01:29 +0000388/* Get the beginning index for the scope of the tab-completion */
389
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000390static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000391get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000392{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200393 Py_INCREF(readlinestate_global->begidx);
394 return readlinestate_global->begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000395}
396
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000397PyDoc_STRVAR(doc_get_begidx,
398"get_begidx() -> int\n\
399get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000400
Guido van Rossum74f31432003-01-07 20:01:29 +0000401
402/* Get the ending index for the scope of the tab-completion */
403
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000404static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000405get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000406{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200407 Py_INCREF(readlinestate_global->endidx);
408 return readlinestate_global->endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000409}
410
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000411PyDoc_STRVAR(doc_get_endidx,
412"get_endidx() -> int\n\
413get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000414
415
Guido van Rossum74f31432003-01-07 20:01:29 +0000416/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000417
418static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000419set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000420{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000421 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000422
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200423 if (!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 return NULL;
425 }
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200426 /* Keep a reference to the allocated memory in the module state in case
427 some other module modifies rl_completer_word_break_characters
428 (see issue #17289). */
429 free(completer_word_break_characters);
430 completer_word_break_characters = strdup(break_chars);
431 if (completer_word_break_characters) {
432 rl_completer_word_break_characters = completer_word_break_characters;
433 Py_RETURN_NONE;
434 }
435 else
436 return PyErr_NoMemory();
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000437}
438
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000439PyDoc_STRVAR(doc_set_completer_delims,
440"set_completer_delims(string) -> None\n\
441set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000442
Mark Dickinson29b238e2010-08-03 16:08:16 +0000443/* _py_free_history_entry: Utility function to free a history entry. */
444
445#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
446
447/* Readline version >= 5.0 introduced a timestamp field into the history entry
448 structure; this needs to be freed to avoid a memory leak. This version of
449 readline also introduced the handy 'free_history_entry' function, which
450 takes care of the timestamp. */
451
452static void
453_py_free_history_entry(HIST_ENTRY *entry)
454{
455 histdata_t data = free_history_entry(entry);
456 free(data);
457}
458
459#else
460
461/* No free_history_entry function; free everything manually. */
462
463static void
464_py_free_history_entry(HIST_ENTRY *entry)
465{
466 if (entry->line)
467 free((void *)entry->line);
468 if (entry->data)
469 free(entry->data);
470 free(entry);
471}
472
473#endif
474
Skip Montanaroe5069012004-08-15 14:32:06 +0000475static PyObject *
476py_remove_history(PyObject *self, PyObject *args)
477{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 int entry_number;
479 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
482 return NULL;
483 if (entry_number < 0) {
484 PyErr_SetString(PyExc_ValueError,
485 "History index cannot be negative");
486 return NULL;
487 }
488 entry = remove_history(entry_number);
489 if (!entry) {
490 PyErr_Format(PyExc_ValueError,
491 "No history item at position %d",
492 entry_number);
493 return NULL;
494 }
495 /* free memory allocated for the history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000496 _py_free_history_entry(entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000498}
499
500PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000501"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000502remove history item given by its position");
503
504static PyObject *
505py_replace_history(PyObject *self, PyObject *args)
506{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 int entry_number;
508 char *line;
509 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
512 &line)) {
513 return NULL;
514 }
515 if (entry_number < 0) {
516 PyErr_SetString(PyExc_ValueError,
517 "History index cannot be negative");
518 return NULL;
519 }
520 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
521 if (!old_entry) {
522 PyErr_Format(PyExc_ValueError,
523 "No history item at position %d",
524 entry_number);
525 return NULL;
526 }
527 /* free memory allocated for the old history entry */
Mark Dickinson29b238e2010-08-03 16:08:16 +0000528 _py_free_history_entry(old_entry);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000530}
531
532PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000533"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000534replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000535
536/* Add a line to the history buffer */
537
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000538static PyObject *
539py_add_history(PyObject *self, PyObject *args)
540{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
544 return NULL;
545 }
546 add_history(line);
547 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000548}
549
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000550PyDoc_STRVAR(doc_add_history,
551"add_history(string) -> None\n\
552add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000553
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000554
Guido van Rossum74f31432003-01-07 20:01:29 +0000555/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000556
557static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000558get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 return PyUnicode_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000561}
Guido van Rossum74f31432003-01-07 20:01:29 +0000562
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000563PyDoc_STRVAR(doc_get_completer_delims,
564"get_completer_delims() -> string\n\
565get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000566
Guido van Rossum74f31432003-01-07 20:01:29 +0000567
568/* Set the completer function */
569
Guido van Rossum290900a1997-09-26 21:51:21 +0000570static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000571set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000572{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200573 return set_hook("completer", &readlinestate_global->completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000574}
575
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000576PyDoc_STRVAR(doc_set_completer,
577"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000578Set or remove the completer function.\n\
579The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000580for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000581It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000582
Guido van Rossum74f31432003-01-07 20:01:29 +0000583
Michael W. Hudson796df152003-01-30 10:12:51 +0000584static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000585get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000586{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200587 if (readlinestate_global->completer == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 Py_RETURN_NONE;
589 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200590 Py_INCREF(readlinestate_global->completer);
591 return readlinestate_global->completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000592}
593
594PyDoc_STRVAR(doc_get_completer,
595"get_completer() -> function\n\
596\n\
597Returns current completer function.");
598
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000599/* Private function to get current length of history. XXX It may be
600 * possible to replace this with a direct use of history_length instead,
601 * but it's not clear whether BSD's libedit keeps history_length up to date.
602 * See issue #8065.*/
603
604static int
605_py_get_history_length(void)
606{
607 HISTORY_STATE *hist_st = history_get_history_state();
608 int length = hist_st->length;
609 /* the history docs don't say so, but the address of hist_st changes each
610 time history_get_history_state is called which makes me think it's
611 freshly malloc'd memory... on the other hand, the address of the last
612 line stays the same as long as history isn't extended, so it appears to
613 be malloc'd but managed by the history package... */
614 free(hist_st);
615 return length;
616}
617
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000618/* Exported function to get any element of history */
619
620static PyObject *
621get_history_item(PyObject *self, PyObject *args)
622{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 int idx = 0;
624 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 if (!PyArg_ParseTuple(args, "i:index", &idx))
627 return NULL;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000628#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000629 if (using_libedit_emulation) {
630 /* Libedit emulation uses 0-based indexes,
631 * the real one uses 1-based indexes,
632 * adjust the index to ensure that Python
633 * code doesn't have to worry about the
634 * difference.
635 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000636 int length = _py_get_history_length();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000637 idx --;
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 /*
640 * Apple's readline emulation crashes when
641 * the index is out of range, therefore
642 * test for that and fail gracefully.
643 */
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000644 if (idx < 0 || idx >= length) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 Py_RETURN_NONE;
646 }
647 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +0000648#endif /* __APPLE__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000649 if ((hist_ent = history_get(idx)))
650 return PyUnicode_FromString(hist_ent->line);
651 else {
652 Py_RETURN_NONE;
653 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000654}
655
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000656PyDoc_STRVAR(doc_get_history_item,
657"get_history_item() -> string\n\
658return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000659
Guido van Rossum74f31432003-01-07 20:01:29 +0000660
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000661/* Exported function to get current length of history */
662
663static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000664get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000665{
Mark Dickinson6b54e1f2010-08-03 16:49:49 +0000666 return PyLong_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000667}
668
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000669PyDoc_STRVAR(doc_get_current_history_length,
670"get_current_history_length() -> integer\n\
671return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000672
Guido van Rossum74f31432003-01-07 20:01:29 +0000673
Guido van Rossum79378ff1997-10-07 14:53:21 +0000674/* Exported function to read the current line buffer */
675
676static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000677get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 return PyUnicode_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000680}
681
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000682PyDoc_STRVAR(doc_get_line_buffer,
683"get_line_buffer() -> string\n\
684return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000685
Guido van Rossum74f31432003-01-07 20:01:29 +0000686
Martin v. Löwise7a97962003-09-20 16:08:33 +0000687#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
688
689/* Exported function to clear the current history */
690
691static PyObject *
692py_clear_history(PyObject *self, PyObject *noarg)
693{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 clear_history();
695 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000696}
697
698PyDoc_STRVAR(doc_clear_history,
699"clear_history() -> None\n\
700Clear the current readline history.");
701#endif
702
703
Guido van Rossum79378ff1997-10-07 14:53:21 +0000704/* Exported function to insert text into the line buffer */
705
706static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000707insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000708{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 char *s;
710 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
711 return NULL;
712 rl_insert_text(s);
713 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000714}
715
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000716PyDoc_STRVAR(doc_insert_text,
717"insert_text(string) -> None\n\
718Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000719
Guido van Rossum74f31432003-01-07 20:01:29 +0000720
721/* Redisplay the line buffer */
722
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000723static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000724redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000725{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 rl_redisplay();
727 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000728}
729
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000730PyDoc_STRVAR(doc_redisplay,
731"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000732Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000733contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000734
Guido van Rossum74f31432003-01-07 20:01:29 +0000735
Guido van Rossum290900a1997-09-26 21:51:21 +0000736/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000737
738static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
741 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
742 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
743 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
744 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
745 {"read_history_file", read_history_file,
746 METH_VARARGS, doc_read_history_file},
747 {"write_history_file", write_history_file,
748 METH_VARARGS, doc_write_history_file},
749 {"get_history_item", get_history_item,
750 METH_VARARGS, doc_get_history_item},
751 {"get_current_history_length", (PyCFunction)get_current_history_length,
752 METH_NOARGS, doc_get_current_history_length},
753 {"set_history_length", set_history_length,
754 METH_VARARGS, set_history_length_doc},
755 {"get_history_length", get_history_length,
756 METH_NOARGS, get_history_length_doc},
757 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
758 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
759 {"get_completion_type", get_completion_type,
760 METH_NOARGS, doc_get_completion_type},
761 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
762 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 {"set_completer_delims", set_completer_delims,
765 METH_VARARGS, doc_set_completer_delims},
766 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
767 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
768 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
769 {"get_completer_delims", get_completer_delims,
770 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
773 METH_VARARGS, doc_set_completion_display_matches_hook},
774 {"set_startup_hook", set_startup_hook,
775 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000776#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 {"set_pre_input_hook", set_pre_input_hook,
778 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000779#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000780#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000782#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000783 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000784};
785
Guido van Rossum05ac4492003-01-07 20:04:12 +0000786
Martin v. Löwis0daad592001-09-30 21:09:59 +0000787/* C function to call the Python hooks. */
788
789static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000790on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000791{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 int result = 0;
793 if (func != NULL) {
794 PyObject *r;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 r = PyObject_CallFunction(func, NULL);
796 if (r == NULL)
797 goto error;
798 if (r == Py_None)
799 result = 0;
800 else {
801 result = PyLong_AsLong(r);
802 if (result == -1 && PyErr_Occurred())
803 goto error;
804 }
805 Py_DECREF(r);
806 goto done;
807 error:
808 PyErr_Clear();
809 Py_XDECREF(r);
810 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000811 return result;
812 }
813 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000814}
815
816static int
817on_startup_hook(void)
818{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200819 int r;
820#ifdef WITH_THREAD
821 PyGILState_STATE gilstate = PyGILState_Ensure();
822#endif
823 r = on_hook(readlinestate_global->startup_hook);
824#ifdef WITH_THREAD
825 PyGILState_Release(gilstate);
826#endif
827 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000828}
829
830#ifdef HAVE_RL_PRE_INPUT_HOOK
831static int
832on_pre_input_hook(void)
833{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200834 int r;
835#ifdef WITH_THREAD
836 PyGILState_STATE gilstate = PyGILState_Ensure();
837#endif
838 r = on_hook(readlinestate_global->pre_input_hook);
839#ifdef WITH_THREAD
840 PyGILState_Release(gilstate);
841#endif
842 return r;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000843}
844#endif
845
Guido van Rossum05ac4492003-01-07 20:04:12 +0000846
Thomas Wouters89d996e2007-09-08 17:39:28 +0000847/* C function to call the Python completion_display_matches */
848
Georg Brandl646fdd62010-10-18 07:27:55 +0000849#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Thomas Wouters89d996e2007-09-08 17:39:28 +0000850static void
851on_completion_display_matches_hook(char **matches,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 int num_matches, int max_length)
Thomas Wouters89d996e2007-09-08 17:39:28 +0000853{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 int i;
855 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimesaec75c32007-11-11 22:42:36 +0000856#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 PyGILState_STATE gilstate = PyGILState_Ensure();
Thomas Wouters89d996e2007-09-08 17:39:28 +0000858#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 m = PyList_New(num_matches);
860 if (m == NULL)
861 goto error;
862 for (i = 0; i < num_matches; i++) {
863 s = PyUnicode_FromString(matches[i+1]);
864 if (s == NULL)
865 goto error;
866 if (PyList_SetItem(m, i, s) == -1)
867 goto error;
868 }
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200869 r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 "sOi", matches[0], m, max_length);
Christian Heimes32fbe592007-11-12 15:01:33 +0000871
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 Py_DECREF(m); m=NULL;
Christian Heimes32fbe592007-11-12 15:01:33 +0000873
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 if (r == NULL ||
875 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
876 goto error;
877 }
878 Py_XDECREF(r); r=NULL;
879
880 if (0) {
881 error:
882 PyErr_Clear();
883 Py_XDECREF(m);
884 Py_XDECREF(r);
885 }
Christian Heimes32fbe592007-11-12 15:01:33 +0000886#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 PyGILState_Release(gilstate);
Christian Heimes32fbe592007-11-12 15:01:33 +0000888#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000889}
890
Senthil Kumaran95c07002010-11-04 03:51:05 +0000891#endif
Thomas Wouters89d996e2007-09-08 17:39:28 +0000892
Guido van Rossum290900a1997-09-26 21:51:21 +0000893/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000894
Guido van Rossum290900a1997-09-26 21:51:21 +0000895static char *
Guido van Rossumd8faa362007-04-27 19:54:29 +0000896on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000897{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 char *result = NULL;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200899 if (readlinestate_global->completer != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000900 PyObject *r;
Christian Heimesaec75c32007-11-11 22:42:36 +0000901#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000903#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 rl_attempted_completion_over = 1;
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200905 r = PyObject_CallFunction(readlinestate_global->completer, "si", text, state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 if (r == NULL)
907 goto error;
908 if (r == Py_None) {
909 result = NULL;
910 }
911 else {
912 char *s = _PyUnicode_AsString(r);
913 if (s == NULL)
914 goto error;
915 result = strdup(s);
916 }
917 Py_DECREF(r);
918 goto done;
919 error:
920 PyErr_Clear();
921 Py_XDECREF(r);
922 done:
Christian Heimesaec75c32007-11-11 22:42:36 +0000923#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000925#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 return result;
927 }
928 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000929}
930
Guido van Rossum290900a1997-09-26 21:51:21 +0000931
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000932/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000933 * before calling the normal completer */
934
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000935static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000936flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000937{
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200938 char **result;
939#ifdef WITH_THREAD
940 PyGILState_STATE gilstate = PyGILState_Ensure();
941#endif
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000942#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 rl_completion_append_character ='\0';
Antoine Pitroud5131772009-10-26 19:22:14 +0000944#endif
945#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 rl_completion_suppress_append = 0;
Antoine Pitroudc0900b2009-10-19 18:22:37 +0000947#endif
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200948 Py_XDECREF(readlinestate_global->begidx);
949 Py_XDECREF(readlinestate_global->endidx);
950 readlinestate_global->begidx = PyLong_FromLong((long) start);
951 readlinestate_global->endidx = PyLong_FromLong((long) end);
952 result = completion_matches(text, *on_completion);
953#ifdef WITH_THREAD
954 PyGILState_Release(gilstate);
955#endif
956 return result;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000957}
958
Guido van Rossum05ac4492003-01-07 20:04:12 +0000959
Guido van Rossum290900a1997-09-26 21:51:21 +0000960/* Helper to initialize GNU readline properly. */
961
962static void
Antoine Pitrou5c30a752013-07-31 21:52:53 +0200963setup_readline(readlinestate *mod_state)
Guido van Rossum290900a1997-09-26 21:51:21 +0000964{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000965#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
967 if (!saved_locale)
968 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000969#endif
970
R. David Murray52d1b4e2010-12-18 03:48:32 +0000971#ifdef __APPLE__
Victor Stinner6ced7c42011-03-21 18:15:42 +0100972 /* the libedit readline emulation resets key bindings etc
R. David Murray52d1b4e2010-12-18 03:48:32 +0000973 * when calling rl_initialize. So call it upfront
974 */
975 if (using_libedit_emulation)
976 rl_initialize();
977#endif /* __APPLE__ */
978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 rl_readline_name = "python";
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 /* Force rebind of TAB to insert-tab */
983 rl_bind_key('\t', rl_insert);
984 /* Bind both ESC-TAB and ESC-ESC to the completion function */
985 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
986 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
987 /* Set our hook functions */
988 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000989#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000991#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 /* Set our completion function */
993 rl_attempted_completion_function = (CPPFunction *)flex_complete;
994 /* Set Python word break characters */
Antoine Pitroua7f7deb2013-05-06 21:51:03 +0200995 completer_word_break_characters =
996 rl_completer_word_break_characters =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
998 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000999
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001000 mod_state->begidx = PyLong_FromLong(0L);
1001 mod_state->endidx = PyLong_FromLong(0L);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 /* Initialize (allows .inputrc to override)
1003 *
1004 * XXX: A bug in the readline-2.2 library causes a memory leak
1005 * inside this function. Nothing we can do about it.
1006 */
R. David Murray52d1b4e2010-12-18 03:48:32 +00001007#ifdef __APPLE__
1008 if (using_libedit_emulation)
Victor Stinner6ced7c42011-03-21 18:15:42 +01001009 rl_read_init_file(NULL);
R. David Murray52d1b4e2010-12-18 03:48:32 +00001010 else
1011#endif /* __APPLE__ */
1012 rl_initialize();
Victor Stinner6ced7c42011-03-21 18:15:42 +01001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +00001015}
1016
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001017/* Wrapper around GNU readline that handles signals differently. */
1018
1019
1020#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
1021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001023static void
1024rlhandler(char *text)
1025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 completed_input_string = text;
1027 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001028}
1029
1030extern PyThreadState* _PyOS_ReadlineTState;
1031
1032static char *
1033readline_until_enter_or_signal(char *prompt, int *signal)
1034{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 char * not_done_reading = "";
1036 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001039#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001041#endif
1042
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 rl_callback_handler_install (prompt, rlhandler);
1044 FD_ZERO(&selectset);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 while (completed_input_string == not_done_reading) {
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001049 int has_input = 0, err = 0;
Thomas Wouters89f507f2006-12-13 04:49:30 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 while (!has_input)
1052 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Michael W. Hudson8da2b012004-10-07 13:46:33 +00001053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001054 /* [Bug #1552726] Only limit the pause if an input hook has been
1055 defined. */
1056 struct timeval *timeoutp = NULL;
1057 if (PyOS_InputHook)
1058 timeoutp = &timeout;
1059 FD_SET(fileno(rl_instream), &selectset);
1060 /* select resets selectset if no input was available */
1061 has_input = select(fileno(rl_instream) + 1, &selectset,
1062 NULL, NULL, timeoutp);
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001063 err = errno;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 if(PyOS_InputHook) PyOS_InputHook();
1065 }
1066
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001067 if (has_input > 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 rl_callback_read_char();
1069 }
Antoine Pitrouc345ce12011-12-16 12:28:32 +01001070 else if (err == EINTR) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001072#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001074#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001076#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +00001078#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 if (s < 0) {
1080 rl_free_line_state();
1081 rl_cleanup_after_signal();
1082 rl_callback_handler_remove();
1083 *signal = 1;
1084 completed_input_string = NULL;
1085 }
1086 }
1087 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001090}
1091
1092
1093#else
Guido van Rossum290900a1997-09-26 21:51:21 +00001094
1095/* Interrupt handler */
1096
1097static jmp_buf jbuf;
1098
Guido van Rossum0969d361997-08-05 21:27:50 +00001099/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +00001100static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +00001101onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +00001102{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +00001104}
1105
Guido van Rossum290900a1997-09-26 21:51:21 +00001106
Guido van Rossum0969d361997-08-05 21:27:50 +00001107static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001108readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +00001109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 PyOS_sighandler_t old_inthandler;
1111 char *p;
Guido van Rossum74f31432003-01-07 20:01:29 +00001112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 *signal = 0;
1114
1115 old_inthandler = PyOS_setsig(SIGINT, onintr);
1116 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001117#ifdef HAVE_SIGRELSE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1119 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001120#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 PyOS_setsig(SIGINT, old_inthandler);
1122 *signal = 1;
1123 return NULL;
1124 }
1125 rl_event_hook = PyOS_InputHook;
1126 p = readline(prompt);
1127 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001128
1129 return p;
1130}
1131#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1132
1133
1134static char *
1135call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 size_t n;
1138 char *p, *q;
1139 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001140
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001141#ifdef SAVE_LOCALE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1143 if (!saved_locale)
1144 Py_FatalError("not enough memory to save locale");
Nadeem Vawda63752572013-02-02 20:05:11 +01001145 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001146#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001147
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1149 rl_instream = sys_stdin;
1150 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001151#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001153#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 p = readline_until_enter_or_signal(prompt, &signal);
Guido van Rossumb18618d2000-05-03 23:44:39 +00001157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 /* we got an interrupt signal */
1159 if (signal) {
1160 RESTORE_LOCALE(saved_locale)
1161 return NULL;
1162 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001163
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001164 /* We got an EOF, return a empty string. */
1165 if (p == NULL) {
1166 p = PyMem_Malloc(1);
1167 if (p != NULL)
1168 *p = '\0';
1169 RESTORE_LOCALE(saved_locale)
1170 return p;
1171 }
1172
1173 /* we have a valid line */
1174 n = strlen(p);
1175 if (n > 0) {
Brett Cannon2525dc82010-08-22 20:36:25 +00001176 const char *line;
Mark Dickinson6b54e1f2010-08-03 16:49:49 +00001177 int length = _py_get_history_length();
1178 if (length > 0)
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001179#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 if (using_libedit_emulation) {
1181 /*
1182 * Libedit's emulation uses 0-based indexes,
1183 * the real readline uses 1-based indexes.
1184 */
Brett Cannon2525dc82010-08-22 20:36:25 +00001185 line = (const char *)history_get(length - 1)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001186 } else
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001187#endif /* __APPLE__ */
Brett Cannon2525dc82010-08-22 20:36:25 +00001188 line = (const char *)history_get(length)->line;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 else
1190 line = "";
1191 if (strcmp(p, line))
1192 add_history(p);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001193 }
1194 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1195 release the original. */
1196 q = p;
1197 p = PyMem_Malloc(n+2);
1198 if (p != NULL) {
1199 strncpy(p, q, n);
1200 p[n] = '\n';
1201 p[n+1] = '\0';
1202 }
1203 free(q);
1204 RESTORE_LOCALE(saved_locale)
1205 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001206}
1207
Guido van Rossum290900a1997-09-26 21:51:21 +00001208
1209/* Initialize the module */
1210
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211PyDoc_STRVAR(doc_module,
1212"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001213
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001214#ifdef __APPLE__
1215PyDoc_STRVAR(doc_module_le,
1216"Importing this module enables command line editing using libedit readline.");
1217#endif /* __APPLE__ */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001218
1219static struct PyModuleDef readlinemodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 PyModuleDef_HEAD_INIT,
1221 "readline",
1222 doc_module,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001223 sizeof(readlinestate),
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 readline_methods,
1225 NULL,
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001226 readline_traverse,
1227 readline_clear,
1228 readline_free
Martin v. Löwis1a214512008-06-11 05:26:20 +00001229};
1230
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001231
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001232PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001233PyInit_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001234{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 PyObject *m;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001236 readlinestate *mod_state;
Guido van Rossum290900a1997-09-26 21:51:21 +00001237
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001238#ifdef __APPLE__
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1240 using_libedit_emulation = 1;
1241 }
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 if (using_libedit_emulation)
1244 readlinemodule.m_doc = doc_module_le;
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001245
1246#endif /* __APPLE__ */
1247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 m = PyModule_Create(&readlinemodule);
Ronald Oussoren2efd9242009-09-20 14:53:22 +00001249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 if (m == NULL)
1251 return NULL;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001252
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001253 mod_state = (readlinestate *) PyModule_GetState(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 PyOS_ReadlineFunctionPointer = call_readline;
Antoine Pitrou5c30a752013-07-31 21:52:53 +02001255 setup_readline(mod_state);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 return m;
Guido van Rossum0969d361997-08-05 21:27:50 +00001257}