blob: 0afba5db9c5abe677a68e71abd5af811c7fbeb01 [file] [log] [blame]
Guido van Rossum290900a1997-09-26 21:51:21 +00001/* This module makes GNU readline available to Python. It has ideas
2 * contributed by Lee Busby, LLNL, and William Magro, Cornell Theory
Michael W. Hudson9a8c3142005-03-30 10:09:12 +00003 * Center. The completer interface was inspired by Lele Gaifax. More
4 * recently, it was largely rewritten by Guido van Rossum.
Guido van Rossum0969d361997-08-05 21:27:50 +00005 */
6
Guido van Rossum290900a1997-09-26 21:51:21 +00007/* Standard definitions */
Guido van Rossum0969d361997-08-05 21:27:50 +00008#include "Python.h"
9#include <setjmp.h>
10#include <signal.h>
Guido van Rossum290900a1997-09-26 21:51:21 +000011#include <errno.h>
Michael W. Hudson8da2b012004-10-07 13:46:33 +000012#include <sys/time.h>
Guido van Rossum0969d361997-08-05 21:27:50 +000013
Skip Montanaro7befb992004-02-10 16:50:21 +000014#if defined(HAVE_SETLOCALE)
Guido van Rossum60c8a3a2002-10-09 21:27:33 +000015/* GNU readline() mistakenly sets the LC_CTYPE locale.
16 * This is evil. Only the user or the app's main() should do this!
17 * We must save and restore the locale around the rl_initialize() call.
18 */
19#define SAVE_LOCALE
20#include <locale.h>
21#endif
22
Neal Norwitz5eaf7722006-07-16 02:15:27 +000023#ifdef SAVE_LOCALE
24# define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
25#else
Brett Cannon23b581a2010-05-04 00:52:41 +000026# define RESTORE_LOCALE(sl)
Neal Norwitz5eaf7722006-07-16 02:15:27 +000027#endif
28
Guido van Rossum290900a1997-09-26 21:51:21 +000029/* GNU readline definitions */
Guido van Rossumb0e51b22001-04-13 18:14:27 +000030#undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
Guido van Rossumbcc20741998-08-04 22:53:56 +000031#include <readline/readline.h>
32#include <readline/history.h>
Guido van Rossum730806d1998-04-10 22:27:42 +000033
Guido van Rossum353ae582001-07-10 16:45:32 +000034#ifdef HAVE_RL_COMPLETION_MATCHES
Guido van Rossum74f31432003-01-07 20:01:29 +000035#define completion_matches(x, y) \
Antoine Pitrouc83ea132010-05-09 14:46:46 +000036 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
Neal Norwitzbd538702007-04-19 05:52:37 +000037#else
Martin v. Löwisbb86d832008-11-04 20:40:09 +000038#if defined(_RL_FUNCTION_TYPEDEF)
Neal Norwitzbd538702007-04-19 05:52:37 +000039extern char **completion_matches(char *, rl_compentry_func_t *);
Martin v. Löwisbb86d832008-11-04 20:40:09 +000040#else
Ronald Oussoren333fca92010-02-11 13:13:08 +000041
42#if !defined(__APPLE__)
Martin v. Löwisbb86d832008-11-04 20:40:09 +000043extern char **completion_matches(char *, CPFunction *);
44#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000045#endif
Ronald Oussoren333fca92010-02-11 13:13:08 +000046#endif
Guido van Rossum353ae582001-07-10 16:45:32 +000047
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000048#ifdef __APPLE__
49/*
50 * It is possible to link the readline module to the readline
Brett Cannon23b581a2010-05-04 00:52:41 +000051 * emulation library of editline/libedit.
52 *
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000053 * On OSX this emulation library is not 100% API compatible
54 * with the "real" readline and cannot be detected at compile-time,
55 * hence we use a runtime check to detect if we're using libedit
56 *
Brett Cannon23b581a2010-05-04 00:52:41 +000057 * Currently there is one know API incompatibility:
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +000058 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
59 * index with libedit's emulation.
60 * - Note that replace_history and remove_history use a 0-based index
61 * with both implementation.
62 */
63static int using_libedit_emulation = 0;
64static const char libedit_version_tag[] = "EditLine wrapper";
65#endif /* __APPLE__ */
66
Martin v. Löwisf3548942007-11-12 04:53:02 +000067static void
68on_completion_display_matches_hook(char **matches,
Antoine Pitrouc83ea132010-05-09 14:46:46 +000069 int num_matches, int max_length);
Martin v. Löwisf3548942007-11-12 04:53:02 +000070
Guido van Rossum0969d361997-08-05 21:27:50 +000071
Guido van Rossum290900a1997-09-26 21:51:21 +000072/* Exported function to send one line to readline's init file parser */
73
74static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000075parse_and_bind(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +000076{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000077 char *s, *copy;
78 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
79 return NULL;
80 /* Make a copy -- rl_parse_and_bind() modifies its argument */
81 /* Bernard Herzog */
82 copy = malloc(1 + strlen(s));
83 if (copy == NULL)
84 return PyErr_NoMemory();
85 strcpy(copy, s);
86 rl_parse_and_bind(copy);
87 free(copy); /* Free the copy */
88 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +000089}
90
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000091PyDoc_STRVAR(doc_parse_and_bind,
92"parse_and_bind(string) -> None\n\
93Parse and execute single line of a readline init file.");
Guido van Rossum290900a1997-09-26 21:51:21 +000094
95
96/* Exported function to parse a readline init file */
97
98static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +000099read_init_file(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000100{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000101 char *s = NULL;
102 if (!PyArg_ParseTuple(args, "|z:read_init_file", &s))
103 return NULL;
104 errno = rl_read_init_file(s);
105 if (errno)
106 return PyErr_SetFromErrno(PyExc_IOError);
107 Py_RETURN_NONE;
Guido van Rossum290900a1997-09-26 21:51:21 +0000108}
109
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000110PyDoc_STRVAR(doc_read_init_file,
111"read_init_file([filename]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000112Parse a readline initialization file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000113The default filename is the last filename used.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000114
115
Skip Montanaro28067822000-07-06 18:55:12 +0000116/* Exported function to load a readline history file */
117
118static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000119read_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000120{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000121 char *s = NULL;
122 if (!PyArg_ParseTuple(args, "|z:read_history_file", &s))
123 return NULL;
124 errno = read_history(s);
125 if (errno)
126 return PyErr_SetFromErrno(PyExc_IOError);
127 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000128}
129
Hye-Shik Chang7a8173a2004-11-25 04:04:20 +0000130static int _history_length = -1; /* do not truncate history by default */
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000131PyDoc_STRVAR(doc_read_history_file,
132"read_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000133Load a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000134The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000135
136
137/* Exported function to save a readline history file */
138
139static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000140write_history_file(PyObject *self, PyObject *args)
Skip Montanaro28067822000-07-06 18:55:12 +0000141{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000142 char *s = NULL;
143 if (!PyArg_ParseTuple(args, "|z:write_history_file", &s))
144 return NULL;
145 errno = write_history(s);
146 if (!errno && _history_length >= 0)
147 history_truncate_file(s, _history_length);
148 if (errno)
149 return PyErr_SetFromErrno(PyExc_IOError);
150 Py_RETURN_NONE;
Skip Montanaro28067822000-07-06 18:55:12 +0000151}
152
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000153PyDoc_STRVAR(doc_write_history_file,
154"write_history_file([filename]) -> None\n\
Skip Montanaro28067822000-07-06 18:55:12 +0000155Save a readline history file.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000156The default filename is ~/.history.");
Skip Montanaro28067822000-07-06 18:55:12 +0000157
158
Guido van Rossum74f31432003-01-07 20:01:29 +0000159/* Set history length */
160
161static PyObject*
162set_history_length(PyObject *self, PyObject *args)
163{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000164 int length = _history_length;
165 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
166 return NULL;
167 _history_length = length;
168 Py_RETURN_NONE;
Guido van Rossum74f31432003-01-07 20:01:29 +0000169}
170
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000171PyDoc_STRVAR(set_history_length_doc,
172"set_history_length(length) -> None\n\
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000173set the maximal number of items which will be written to\n\
174the history file. A negative length is used to inhibit\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000175history truncation.");
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000176
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000177
Guido van Rossum74f31432003-01-07 20:01:29 +0000178/* Get history length */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000179
180static PyObject*
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000181get_history_length(PyObject *self, PyObject *noarg)
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000182{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000183 return PyInt_FromLong(_history_length);
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000184}
185
Guido van Rossum74f31432003-01-07 20:01:29 +0000186PyDoc_STRVAR(get_history_length_doc,
187"get_history_length() -> int\n\
188return the maximum number of items that will be written to\n\
189the history file.");
190
191
Martin v. Löwis0daad592001-09-30 21:09:59 +0000192/* Generic hook function setter */
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000193
Martin v. Löwis0daad592001-09-30 21:09:59 +0000194static PyObject *
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000195set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000196{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000197 PyObject *function = Py_None;
198 char buf[80];
199 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
200 if (!PyArg_ParseTuple(args, buf, &function))
201 return NULL;
202 if (function == Py_None) {
203 Py_XDECREF(*hook_var);
204 *hook_var = NULL;
205 }
206 else if (PyCallable_Check(function)) {
207 PyObject *tmp = *hook_var;
208 Py_INCREF(function);
209 *hook_var = function;
210 Py_XDECREF(tmp);
211 }
212 else {
213 PyOS_snprintf(buf, sizeof(buf),
214 "set_%.50s(func): argument not callable",
215 funcname);
216 PyErr_SetString(PyExc_TypeError, buf);
217 return NULL;
218 }
219 Py_RETURN_NONE;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000220}
221
Guido van Rossum74f31432003-01-07 20:01:29 +0000222
Martin v. Löwis0daad592001-09-30 21:09:59 +0000223/* Exported functions to specify hook functions in Python */
224
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000225static PyObject *completion_display_matches_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000226static PyObject *startup_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000227
228#ifdef HAVE_RL_PRE_INPUT_HOOK
229static PyObject *pre_input_hook = NULL;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000230#endif
231
232static PyObject *
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000233set_completion_display_matches_hook(PyObject *self, PyObject *args)
234{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000235 PyObject *result = set_hook("completion_display_matches_hook",
236 &completion_display_matches_hook, args);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000237#ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000238 /* We cannot set this hook globally, since it replaces the
239 default completion display. */
240 rl_completion_display_matches_hook =
241 completion_display_matches_hook ?
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000242#if defined(_RL_FUNCTION_TYPEDEF)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000243 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000244#else
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000245 (VFunction *)on_completion_display_matches_hook : 0;
Martin v. Löwisbb86d832008-11-04 20:40:09 +0000246#endif
Martin v. Löwisf3548942007-11-12 04:53:02 +0000247#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000248 return result;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000249
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000250}
251
252PyDoc_STRVAR(doc_set_completion_display_matches_hook,
253"set_completion_display_matches_hook([function]) -> None\n\
254Set or remove the completion display function.\n\
255The function is called as\n\
256 function(substitution, [matches], longest_match_length)\n\
257once each time matches need to be displayed.");
258
259static PyObject *
Martin v. Löwis0daad592001-09-30 21:09:59 +0000260set_startup_hook(PyObject *self, PyObject *args)
261{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000262 return set_hook("startup_hook", &startup_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000263}
264
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000265PyDoc_STRVAR(doc_set_startup_hook,
266"set_startup_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000267Set or remove the startup_hook function.\n\
268The function is called with no arguments just\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000269before readline prints the first prompt.");
Martin v. Löwis0daad592001-09-30 21:09:59 +0000270
Guido van Rossum74f31432003-01-07 20:01:29 +0000271
Martin v. Löwis0daad592001-09-30 21:09:59 +0000272#ifdef HAVE_RL_PRE_INPUT_HOOK
Guido van Rossum74f31432003-01-07 20:01:29 +0000273
274/* Set pre-input hook */
275
Martin v. Löwis0daad592001-09-30 21:09:59 +0000276static PyObject *
277set_pre_input_hook(PyObject *self, PyObject *args)
278{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000279 return set_hook("pre_input_hook", &pre_input_hook, args);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000280}
281
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000282PyDoc_STRVAR(doc_set_pre_input_hook,
283"set_pre_input_hook([function]) -> None\n\
Martin v. Löwis0daad592001-09-30 21:09:59 +0000284Set or remove the pre_input_hook function.\n\
285The function is called with no arguments after the first prompt\n\
286has been printed and just before readline starts reading input\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000287characters.");
Guido van Rossum74f31432003-01-07 20:01:29 +0000288
Martin v. Löwis0daad592001-09-30 21:09:59 +0000289#endif
Skip Montanaro49bd24d2000-07-19 16:54:53 +0000290
Guido van Rossum74f31432003-01-07 20:01:29 +0000291
Guido van Rossum290900a1997-09-26 21:51:21 +0000292/* Exported function to specify a word completer in Python */
293
294static PyObject *completer = NULL;
Guido van Rossum290900a1997-09-26 21:51:21 +0000295
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000296static PyObject *begidx = NULL;
297static PyObject *endidx = NULL;
298
Guido van Rossum74f31432003-01-07 20:01:29 +0000299
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000300/* Get the completion type for the scope of the tab-completion */
301static PyObject *
302get_completion_type(PyObject *self, PyObject *noarg)
303{
304 return PyInt_FromLong(rl_completion_type);
305}
306
307PyDoc_STRVAR(doc_get_completion_type,
308"get_completion_type() -> int\n\
309Get the type of completion being attempted.");
310
311
Guido van Rossum74f31432003-01-07 20:01:29 +0000312/* Get the beginning index for the scope of the tab-completion */
313
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000314static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000315get_begidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000316{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000317 Py_INCREF(begidx);
318 return begidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000319}
320
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000321PyDoc_STRVAR(doc_get_begidx,
322"get_begidx() -> int\n\
323get the beginning index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000324
Guido van Rossum74f31432003-01-07 20:01:29 +0000325
326/* Get the ending index for the scope of the tab-completion */
327
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000328static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000329get_endidx(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000330{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000331 Py_INCREF(endidx);
332 return endidx;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000333}
334
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000335PyDoc_STRVAR(doc_get_endidx,
336"get_endidx() -> int\n\
337get the ending index of the readline tab-completion scope");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000338
339
Guido van Rossum74f31432003-01-07 20:01:29 +0000340/* Set the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000341
342static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000343set_completer_delims(PyObject *self, PyObject *args)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000344{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000345 char *break_chars;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000346
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000347 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
348 return NULL;
349 }
350 free((void*)rl_completer_word_break_characters);
351 rl_completer_word_break_characters = strdup(break_chars);
352 Py_RETURN_NONE;
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000353}
354
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000355PyDoc_STRVAR(doc_set_completer_delims,
356"set_completer_delims(string) -> None\n\
357set the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000358
Mark Dickinson4ee98532010-08-03 16:18:39 +0000359/* _py_free_history_entry: Utility function to free a history entry. */
360
361#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
362
363/* Readline version >= 5.0 introduced a timestamp field into the history entry
364 structure; this needs to be freed to avoid a memory leak. This version of
365 readline also introduced the handy 'free_history_entry' function, which
366 takes care of the timestamp. */
367
368static void
369_py_free_history_entry(HIST_ENTRY *entry)
370{
371 histdata_t data = free_history_entry(entry);
372 free(data);
373}
374
375#else
376
377/* No free_history_entry function; free everything manually. */
378
379static void
380_py_free_history_entry(HIST_ENTRY *entry)
381{
382 if (entry->line)
383 free((void *)entry->line);
384 if (entry->data)
385 free(entry->data);
386 free(entry);
387}
388
389#endif
390
Skip Montanaroe5069012004-08-15 14:32:06 +0000391static PyObject *
392py_remove_history(PyObject *self, PyObject *args)
393{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000394 int entry_number;
395 HIST_ENTRY *entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000396
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000397 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
398 return NULL;
399 if (entry_number < 0) {
400 PyErr_SetString(PyExc_ValueError,
401 "History index cannot be negative");
402 return NULL;
403 }
404 entry = remove_history(entry_number);
405 if (!entry) {
406 PyErr_Format(PyExc_ValueError,
407 "No history item at position %d",
408 entry_number);
409 return NULL;
410 }
411 /* free memory allocated for the history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000412 _py_free_history_entry(entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000413 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000414}
415
416PyDoc_STRVAR(doc_remove_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000417"remove_history_item(pos) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000418remove history item given by its position");
419
420static PyObject *
421py_replace_history(PyObject *self, PyObject *args)
422{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000423 int entry_number;
424 char *line;
425 HIST_ENTRY *old_entry;
Skip Montanaroe5069012004-08-15 14:32:06 +0000426
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000427 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
428 &line)) {
429 return NULL;
430 }
431 if (entry_number < 0) {
432 PyErr_SetString(PyExc_ValueError,
433 "History index cannot be negative");
434 return NULL;
435 }
436 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
437 if (!old_entry) {
438 PyErr_Format(PyExc_ValueError,
439 "No history item at position %d",
440 entry_number);
441 return NULL;
442 }
443 /* free memory allocated for the old history entry */
Mark Dickinson4ee98532010-08-03 16:18:39 +0000444 _py_free_history_entry(old_entry);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000445 Py_RETURN_NONE;
Skip Montanaroe5069012004-08-15 14:32:06 +0000446}
447
448PyDoc_STRVAR(doc_replace_history,
Skip Montanaro6c06cd52004-08-16 16:15:13 +0000449"replace_history_item(pos, line) -> None\n\
Skip Montanaroe5069012004-08-15 14:32:06 +0000450replaces history item given by its position with contents of line");
Guido van Rossum74f31432003-01-07 20:01:29 +0000451
452/* Add a line to the history buffer */
453
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000454static PyObject *
455py_add_history(PyObject *self, PyObject *args)
456{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000457 char *line;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000458
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000459 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
460 return NULL;
461 }
462 add_history(line);
463 Py_RETURN_NONE;
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000464}
465
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000466PyDoc_STRVAR(doc_add_history,
467"add_history(string) -> None\n\
468add a line to the history buffer");
Guido van Rossumb6c1d522001-10-19 01:18:43 +0000469
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000470
Guido van Rossum74f31432003-01-07 20:01:29 +0000471/* Get the tab-completion word-delimiters that readline uses */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000472
473static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000474get_completer_delims(PyObject *self, PyObject *noarg)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000475{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000476 return PyString_FromString(rl_completer_word_break_characters);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000477}
Guido van Rossum74f31432003-01-07 20:01:29 +0000478
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000479PyDoc_STRVAR(doc_get_completer_delims,
480"get_completer_delims() -> string\n\
481get the readline word delimiters for tab-completion");
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000482
Guido van Rossum74f31432003-01-07 20:01:29 +0000483
484/* Set the completer function */
485
Guido van Rossum290900a1997-09-26 21:51:21 +0000486static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000487set_completer(PyObject *self, PyObject *args)
Guido van Rossum290900a1997-09-26 21:51:21 +0000488{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000489 return set_hook("completer", &completer, args);
Guido van Rossum290900a1997-09-26 21:51:21 +0000490}
491
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000492PyDoc_STRVAR(doc_set_completer,
493"set_completer([function]) -> None\n\
Guido van Rossum290900a1997-09-26 21:51:21 +0000494Set or remove the completer function.\n\
495The function is called as function(text, state),\n\
Fred Drake52d55a32001-08-01 21:44:14 +0000496for state in 0, 1, 2, ..., until it returns a non-string.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000497It should return the next possible completion starting with 'text'.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000498
Guido van Rossum74f31432003-01-07 20:01:29 +0000499
Michael W. Hudson796df152003-01-30 10:12:51 +0000500static PyObject *
Neal Norwitzd9efdc52003-03-01 15:19:41 +0000501get_completer(PyObject *self, PyObject *noargs)
Michael W. Hudson796df152003-01-30 10:12:51 +0000502{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000503 if (completer == NULL) {
504 Py_RETURN_NONE;
505 }
506 Py_INCREF(completer);
507 return completer;
Michael W. Hudson796df152003-01-30 10:12:51 +0000508}
509
510PyDoc_STRVAR(doc_get_completer,
511"get_completer() -> function\n\
512\n\
513Returns current completer function.");
514
Mark Dickinson0f981282010-08-03 16:54:19 +0000515/* Private function to get current length of history. XXX It may be
516 * possible to replace this with a direct use of history_length instead,
517 * but it's not clear whether BSD's libedit keeps history_length up to date.
518 * See issue #8065.*/
519
520static int
521_py_get_history_length(void)
522{
523 HISTORY_STATE *hist_st = history_get_history_state();
524 int length = hist_st->length;
525 /* the history docs don't say so, but the address of hist_st changes each
526 time history_get_history_state is called which makes me think it's
527 freshly malloc'd memory... on the other hand, the address of the last
528 line stays the same as long as history isn't extended, so it appears to
529 be malloc'd but managed by the history package... */
530 free(hist_st);
531 return length;
532}
533
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000534/* Exported function to get any element of history */
535
536static PyObject *
537get_history_item(PyObject *self, PyObject *args)
538{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000539 int idx = 0;
540 HIST_ENTRY *hist_ent;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000541
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000542 if (!PyArg_ParseTuple(args, "i:index", &idx))
543 return NULL;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000544#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000545 if (using_libedit_emulation) {
546 /* Libedit emulation uses 0-based indexes,
547 * the real one uses 1-based indexes,
548 * adjust the index to ensure that Python
549 * code doesn't have to worry about the
550 * difference.
551 */
Mark Dickinson0f981282010-08-03 16:54:19 +0000552 int length = _py_get_history_length();
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000553 idx --;
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000554
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000555 /*
556 * Apple's readline emulation crashes when
557 * the index is out of range, therefore
558 * test for that and fail gracefully.
559 */
Mark Dickinson0f981282010-08-03 16:54:19 +0000560 if (idx < 0 || idx >= length) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000561 Py_RETURN_NONE;
562 }
563 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +0000564#endif /* __APPLE__ */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000565 if ((hist_ent = history_get(idx)))
566 return PyString_FromString(hist_ent->line);
567 else {
568 Py_RETURN_NONE;
569 }
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000570}
571
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000572PyDoc_STRVAR(doc_get_history_item,
573"get_history_item() -> string\n\
574return the current contents of history item at index.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000575
Guido van Rossum74f31432003-01-07 20:01:29 +0000576
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000577/* Exported function to get current length of history */
578
579static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000580get_current_history_length(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000581{
Mark Dickinson0f981282010-08-03 16:54:19 +0000582 return PyInt_FromLong((long)_py_get_history_length());
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000583}
584
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000585PyDoc_STRVAR(doc_get_current_history_length,
586"get_current_history_length() -> integer\n\
587return the current (not the maximum) length of history.");
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000588
Guido van Rossum74f31432003-01-07 20:01:29 +0000589
Guido van Rossum79378ff1997-10-07 14:53:21 +0000590/* Exported function to read the current line buffer */
591
592static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000593get_line_buffer(PyObject *self, PyObject *noarg)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000594{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000595 return PyString_FromString(rl_line_buffer);
Guido van Rossum79378ff1997-10-07 14:53:21 +0000596}
597
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000598PyDoc_STRVAR(doc_get_line_buffer,
599"get_line_buffer() -> string\n\
600return the current contents of the line buffer.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000601
Guido van Rossum74f31432003-01-07 20:01:29 +0000602
Martin v. Löwise7a97962003-09-20 16:08:33 +0000603#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
604
605/* Exported function to clear the current history */
606
607static PyObject *
608py_clear_history(PyObject *self, PyObject *noarg)
609{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000610 clear_history();
611 Py_RETURN_NONE;
Martin v. Löwise7a97962003-09-20 16:08:33 +0000612}
613
614PyDoc_STRVAR(doc_clear_history,
615"clear_history() -> None\n\
616Clear the current readline history.");
617#endif
618
619
Guido van Rossum79378ff1997-10-07 14:53:21 +0000620/* Exported function to insert text into the line buffer */
621
622static PyObject *
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000623insert_text(PyObject *self, PyObject *args)
Guido van Rossum79378ff1997-10-07 14:53:21 +0000624{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000625 char *s;
626 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
627 return NULL;
628 rl_insert_text(s);
629 Py_RETURN_NONE;
Guido van Rossum79378ff1997-10-07 14:53:21 +0000630}
631
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000632PyDoc_STRVAR(doc_insert_text,
633"insert_text(string) -> None\n\
634Insert text into the command line.");
Guido van Rossum79378ff1997-10-07 14:53:21 +0000635
Guido van Rossum74f31432003-01-07 20:01:29 +0000636
637/* Redisplay the line buffer */
638
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000639static PyObject *
Michael W. Hudson0e986a32003-01-30 14:17:16 +0000640redisplay(PyObject *self, PyObject *noarg)
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000641{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000642 rl_redisplay();
643 Py_RETURN_NONE;
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000644}
645
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000646PyDoc_STRVAR(doc_redisplay,
647"redisplay() -> None\n\
Neil Schemenauer0f75e0d2002-03-24 01:09:04 +0000648Change what's displayed on the screen to reflect the current\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000649contents of the line buffer.");
Guido van Rossum290900a1997-09-26 21:51:21 +0000650
Guido van Rossum74f31432003-01-07 20:01:29 +0000651
Guido van Rossum290900a1997-09-26 21:51:21 +0000652/* Table of functions exported by the module */
Guido van Rossum0969d361997-08-05 21:27:50 +0000653
654static struct PyMethodDef readline_methods[] =
Guido van Rossum290900a1997-09-26 21:51:21 +0000655{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000656 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
657 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
658 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
659 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
660 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
661 {"read_history_file", read_history_file,
662 METH_VARARGS, doc_read_history_file},
663 {"write_history_file", write_history_file,
664 METH_VARARGS, doc_write_history_file},
665 {"get_history_item", get_history_item,
666 METH_VARARGS, doc_get_history_item},
667 {"get_current_history_length", (PyCFunction)get_current_history_length,
668 METH_NOARGS, doc_get_current_history_length},
669 {"set_history_length", set_history_length,
670 METH_VARARGS, set_history_length_doc},
671 {"get_history_length", get_history_length,
672 METH_NOARGS, get_history_length_doc},
673 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
674 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
675 {"get_completion_type", get_completion_type,
676 METH_NOARGS, doc_get_completion_type},
677 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
678 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000679
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000680 {"set_completer_delims", set_completer_delims,
681 METH_VARARGS, doc_set_completer_delims},
682 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
683 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
684 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
685 {"get_completer_delims", get_completer_delims,
686 METH_NOARGS, doc_get_completer_delims},
Guido van Rossum74f31432003-01-07 20:01:29 +0000687
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000688 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
689 METH_VARARGS, doc_set_completion_display_matches_hook},
690 {"set_startup_hook", set_startup_hook,
691 METH_VARARGS, doc_set_startup_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000692#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000693 {"set_pre_input_hook", set_pre_input_hook,
694 METH_VARARGS, doc_set_pre_input_hook},
Martin v. Löwis0daad592001-09-30 21:09:59 +0000695#endif
Martin v. Löwise7a97962003-09-20 16:08:33 +0000696#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000697 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
Martin v. Löwise7a97962003-09-20 16:08:33 +0000698#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000699 {0, 0}
Guido van Rossum0969d361997-08-05 21:27:50 +0000700};
701
Guido van Rossum05ac4492003-01-07 20:04:12 +0000702
Martin v. Löwis0daad592001-09-30 21:09:59 +0000703/* C function to call the Python hooks. */
704
705static int
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000706on_hook(PyObject *func)
Martin v. Löwis0daad592001-09-30 21:09:59 +0000707{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000708 int result = 0;
709 if (func != NULL) {
710 PyObject *r;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000711#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000712 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000713#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000714 r = PyObject_CallFunction(func, NULL);
715 if (r == NULL)
716 goto error;
717 if (r == Py_None)
718 result = 0;
719 else {
720 result = PyInt_AsLong(r);
721 if (result == -1 && PyErr_Occurred())
722 goto error;
723 }
724 Py_DECREF(r);
725 goto done;
726 error:
727 PyErr_Clear();
728 Py_XDECREF(r);
729 done:
Christian Heimes1bc4af42007-11-12 18:58:08 +0000730#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000731 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000732#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000733 return result;
734 }
735 return result;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000736}
737
738static int
739on_startup_hook(void)
740{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000741 return on_hook(startup_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000742}
743
744#ifdef HAVE_RL_PRE_INPUT_HOOK
745static int
746on_pre_input_hook(void)
747{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000748 return on_hook(pre_input_hook);
Martin v. Löwis0daad592001-09-30 21:09:59 +0000749}
750#endif
751
Guido van Rossum05ac4492003-01-07 20:04:12 +0000752
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000753/* C function to call the Python completion_display_matches */
754
755static void
756on_completion_display_matches_hook(char **matches,
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000757 int num_matches, int max_length)
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000758{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000759 int i;
760 PyObject *m=NULL, *s=NULL, *r=NULL;
Christian Heimes1bc4af42007-11-12 18:58:08 +0000761#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000762 PyGILState_STATE gilstate = PyGILState_Ensure();
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000763#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000764 m = PyList_New(num_matches);
765 if (m == NULL)
766 goto error;
767 for (i = 0; i < num_matches; i++) {
768 s = PyString_FromString(matches[i+1]);
769 if (s == NULL)
770 goto error;
771 if (PyList_SetItem(m, i, s) == -1)
772 goto error;
773 }
Martin v. Löwisf3548942007-11-12 04:53:02 +0000774
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000775 r = PyObject_CallFunction(completion_display_matches_hook,
776 "sOi", matches[0], m, max_length);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000777
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000778 Py_DECREF(m); m=NULL;
Brett Cannon23b581a2010-05-04 00:52:41 +0000779
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000780 if (r == NULL ||
781 (r != Py_None && PyInt_AsLong(r) == -1 && PyErr_Occurred())) {
782 goto error;
783 }
784 Py_XDECREF(r); r=NULL;
Martin v. Löwisf3548942007-11-12 04:53:02 +0000785
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000786 if (0) {
787 error:
788 PyErr_Clear();
789 Py_XDECREF(m);
790 Py_XDECREF(r);
791 }
Christian Heimes1bc4af42007-11-12 18:58:08 +0000792#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000793 PyGILState_Release(gilstate);
Martin v. Löwisf3548942007-11-12 04:53:02 +0000794#endif
Martin v. Löwis58bd49f2007-09-04 13:13:14 +0000795}
796
797
Guido van Rossum290900a1997-09-26 21:51:21 +0000798/* C function to call the Python completer. */
Guido van Rossum0969d361997-08-05 21:27:50 +0000799
Guido van Rossum290900a1997-09-26 21:51:21 +0000800static char *
Neal Norwitzbd538702007-04-19 05:52:37 +0000801on_completion(const char *text, int state)
Guido van Rossum0969d361997-08-05 21:27:50 +0000802{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000803 char *result = NULL;
804 if (completer != NULL) {
805 PyObject *r;
Brett Cannon23b581a2010-05-04 00:52:41 +0000806#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000807 PyGILState_STATE gilstate = PyGILState_Ensure();
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000808#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000809 rl_attempted_completion_over = 1;
810 r = PyObject_CallFunction(completer, "si", text, state);
811 if (r == NULL)
812 goto error;
813 if (r == Py_None) {
814 result = NULL;
815 }
816 else {
817 char *s = PyString_AsString(r);
818 if (s == NULL)
819 goto error;
820 result = strdup(s);
821 }
822 Py_DECREF(r);
823 goto done;
824 error:
825 PyErr_Clear();
826 Py_XDECREF(r);
827 done:
Brett Cannon23b581a2010-05-04 00:52:41 +0000828#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000829 PyGILState_Release(gilstate);
Michael W. Hudsonda6242c2005-03-30 11:21:53 +0000830#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000831 return result;
832 }
833 return result;
Guido van Rossum0969d361997-08-05 21:27:50 +0000834}
835
Guido van Rossum290900a1997-09-26 21:51:21 +0000836
Guido van Rossum6d0d3652003-01-07 20:34:19 +0000837/* A more flexible constructor that saves the "begidx" and "endidx"
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000838 * before calling the normal completer */
839
Neal Norwitzc355f0c2003-02-21 00:30:18 +0000840static char **
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000841flex_complete(char *text, int start, int end)
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000842{
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000843#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000844 rl_completion_append_character ='\0';
Antoine Pitroud9ff74e2009-10-26 19:16:46 +0000845#endif
846#ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000847 rl_completion_suppress_append = 0;
Antoine Pitrou119cdef2009-10-19 18:17:18 +0000848#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000849 Py_XDECREF(begidx);
850 Py_XDECREF(endidx);
851 begidx = PyInt_FromLong((long) start);
852 endidx = PyInt_FromLong((long) end);
853 return completion_matches(text, *on_completion);
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000854}
855
Guido van Rossum05ac4492003-01-07 20:04:12 +0000856
Guido van Rossum290900a1997-09-26 21:51:21 +0000857/* Helper to initialize GNU readline properly. */
858
859static void
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000860setup_readline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +0000861{
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000862#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000863 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
864 if (!saved_locale)
865 Py_FatalError("not enough memory to save locale");
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000866#endif
867
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000868 using_history();
Skip Montanaroa0392742002-06-11 14:32:46 +0000869
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000870 rl_readline_name = "python";
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000871#if defined(PYOS_OS2) && defined(PYCC_GCC)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000872 /* Allow $if term= in .inputrc to work */
873 rl_terminal_name = getenv("TERM");
Andrew MacIntyre7bf68332002-03-03 02:59:16 +0000874#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000875 /* Force rebind of TAB to insert-tab */
876 rl_bind_key('\t', rl_insert);
877 /* Bind both ESC-TAB and ESC-ESC to the completion function */
878 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
879 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
880 /* Set our hook functions */
881 rl_startup_hook = (Function *)on_startup_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000882#ifdef HAVE_RL_PRE_INPUT_HOOK
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000883 rl_pre_input_hook = (Function *)on_pre_input_hook;
Martin v. Löwis0daad592001-09-30 21:09:59 +0000884#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000885 /* Set our completion function */
886 rl_attempted_completion_function = (CPPFunction *)flex_complete;
887 /* Set Python word break characters */
888 rl_completer_word_break_characters =
889 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
890 /* All nonalphanums except '.' */
Guido van Rossumb960e7a1999-11-18 17:51:02 +0000891
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000892 begidx = PyInt_FromLong(0L);
893 endidx = PyInt_FromLong(0L);
894 /* Initialize (allows .inputrc to override)
895 *
896 * XXX: A bug in the readline-2.2 library causes a memory leak
897 * inside this function. Nothing we can do about it.
898 */
899 rl_initialize();
Guido van Rossum60c8a3a2002-10-09 21:27:33 +0000900
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000901 RESTORE_LOCALE(saved_locale)
Guido van Rossum290900a1997-09-26 21:51:21 +0000902}
903
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000904/* Wrapper around GNU readline that handles signals differently. */
905
906
907#if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
908
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000909static char *completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000910static void
911rlhandler(char *text)
912{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000913 completed_input_string = text;
914 rl_callback_handler_remove();
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000915}
916
917extern PyThreadState* _PyOS_ReadlineTState;
918
919static char *
920readline_until_enter_or_signal(char *prompt, int *signal)
921{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000922 char * not_done_reading = "";
923 fd_set selectset;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000924
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000925 *signal = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000926#ifdef HAVE_RL_CATCH_SIGNAL
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000927 rl_catch_signals = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000928#endif
929
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000930 rl_callback_handler_install (prompt, rlhandler);
931 FD_ZERO(&selectset);
Brett Cannon23b581a2010-05-04 00:52:41 +0000932
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000933 completed_input_string = not_done_reading;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000934
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000935 while (completed_input_string == not_done_reading) {
936 int has_input = 0;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000937
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000938 while (!has_input)
939 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
Andrew M. Kuchling62e475b2006-09-07 13:59:38 +0000940
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000941 /* [Bug #1552726] Only limit the pause if an input hook has been
942 defined. */
943 struct timeval *timeoutp = NULL;
944 if (PyOS_InputHook)
945 timeoutp = &timeout;
946 FD_SET(fileno(rl_instream), &selectset);
947 /* select resets selectset if no input was available */
948 has_input = select(fileno(rl_instream) + 1, &selectset,
949 NULL, NULL, timeoutp);
950 if(PyOS_InputHook) PyOS_InputHook();
951 }
Michael W. Hudson8da2b012004-10-07 13:46:33 +0000952
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000953 if(has_input > 0) {
954 rl_callback_read_char();
955 }
956 else if (errno == EINTR) {
957 int s;
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000958#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000959 PyEval_RestoreThread(_PyOS_ReadlineTState);
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000960#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000961 s = PyErr_CheckSignals();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000962#ifdef WITH_THREAD
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000963 PyEval_SaveThread();
Michael W. Hudsone3afc592005-04-07 10:11:19 +0000964#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000965 if (s < 0) {
966 rl_free_line_state();
967 rl_cleanup_after_signal();
968 rl_callback_handler_remove();
969 *signal = 1;
970 completed_input_string = NULL;
971 }
972 }
973 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000974
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000975 return completed_input_string;
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000976}
977
978
979#else
Guido van Rossum290900a1997-09-26 21:51:21 +0000980
981/* Interrupt handler */
982
983static jmp_buf jbuf;
984
Guido van Rossum0969d361997-08-05 21:27:50 +0000985/* ARGSUSED */
Tim Peters4f1b2082000-07-23 21:18:09 +0000986static void
Peter Schneider-Kampa788a7f2000-07-10 09:57:19 +0000987onintr(int sig)
Guido van Rossum0969d361997-08-05 21:27:50 +0000988{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000989 longjmp(jbuf, 1);
Guido van Rossum0969d361997-08-05 21:27:50 +0000990}
991
Guido van Rossum290900a1997-09-26 21:51:21 +0000992
Guido van Rossum0969d361997-08-05 21:27:50 +0000993static char *
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000994readline_until_enter_or_signal(char *prompt, int *signal)
Guido van Rossum0969d361997-08-05 21:27:50 +0000995{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000996 PyOS_sighandler_t old_inthandler;
997 char *p;
Brett Cannon23b581a2010-05-04 00:52:41 +0000998
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000999 *signal = 0;
Guido van Rossum74f31432003-01-07 20:01:29 +00001000
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001001 old_inthandler = PyOS_setsig(SIGINT, onintr);
1002 if (setjmp(jbuf)) {
Guido van Rossum0969d361997-08-05 21:27:50 +00001003#ifdef HAVE_SIGRELSE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001004 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
1005 sigrelse(SIGINT);
Guido van Rossum0969d361997-08-05 21:27:50 +00001006#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001007 PyOS_setsig(SIGINT, old_inthandler);
1008 *signal = 1;
1009 return NULL;
1010 }
1011 rl_event_hook = PyOS_InputHook;
1012 p = readline(prompt);
1013 PyOS_setsig(SIGINT, old_inthandler);
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001014
1015 return p;
1016}
1017#endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
1018
1019
1020static char *
1021call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
1022{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001023 size_t n;
1024 char *p, *q;
1025 int signal;
Neal Norwitz1fa040b2004-08-25 01:20:18 +00001026
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001027#ifdef SAVE_LOCALE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001028 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1029 if (!saved_locale)
1030 Py_FatalError("not enough memory to save locale");
1031 setlocale(LC_CTYPE, "");
Martin v. Löwis78a8acc2004-08-18 13:34:00 +00001032#endif
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001033
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001034 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1035 rl_instream = sys_stdin;
1036 rl_outstream = sys_stdout;
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001037#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001038 rl_prep_terminal (1);
Guido van Rossumfaf5e4d2002-12-30 16:25:41 +00001039#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001040 }
Guido van Rossum74f31432003-01-07 20:01:29 +00001041
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001042 p = readline_until_enter_or_signal(prompt, &signal);
Brett Cannon23b581a2010-05-04 00:52:41 +00001043
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001044 /* we got an interrupt signal */
1045 if (signal) {
1046 RESTORE_LOCALE(saved_locale)
1047 return NULL;
1048 }
Guido van Rossumb18618d2000-05-03 23:44:39 +00001049
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001050 /* We got an EOF, return a empty string. */
1051 if (p == NULL) {
1052 p = PyMem_Malloc(1);
1053 if (p != NULL)
1054 *p = '\0';
1055 RESTORE_LOCALE(saved_locale)
1056 return p;
1057 }
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001058
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001059 /* we have a valid line */
1060 n = strlen(p);
1061 if (n > 0) {
1062 const char *line;
Mark Dickinson0f981282010-08-03 16:54:19 +00001063 int length = _py_get_history_length();
1064 if (length > 0)
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001065#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001066 if (using_libedit_emulation) {
1067 /*
1068 * Libedit's emulation uses 0-based indexes,
1069 * the real readline uses 1-based indexes.
1070 */
Mark Dickinson0f981282010-08-03 16:54:19 +00001071 line = history_get(length - 1)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001072 } else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001073#endif /* __APPLE__ */
Mark Dickinson0f981282010-08-03 16:54:19 +00001074 line = history_get(length)->line;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001075 else
1076 line = "";
1077 if (strcmp(p, line))
1078 add_history(p);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001079 }
1080 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1081 release the original. */
1082 q = p;
1083 p = PyMem_Malloc(n+2);
1084 if (p != NULL) {
1085 strncpy(p, q, n);
1086 p[n] = '\n';
1087 p[n+1] = '\0';
1088 }
1089 free(q);
1090 RESTORE_LOCALE(saved_locale)
1091 return p;
Guido van Rossum0969d361997-08-05 21:27:50 +00001092}
1093
Guido van Rossum290900a1997-09-26 21:51:21 +00001094
1095/* Initialize the module */
1096
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001097PyDoc_STRVAR(doc_module,
1098"Importing this module enables command line editing using GNU readline.");
Guido van Rossum290900a1997-09-26 21:51:21 +00001099
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001100#ifdef __APPLE__
1101PyDoc_STRVAR(doc_module_le,
1102"Importing this module enables command line editing using libedit readline.");
1103#endif /* __APPLE__ */
1104
Mark Hammondfe51c6d2002-08-02 02:27:13 +00001105PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +00001106initreadline(void)
Guido van Rossum290900a1997-09-26 21:51:21 +00001107{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001108 PyObject *m;
Guido van Rossum290900a1997-09-26 21:51:21 +00001109
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001110#ifdef __APPLE__
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001111 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1112 using_libedit_emulation = 1;
1113 }
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001114
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001115 if (using_libedit_emulation)
1116 m = Py_InitModule4("readline", readline_methods, doc_module_le,
1117 (PyObject *)NULL, PYTHON_API_VERSION);
1118 else
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001119
1120#endif /* __APPLE__ */
1121
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001122 m = Py_InitModule4("readline", readline_methods, doc_module,
1123 (PyObject *)NULL, PYTHON_API_VERSION);
1124 if (m == NULL)
1125 return;
Martin v. Löwis566f6af2002-10-26 14:39:10 +00001126
Ronald Oussoren9f20d9d2009-09-20 14:18:15 +00001127
1128
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001129 PyOS_ReadlineFunctionPointer = call_readline;
1130 setup_readline();
Guido van Rossum0969d361997-08-05 21:27:50 +00001131}