1 /* This module makes GNU readline available to Python. It has ideas
2 * contributed by Lee Busby, LLNL, and William Magro, Cornell Theory
3 * Center. The completer interface was inspired by Lele Gaifax. More
4 * recently, it was largely rewritten by Guido van Rossum.
5 */
6
7 /* Standard definitions */
8 #include "Python.h"
9
10 #include <errno.h>
11 #include <signal.h>
12 #include <stddef.h>
13 #include <stdlib.h> // free()
14 #include <sys/time.h>
15
16 #if defined(HAVE_SETLOCALE)
17 /* GNU readline() mistakenly sets the LC_CTYPE locale.
18 * This is evil. Only the user or the app's main() should do this!
19 * We must save and restore the locale around the rl_initialize() call.
20 */
21 #define SAVE_LOCALE
22 #include <locale.h>
23 #endif
24
25 #ifdef SAVE_LOCALE
26 # define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
27 #else
28 # define RESTORE_LOCALE(sl)
29 #endif
30
31 #ifdef WITH_EDITLINE
32 # include <editline/readline.h>
33 #else
34 /* GNU readline definitions */
35 # undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
36 # include <readline/readline.h>
37 # include <readline/history.h>
38 #endif
39
40 #ifdef HAVE_RL_COMPLETION_MATCHES
41 #define completion_matches(x, y) \
42 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
43 #else
44 #if defined(_RL_FUNCTION_TYPEDEF)
45 extern char **completion_matches(char *, rl_compentry_func_t *);
46 #else
47
48 #if !defined(__APPLE__)
49 extern char **completion_matches(char *, CPFunction *);
50 #endif
51 #endif
52 #endif
53
54 /*
55 * It is possible to link the readline module to the readline
56 * emulation library of editline/libedit.
57 *
58 * This emulation library is not 100% API compatible with the "real" readline
59 * and cannot be detected at compile-time,
60 * hence we use a runtime check to detect if the Python readline module is
61 * linked to libedit.
62 *
63 * Currently there is one known API incompatibility:
64 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
65 * index with older versions of libedit's emulation.
66 * - Note that replace_history and remove_history use a 0-based index
67 * with both implementations.
68 */
69 static int using_libedit_emulation = 0;
70 static const char libedit_version_tag[] = "EditLine wrapper";
71
72 static int8_t libedit_history_start = 0;
73 static int8_t libedit_append_replace_history_offset = 0;
74
75 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
76 static void
77 on_completion_display_matches_hook(char **matches,
78 int num_matches, int max_length);
79 #endif
80
81 /* Memory allocated for rl_completer_word_break_characters
82 (see issue #17289 for the motivation). */
83 static char *completer_word_break_characters;
84
85 typedef struct {
86 /* Specify hook functions in Python */
87 PyObject *completion_display_matches_hook;
88 PyObject *startup_hook;
89 PyObject *pre_input_hook;
90
91 PyObject *completer; /* Specify a word completer in Python */
92 PyObject *begidx;
93 PyObject *endidx;
94 } readlinestate;
95
96 static inline readlinestate*
get_readline_state(PyObject * module)97 get_readline_state(PyObject *module)
98 {
99 void *state = PyModule_GetState(module);
100 assert(state != NULL);
101 return (readlinestate *)state;
102 }
103
104 /*[clinic input]
105 module readline
106 [clinic start generated code]*/
107 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=ad49da781b9c8721]*/
108
109 static int
readline_clear(PyObject * m)110 readline_clear(PyObject *m)
111 {
112 readlinestate *state = get_readline_state(m);
113 Py_CLEAR(state->completion_display_matches_hook);
114 Py_CLEAR(state->startup_hook);
115 Py_CLEAR(state->pre_input_hook);
116 Py_CLEAR(state->completer);
117 Py_CLEAR(state->begidx);
118 Py_CLEAR(state->endidx);
119 return 0;
120 }
121
122 static int
readline_traverse(PyObject * m,visitproc visit,void * arg)123 readline_traverse(PyObject *m, visitproc visit, void *arg)
124 {
125 readlinestate *state = get_readline_state(m);
126 Py_VISIT(state->completion_display_matches_hook);
127 Py_VISIT(state->startup_hook);
128 Py_VISIT(state->pre_input_hook);
129 Py_VISIT(state->completer);
130 Py_VISIT(state->begidx);
131 Py_VISIT(state->endidx);
132 return 0;
133 }
134
135 static void
readline_free(void * m)136 readline_free(void *m)
137 {
138 readline_clear((PyObject *)m);
139 }
140
141 static PyModuleDef readlinemodule;
142
143 #define readlinestate_global ((readlinestate *)PyModule_GetState(PyState_FindModule(&readlinemodule)))
144
145
146 /* Convert to/from multibyte C strings */
147
148 static PyObject *
encode(PyObject * b)149 encode(PyObject *b)
150 {
151 return PyUnicode_EncodeLocale(b, "surrogateescape");
152 }
153
154 static PyObject *
decode(const char * s)155 decode(const char *s)
156 {
157 return PyUnicode_DecodeLocale(s, "surrogateescape");
158 }
159
160
161 /*
162 Explicitly disable bracketed paste in the interactive interpreter, even if it's
163 set in the inputrc, is enabled by default (eg GNU Readline 8.1), or a user calls
164 readline.read_init_file(). The Python REPL has not implemented bracketed
165 paste support. Also, bracketed mode writes the "\x1b[?2004h" escape sequence
166 into stdout which causes test failures in applications that don't support it.
167 It can still be explicitly enabled by calling readline.parse_and_bind("set
168 enable-bracketed-paste on"). See bpo-42819 for more details.
169
170 This should be removed if bracketed paste mode is implemented (bpo-39820).
171 */
172
173 static void
disable_bracketed_paste(void)174 disable_bracketed_paste(void)
175 {
176 if (!using_libedit_emulation) {
177 rl_variable_bind ("enable-bracketed-paste", "off");
178 }
179 }
180
181 /* Exported function to send one line to readline's init file parser */
182
183 /*[clinic input]
184 readline.parse_and_bind
185
186 string: object
187 /
188
189 Execute the init line provided in the string argument.
190 [clinic start generated code]*/
191
192 static PyObject *
readline_parse_and_bind(PyObject * module,PyObject * string)193 readline_parse_and_bind(PyObject *module, PyObject *string)
194 /*[clinic end generated code: output=1a1ede8afb9546c1 input=8a28a00bb4d61eec]*/
195 {
196 char *copy;
197 PyObject *encoded = encode(string);
198 if (encoded == NULL) {
199 return NULL;
200 }
201 /* Make a copy -- rl_parse_and_bind() modifies its argument */
202 /* Bernard Herzog */
203 copy = PyMem_Malloc(1 + PyBytes_GET_SIZE(encoded));
204 if (copy == NULL) {
205 Py_DECREF(encoded);
206 return PyErr_NoMemory();
207 }
208 strcpy(copy, PyBytes_AS_STRING(encoded));
209 Py_DECREF(encoded);
210 rl_parse_and_bind(copy);
211 PyMem_Free(copy); /* Free the copy */
212 Py_RETURN_NONE;
213 }
214
215 /* Exported function to parse a readline init file */
216
217 /*[clinic input]
218 readline.read_init_file
219
220 filename as filename_obj: object = None
221 /
222
223 Execute a readline initialization file.
224
225 The default filename is the last filename used.
226 [clinic start generated code]*/
227
228 static PyObject *
readline_read_init_file_impl(PyObject * module,PyObject * filename_obj)229 readline_read_init_file_impl(PyObject *module, PyObject *filename_obj)
230 /*[clinic end generated code: output=8e059b676142831e input=4c80c473e448139d]*/
231 {
232 PyObject *filename_bytes;
233 if (filename_obj != Py_None) {
234 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
235 return NULL;
236 errno = rl_read_init_file(PyBytes_AS_STRING(filename_bytes));
237 Py_DECREF(filename_bytes);
238 } else
239 errno = rl_read_init_file(NULL);
240 if (errno)
241 return PyErr_SetFromErrno(PyExc_OSError);
242 disable_bracketed_paste();
243 Py_RETURN_NONE;
244 }
245
246 /* Exported function to load a readline history file */
247
248 /*[clinic input]
249 readline.read_history_file
250
251 filename as filename_obj: object = None
252 /
253
254 Load a readline history file.
255
256 The default filename is ~/.history.
257 [clinic start generated code]*/
258
259 static PyObject *
readline_read_history_file_impl(PyObject * module,PyObject * filename_obj)260 readline_read_history_file_impl(PyObject *module, PyObject *filename_obj)
261 /*[clinic end generated code: output=66a951836fb54fbb input=3d29d755b7e6932e]*/
262 {
263 PyObject *filename_bytes;
264 if (filename_obj != Py_None) {
265 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
266 return NULL;
267 errno = read_history(PyBytes_AS_STRING(filename_bytes));
268 Py_DECREF(filename_bytes);
269 } else
270 errno = read_history(NULL);
271 if (errno)
272 return PyErr_SetFromErrno(PyExc_OSError);
273 Py_RETURN_NONE;
274 }
275
276 static int _history_length = -1; /* do not truncate history by default */
277
278 /* Exported function to save a readline history file */
279
280 /*[clinic input]
281 readline.write_history_file
282
283 filename as filename_obj: object = None
284 /
285
286 Save a readline history file.
287
288 The default filename is ~/.history.
289 [clinic start generated code]*/
290
291 static PyObject *
readline_write_history_file_impl(PyObject * module,PyObject * filename_obj)292 readline_write_history_file_impl(PyObject *module, PyObject *filename_obj)
293 /*[clinic end generated code: output=fbcad13d8ef59ae6 input=28a8e062fe363703]*/
294 {
295 PyObject *filename_bytes;
296 const char *filename;
297 int err;
298 if (filename_obj != Py_None) {
299 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
300 return NULL;
301 filename = PyBytes_AS_STRING(filename_bytes);
302 } else {
303 filename_bytes = NULL;
304 filename = NULL;
305 }
306 errno = err = write_history(filename);
307 if (!err && _history_length >= 0)
308 history_truncate_file(filename, _history_length);
309 Py_XDECREF(filename_bytes);
310 errno = err;
311 if (errno)
312 return PyErr_SetFromErrno(PyExc_OSError);
313 Py_RETURN_NONE;
314 }
315
316 #ifdef HAVE_RL_APPEND_HISTORY
317 /* Exported function to save part of a readline history file */
318
319 /*[clinic input]
320 readline.append_history_file
321
322 nelements: int
323 filename as filename_obj: object = None
324 /
325
326 Append the last nelements items of the history list to file.
327
328 The default filename is ~/.history.
329 [clinic start generated code]*/
330
331 static PyObject *
readline_append_history_file_impl(PyObject * module,int nelements,PyObject * filename_obj)332 readline_append_history_file_impl(PyObject *module, int nelements,
333 PyObject *filename_obj)
334 /*[clinic end generated code: output=5df06fc9da56e4e4 input=784b774db3a4b7c5]*/
335 {
336 PyObject *filename_bytes;
337 const char *filename;
338 int err;
339 if (filename_obj != Py_None) {
340 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
341 return NULL;
342 filename = PyBytes_AS_STRING(filename_bytes);
343 } else {
344 filename_bytes = NULL;
345 filename = NULL;
346 }
347 errno = err = append_history(
348 nelements - libedit_append_replace_history_offset, filename);
349 if (!err && _history_length >= 0)
350 history_truncate_file(filename, _history_length);
351 Py_XDECREF(filename_bytes);
352 errno = err;
353 if (errno)
354 return PyErr_SetFromErrno(PyExc_OSError);
355 Py_RETURN_NONE;
356 }
357 #endif
358
359
360 /* Set history length */
361
362 /*[clinic input]
363 readline.set_history_length
364
365 length: int
366 /
367
368 Set the maximal number of lines which will be written to the history file.
369
370 A negative length is used to inhibit history truncation.
371 [clinic start generated code]*/
372
373 static PyObject *
readline_set_history_length_impl(PyObject * module,int length)374 readline_set_history_length_impl(PyObject *module, int length)
375 /*[clinic end generated code: output=e161a53e45987dc7 input=b8901bf16488b760]*/
376 {
377 _history_length = length;
378 Py_RETURN_NONE;
379 }
380
381 /* Get history length */
382
383 /*[clinic input]
384 readline.get_history_length
385
386 Return the maximum number of lines that will be written to the history file.
387 [clinic start generated code]*/
388
389 static PyObject *
readline_get_history_length_impl(PyObject * module)390 readline_get_history_length_impl(PyObject *module)
391 /*[clinic end generated code: output=83a2eeae35b6d2b9 input=5dce2eeba4327817]*/
392 {
393 return PyLong_FromLong(_history_length);
394 }
395
396 /* Generic hook function setter */
397
398 static PyObject *
set_hook(const char * funcname,PyObject ** hook_var,PyObject * function)399 set_hook(const char *funcname, PyObject **hook_var, PyObject *function)
400 {
401 if (function == Py_None) {
402 Py_CLEAR(*hook_var);
403 }
404 else if (PyCallable_Check(function)) {
405 Py_INCREF(function);
406 Py_XSETREF(*hook_var, function);
407 }
408 else {
409 PyErr_Format(PyExc_TypeError,
410 "set_%.50s(func): argument not callable",
411 funcname);
412 return NULL;
413 }
414 Py_RETURN_NONE;
415 }
416
417 /*[clinic input]
418 readline.set_completion_display_matches_hook
419
420 function: object = None
421 /
422
423 Set or remove the completion display function.
424
425 The function is called as
426 function(substitution, [matches], longest_match_length)
427 once each time matches need to be displayed.
428 [clinic start generated code]*/
429
430 static PyObject *
readline_set_completion_display_matches_hook_impl(PyObject * module,PyObject * function)431 readline_set_completion_display_matches_hook_impl(PyObject *module,
432 PyObject *function)
433 /*[clinic end generated code: output=516e5cb8db75a328 input=4f0bfd5ab0179a26]*/
434 {
435 PyObject *result = set_hook("completion_display_matches_hook",
436 &readlinestate_global->completion_display_matches_hook,
437 function);
438 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
439 /* We cannot set this hook globally, since it replaces the
440 default completion display. */
441 rl_completion_display_matches_hook =
442 readlinestate_global->completion_display_matches_hook ?
443 #if defined(_RL_FUNCTION_TYPEDEF)
444 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
445 #else
446 (VFunction *)on_completion_display_matches_hook : 0;
447 #endif
448 #endif
449 return result;
450
451 }
452
453 /*[clinic input]
454 readline.set_startup_hook
455
456 function: object = None
457 /
458
459 Set or remove the function invoked by the rl_startup_hook callback.
460
461 The function is called with no arguments just
462 before readline prints the first prompt.
463 [clinic start generated code]*/
464
465 static PyObject *
readline_set_startup_hook_impl(PyObject * module,PyObject * function)466 readline_set_startup_hook_impl(PyObject *module, PyObject *function)
467 /*[clinic end generated code: output=02cd0e0c4fa082ad input=7783b4334b26d16d]*/
468 {
469 return set_hook("startup_hook", &readlinestate_global->startup_hook,
470 function);
471 }
472
473 #ifdef HAVE_RL_PRE_INPUT_HOOK
474
475 /* Set pre-input hook */
476
477 /*[clinic input]
478 readline.set_pre_input_hook
479
480 function: object = None
481 /
482
483 Set or remove the function invoked by the rl_pre_input_hook callback.
484
485 The function is called with no arguments after the first prompt
486 has been printed and just before readline starts reading input
487 characters.
488 [clinic start generated code]*/
489
490 static PyObject *
readline_set_pre_input_hook_impl(PyObject * module,PyObject * function)491 readline_set_pre_input_hook_impl(PyObject *module, PyObject *function)
492 /*[clinic end generated code: output=fe1a96505096f464 input=4f3eaeaf7ce1fdbe]*/
493 {
494 return set_hook("pre_input_hook", &readlinestate_global->pre_input_hook,
495 function);
496 }
497 #endif
498
499
500 /* Get the completion type for the scope of the tab-completion */
501
502 /*[clinic input]
503 readline.get_completion_type
504
505 Get the type of completion being attempted.
506 [clinic start generated code]*/
507
508 static PyObject *
readline_get_completion_type_impl(PyObject * module)509 readline_get_completion_type_impl(PyObject *module)
510 /*[clinic end generated code: output=5c54d58a04997c07 input=04b92bc7a82dac91]*/
511 {
512 return PyLong_FromLong(rl_completion_type);
513 }
514
515 /* Get the beginning index for the scope of the tab-completion */
516
517 /*[clinic input]
518 readline.get_begidx
519
520 Get the beginning index of the completion scope.
521 [clinic start generated code]*/
522
523 static PyObject *
readline_get_begidx_impl(PyObject * module)524 readline_get_begidx_impl(PyObject *module)
525 /*[clinic end generated code: output=362616ee8ed1b2b1 input=e083b81c8eb4bac3]*/
526 {
527 Py_INCREF(readlinestate_global->begidx);
528 return readlinestate_global->begidx;
529 }
530
531 /* Get the ending index for the scope of the tab-completion */
532
533 /*[clinic input]
534 readline.get_endidx
535
536 Get the ending index of the completion scope.
537 [clinic start generated code]*/
538
539 static PyObject *
readline_get_endidx_impl(PyObject * module)540 readline_get_endidx_impl(PyObject *module)
541 /*[clinic end generated code: output=7f763350b12d7517 input=d4c7e34a625fd770]*/
542 {
543 Py_INCREF(readlinestate_global->endidx);
544 return readlinestate_global->endidx;
545 }
546
547 /* Set the tab-completion word-delimiters that readline uses */
548
549 /*[clinic input]
550 readline.set_completer_delims
551
552 string: object
553 /
554
555 Set the word delimiters for completion.
556 [clinic start generated code]*/
557
558 static PyObject *
readline_set_completer_delims(PyObject * module,PyObject * string)559 readline_set_completer_delims(PyObject *module, PyObject *string)
560 /*[clinic end generated code: output=4305b266106c4f1f input=ae945337ebd01e20]*/
561 {
562 char *break_chars;
563 PyObject *encoded = encode(string);
564 if (encoded == NULL) {
565 return NULL;
566 }
567 /* Keep a reference to the allocated memory in the module state in case
568 some other module modifies rl_completer_word_break_characters
569 (see issue #17289). */
570 break_chars = strdup(PyBytes_AS_STRING(encoded));
571 Py_DECREF(encoded);
572 if (break_chars) {
573 free(completer_word_break_characters);
574 completer_word_break_characters = break_chars;
575 rl_completer_word_break_characters = break_chars;
576 Py_RETURN_NONE;
577 }
578 else
579 return PyErr_NoMemory();
580 }
581
582 /* _py_free_history_entry: Utility function to free a history entry. */
583
584 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
585
586 /* Readline version >= 5.0 introduced a timestamp field into the history entry
587 structure; this needs to be freed to avoid a memory leak. This version of
588 readline also introduced the handy 'free_history_entry' function, which
589 takes care of the timestamp. */
590
591 static void
_py_free_history_entry(HIST_ENTRY * entry)592 _py_free_history_entry(HIST_ENTRY *entry)
593 {
594 histdata_t data = free_history_entry(entry);
595 free(data);
596 }
597
598 #else
599
600 /* No free_history_entry function; free everything manually. */
601
602 static void
_py_free_history_entry(HIST_ENTRY * entry)603 _py_free_history_entry(HIST_ENTRY *entry)
604 {
605 if (entry->line)
606 free((void *)entry->line);
607 if (entry->data)
608 free(entry->data);
609 free(entry);
610 }
611
612 #endif
613
614 /*[clinic input]
615 readline.remove_history_item
616
617 pos as entry_number: int
618 /
619
620 Remove history item given by its zero-based position.
621 [clinic start generated code]*/
622
623 static PyObject *
readline_remove_history_item_impl(PyObject * module,int entry_number)624 readline_remove_history_item_impl(PyObject *module, int entry_number)
625 /*[clinic end generated code: output=ab114f029208c7e8 input=f248beb720ff1838]*/
626 {
627 HIST_ENTRY *entry;
628
629 if (entry_number < 0) {
630 PyErr_SetString(PyExc_ValueError,
631 "History index cannot be negative");
632 return NULL;
633 }
634 entry = remove_history(entry_number);
635 if (!entry) {
636 PyErr_Format(PyExc_ValueError,
637 "No history item at position %d",
638 entry_number);
639 return NULL;
640 }
641 /* free memory allocated for the history entry */
642 _py_free_history_entry(entry);
643 Py_RETURN_NONE;
644 }
645
646 /*[clinic input]
647 readline.replace_history_item
648
649 pos as entry_number: int
650 line: unicode
651 /
652
653 Replaces history item given by its position with contents of line.
654
655 pos is zero-based.
656 [clinic start generated code]*/
657
658 static PyObject *
readline_replace_history_item_impl(PyObject * module,int entry_number,PyObject * line)659 readline_replace_history_item_impl(PyObject *module, int entry_number,
660 PyObject *line)
661 /*[clinic end generated code: output=f8cec2770ca125eb input=368bb66fe5ee5222]*/
662 {
663 PyObject *encoded;
664 HIST_ENTRY *old_entry;
665
666 if (entry_number < 0) {
667 PyErr_SetString(PyExc_ValueError,
668 "History index cannot be negative");
669 return NULL;
670 }
671 encoded = encode(line);
672 if (encoded == NULL) {
673 return NULL;
674 }
675 old_entry = replace_history_entry(
676 entry_number + libedit_append_replace_history_offset,
677 PyBytes_AS_STRING(encoded), (void *)NULL);
678 Py_DECREF(encoded);
679 if (!old_entry) {
680 PyErr_Format(PyExc_ValueError,
681 "No history item at position %d",
682 entry_number);
683 return NULL;
684 }
685 /* free memory allocated for the old history entry */
686 _py_free_history_entry(old_entry);
687 Py_RETURN_NONE;
688 }
689
690 /* Add a line to the history buffer */
691
692 /*[clinic input]
693 readline.add_history
694
695 string: object
696 /
697
698 Add an item to the history buffer.
699 [clinic start generated code]*/
700
701 static PyObject *
readline_add_history(PyObject * module,PyObject * string)702 readline_add_history(PyObject *module, PyObject *string)
703 /*[clinic end generated code: output=b107b7e8106e803d input=e57c1cf6bc68d7e3]*/
704 {
705 PyObject *encoded = encode(string);
706 if (encoded == NULL) {
707 return NULL;
708 }
709 add_history(PyBytes_AS_STRING(encoded));
710 Py_DECREF(encoded);
711 Py_RETURN_NONE;
712 }
713
714 static int should_auto_add_history = 1;
715
716 /* Enable or disable automatic history */
717
718 /*[clinic input]
719 readline.set_auto_history
720
721 enabled as _should_auto_add_history: bool
722 /
723
724 Enables or disables automatic history.
725 [clinic start generated code]*/
726
727 static PyObject *
readline_set_auto_history_impl(PyObject * module,int _should_auto_add_history)728 readline_set_auto_history_impl(PyObject *module,
729 int _should_auto_add_history)
730 /*[clinic end generated code: output=619c6968246fd82b input=3d413073a1a03355]*/
731 {
732 should_auto_add_history = _should_auto_add_history;
733 Py_RETURN_NONE;
734 }
735
736
737 /* Get the tab-completion word-delimiters that readline uses */
738
739 /*[clinic input]
740 readline.get_completer_delims
741
742 Get the word delimiters for completion.
743 [clinic start generated code]*/
744
745 static PyObject *
readline_get_completer_delims_impl(PyObject * module)746 readline_get_completer_delims_impl(PyObject *module)
747 /*[clinic end generated code: output=6b060280fa68ef43 input=e36eb14fb8a1f08a]*/
748 {
749 return decode(rl_completer_word_break_characters);
750 }
751
752 /* Set the completer function */
753
754 /*[clinic input]
755 readline.set_completer
756
757 function: object = None
758 /
759
760 Set or remove the completer function.
761
762 The function is called as function(text, state),
763 for state in 0, 1, 2, ..., until it returns a non-string.
764 It should return the next possible completion starting with 'text'.
765 [clinic start generated code]*/
766
767 static PyObject *
readline_set_completer_impl(PyObject * module,PyObject * function)768 readline_set_completer_impl(PyObject *module, PyObject *function)
769 /*[clinic end generated code: output=171a2a60f81d3204 input=51e81e13118eb877]*/
770 {
771 return set_hook("completer", &readlinestate_global->completer, function);
772 }
773
774 /*[clinic input]
775 readline.get_completer
776
777 Get the current completer function.
778 [clinic start generated code]*/
779
780 static PyObject *
readline_get_completer_impl(PyObject * module)781 readline_get_completer_impl(PyObject *module)
782 /*[clinic end generated code: output=6e6bbd8226d14475 input=6457522e56d70d13]*/
783 {
784 if (readlinestate_global->completer == NULL) {
785 Py_RETURN_NONE;
786 }
787 Py_INCREF(readlinestate_global->completer);
788 return readlinestate_global->completer;
789 }
790
791 /* Private function to get current length of history. XXX It may be
792 * possible to replace this with a direct use of history_length instead,
793 * but it's not clear whether BSD's libedit keeps history_length up to date.
794 * See issue #8065.*/
795
796 static int
_py_get_history_length(void)797 _py_get_history_length(void)
798 {
799 HISTORY_STATE *hist_st = history_get_history_state();
800 int length = hist_st->length;
801 /* the history docs don't say so, but the address of hist_st changes each
802 time history_get_history_state is called which makes me think it's
803 freshly malloc'd memory... on the other hand, the address of the last
804 line stays the same as long as history isn't extended, so it appears to
805 be malloc'd but managed by the history package... */
806 free(hist_st);
807 return length;
808 }
809
810 /* Exported function to get any element of history */
811
812 /*[clinic input]
813 readline.get_history_item
814
815 index as idx: int
816 /
817
818 Return the current contents of history item at one-based index.
819 [clinic start generated code]*/
820
821 static PyObject *
readline_get_history_item_impl(PyObject * module,int idx)822 readline_get_history_item_impl(PyObject *module, int idx)
823 /*[clinic end generated code: output=83d3e53ea5f34b3d input=8adf5c80e6c7ff2b]*/
824 {
825 HIST_ENTRY *hist_ent;
826
827 if (using_libedit_emulation) {
828 /* Older versions of libedit's readline emulation
829 * use 0-based indexes, while readline and newer
830 * versions of libedit use 1-based indexes.
831 */
832 int length = _py_get_history_length();
833
834 idx = idx - 1 + libedit_history_start;
835
836 /*
837 * Apple's readline emulation crashes when
838 * the index is out of range, therefore
839 * test for that and fail gracefully.
840 */
841 if (idx < (0 + libedit_history_start)
842 || idx >= (length + libedit_history_start)) {
843 Py_RETURN_NONE;
844 }
845 }
846 if ((hist_ent = history_get(idx)))
847 return decode(hist_ent->line);
848 else {
849 Py_RETURN_NONE;
850 }
851 }
852
853 /* Exported function to get current length of history */
854
855 /*[clinic input]
856 readline.get_current_history_length
857
858 Return the current (not the maximum) length of history.
859 [clinic start generated code]*/
860
861 static PyObject *
readline_get_current_history_length_impl(PyObject * module)862 readline_get_current_history_length_impl(PyObject *module)
863 /*[clinic end generated code: output=436b294f12ba1e3f input=9cb3f431a68d071f]*/
864 {
865 return PyLong_FromLong((long)_py_get_history_length());
866 }
867
868 /* Exported function to read the current line buffer */
869
870 /*[clinic input]
871 readline.get_line_buffer
872
873 Return the current contents of the line buffer.
874 [clinic start generated code]*/
875
876 static PyObject *
readline_get_line_buffer_impl(PyObject * module)877 readline_get_line_buffer_impl(PyObject *module)
878 /*[clinic end generated code: output=d22f9025ecad80e4 input=5f5fbc0d12c69412]*/
879 {
880 return decode(rl_line_buffer);
881 }
882
883 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
884
885 /* Exported function to clear the current history */
886
887 /*[clinic input]
888 readline.clear_history
889
890 Clear the current readline history.
891 [clinic start generated code]*/
892
893 static PyObject *
readline_clear_history_impl(PyObject * module)894 readline_clear_history_impl(PyObject *module)
895 /*[clinic end generated code: output=1f2dbb0dfa5d5ebb input=208962c4393f5d16]*/
896 {
897 clear_history();
898 Py_RETURN_NONE;
899 }
900 #endif
901
902
903 /* Exported function to insert text into the line buffer */
904
905 /*[clinic input]
906 readline.insert_text
907
908 string: object
909 /
910
911 Insert text into the line buffer at the cursor position.
912 [clinic start generated code]*/
913
914 static PyObject *
readline_insert_text(PyObject * module,PyObject * string)915 readline_insert_text(PyObject *module, PyObject *string)
916 /*[clinic end generated code: output=23d792821d320c19 input=bc96c3c848d5ccb5]*/
917 {
918 PyObject *encoded = encode(string);
919 if (encoded == NULL) {
920 return NULL;
921 }
922 rl_insert_text(PyBytes_AS_STRING(encoded));
923 Py_DECREF(encoded);
924 Py_RETURN_NONE;
925 }
926
927 /* Redisplay the line buffer */
928
929 /*[clinic input]
930 readline.redisplay
931
932 Change what's displayed on the screen to reflect contents of the line buffer.
933 [clinic start generated code]*/
934
935 static PyObject *
readline_redisplay_impl(PyObject * module)936 readline_redisplay_impl(PyObject *module)
937 /*[clinic end generated code: output=a8b9725827c3c34b input=b485151058d75edc]*/
938 {
939 rl_redisplay();
940 Py_RETURN_NONE;
941 }
942
943 #include "clinic/readline.c.h"
944
945 /* Table of functions exported by the module */
946
947 static struct PyMethodDef readline_methods[] =
948 {
949 READLINE_PARSE_AND_BIND_METHODDEF
950 READLINE_GET_LINE_BUFFER_METHODDEF
951 READLINE_INSERT_TEXT_METHODDEF
952 READLINE_REDISPLAY_METHODDEF
953 READLINE_READ_INIT_FILE_METHODDEF
954 READLINE_READ_HISTORY_FILE_METHODDEF
955 READLINE_WRITE_HISTORY_FILE_METHODDEF
956 #ifdef HAVE_RL_APPEND_HISTORY
957 READLINE_APPEND_HISTORY_FILE_METHODDEF
958 #endif
959 READLINE_GET_HISTORY_ITEM_METHODDEF
960 READLINE_GET_CURRENT_HISTORY_LENGTH_METHODDEF
961 READLINE_SET_HISTORY_LENGTH_METHODDEF
962 READLINE_GET_HISTORY_LENGTH_METHODDEF
963 READLINE_SET_COMPLETER_METHODDEF
964 READLINE_GET_COMPLETER_METHODDEF
965 READLINE_GET_COMPLETION_TYPE_METHODDEF
966 READLINE_GET_BEGIDX_METHODDEF
967 READLINE_GET_ENDIDX_METHODDEF
968 READLINE_SET_COMPLETER_DELIMS_METHODDEF
969 READLINE_SET_AUTO_HISTORY_METHODDEF
970 READLINE_ADD_HISTORY_METHODDEF
971 READLINE_REMOVE_HISTORY_ITEM_METHODDEF
972 READLINE_REPLACE_HISTORY_ITEM_METHODDEF
973 READLINE_GET_COMPLETER_DELIMS_METHODDEF
974 READLINE_SET_COMPLETION_DISPLAY_MATCHES_HOOK_METHODDEF
975 READLINE_SET_STARTUP_HOOK_METHODDEF
976 #ifdef HAVE_RL_PRE_INPUT_HOOK
977 READLINE_SET_PRE_INPUT_HOOK_METHODDEF
978 #endif
979 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
980 READLINE_CLEAR_HISTORY_METHODDEF
981 #endif
982 {0, 0}
983 };
984
985
986 /* C function to call the Python hooks. */
987
988 static int
on_hook(PyObject * func)989 on_hook(PyObject *func)
990 {
991 int result = 0;
992 if (func != NULL) {
993 PyObject *r;
994 r = PyObject_CallNoArgs(func);
995 if (r == NULL)
996 goto error;
997 if (r == Py_None)
998 result = 0;
999 else {
1000 result = _PyLong_AsInt(r);
1001 if (result == -1 && PyErr_Occurred())
1002 goto error;
1003 }
1004 Py_DECREF(r);
1005 goto done;
1006 error:
1007 PyErr_Clear();
1008 Py_XDECREF(r);
1009 done:
1010 return result;
1011 }
1012 return result;
1013 }
1014
1015 static int
1016 #if defined(_RL_FUNCTION_TYPEDEF)
on_startup_hook(void)1017 on_startup_hook(void)
1018 #else
1019 on_startup_hook()
1020 #endif
1021 {
1022 int r;
1023 PyGILState_STATE gilstate = PyGILState_Ensure();
1024 r = on_hook(readlinestate_global->startup_hook);
1025 PyGILState_Release(gilstate);
1026 return r;
1027 }
1028
1029 #ifdef HAVE_RL_PRE_INPUT_HOOK
1030 static int
1031 #if defined(_RL_FUNCTION_TYPEDEF)
on_pre_input_hook(void)1032 on_pre_input_hook(void)
1033 #else
1034 on_pre_input_hook()
1035 #endif
1036 {
1037 int r;
1038 PyGILState_STATE gilstate = PyGILState_Ensure();
1039 r = on_hook(readlinestate_global->pre_input_hook);
1040 PyGILState_Release(gilstate);
1041 return r;
1042 }
1043 #endif
1044
1045
1046 /* C function to call the Python completion_display_matches */
1047
1048 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
1049 static void
on_completion_display_matches_hook(char ** matches,int num_matches,int max_length)1050 on_completion_display_matches_hook(char **matches,
1051 int num_matches, int max_length)
1052 {
1053 int i;
1054 PyObject *sub, *m=NULL, *s=NULL, *r=NULL;
1055 PyGILState_STATE gilstate = PyGILState_Ensure();
1056 m = PyList_New(num_matches);
1057 if (m == NULL)
1058 goto error;
1059 for (i = 0; i < num_matches; i++) {
1060 s = decode(matches[i+1]);
1061 if (s == NULL)
1062 goto error;
1063 PyList_SET_ITEM(m, i, s);
1064 }
1065 sub = decode(matches[0]);
1066 r = PyObject_CallFunction(readlinestate_global->completion_display_matches_hook,
1067 "NNi", sub, m, max_length);
1068
1069 m=NULL;
1070
1071 if (r == NULL ||
1072 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
1073 goto error;
1074 }
1075 Py_CLEAR(r);
1076
1077 if (0) {
1078 error:
1079 PyErr_Clear();
1080 Py_XDECREF(m);
1081 Py_XDECREF(r);
1082 }
1083 PyGILState_Release(gilstate);
1084 }
1085
1086 #endif
1087
1088 #ifdef HAVE_RL_RESIZE_TERMINAL
1089 static volatile sig_atomic_t sigwinch_received;
1090 static PyOS_sighandler_t sigwinch_ohandler;
1091
1092 static void
readline_sigwinch_handler(int signum)1093 readline_sigwinch_handler(int signum)
1094 {
1095 sigwinch_received = 1;
1096 if (sigwinch_ohandler &&
1097 sigwinch_ohandler != SIG_IGN && sigwinch_ohandler != SIG_DFL)
1098 sigwinch_ohandler(signum);
1099
1100 #ifndef HAVE_SIGACTION
1101 /* If the handler was installed with signal() rather than sigaction(),
1102 we need to reinstall it. */
1103 PyOS_setsig(SIGWINCH, readline_sigwinch_handler);
1104 #endif
1105 }
1106 #endif
1107
1108 /* C function to call the Python completer. */
1109
1110 static char *
on_completion(const char * text,int state)1111 on_completion(const char *text, int state)
1112 {
1113 char *result = NULL;
1114 if (readlinestate_global->completer != NULL) {
1115 PyObject *r = NULL, *t;
1116 PyGILState_STATE gilstate = PyGILState_Ensure();
1117 rl_attempted_completion_over = 1;
1118 t = decode(text);
1119 r = PyObject_CallFunction(readlinestate_global->completer, "Ni", t, state);
1120 if (r == NULL)
1121 goto error;
1122 if (r == Py_None) {
1123 result = NULL;
1124 }
1125 else {
1126 PyObject *encoded = encode(r);
1127 if (encoded == NULL)
1128 goto error;
1129 result = strdup(PyBytes_AS_STRING(encoded));
1130 Py_DECREF(encoded);
1131 }
1132 Py_DECREF(r);
1133 goto done;
1134 error:
1135 PyErr_Clear();
1136 Py_XDECREF(r);
1137 done:
1138 PyGILState_Release(gilstate);
1139 return result;
1140 }
1141 return result;
1142 }
1143
1144
1145 /* A more flexible constructor that saves the "begidx" and "endidx"
1146 * before calling the normal completer */
1147
1148 static char **
flex_complete(const char * text,int start,int end)1149 flex_complete(const char *text, int start, int end)
1150 {
1151 char **result;
1152 char saved;
1153 size_t start_size, end_size;
1154 wchar_t *s;
1155 PyGILState_STATE gilstate = PyGILState_Ensure();
1156 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
1157 rl_completion_append_character ='\0';
1158 #endif
1159 #ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
1160 rl_completion_suppress_append = 0;
1161 #endif
1162
1163 saved = rl_line_buffer[start];
1164 rl_line_buffer[start] = 0;
1165 s = Py_DecodeLocale(rl_line_buffer, &start_size);
1166 rl_line_buffer[start] = saved;
1167 if (s == NULL) {
1168 goto done;
1169 }
1170 PyMem_RawFree(s);
1171 saved = rl_line_buffer[end];
1172 rl_line_buffer[end] = 0;
1173 s = Py_DecodeLocale(rl_line_buffer + start, &end_size);
1174 rl_line_buffer[end] = saved;
1175 if (s == NULL) {
1176 goto done;
1177 }
1178 PyMem_RawFree(s);
1179 start = (int)start_size;
1180 end = start + (int)end_size;
1181
1182 done:
1183 Py_XDECREF(readlinestate_global->begidx);
1184 Py_XDECREF(readlinestate_global->endidx);
1185 readlinestate_global->begidx = PyLong_FromLong((long) start);
1186 readlinestate_global->endidx = PyLong_FromLong((long) end);
1187 result = completion_matches((char *)text, *on_completion);
1188 PyGILState_Release(gilstate);
1189 return result;
1190 }
1191
1192
1193 /* Helper to initialize GNU readline properly.
1194 Return -1 on memory allocation failure, return 0 on success. */
1195 static int
setup_readline(readlinestate * mod_state)1196 setup_readline(readlinestate *mod_state)
1197 {
1198 #ifdef SAVE_LOCALE
1199 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1200 if (!saved_locale) {
1201 return -1;
1202 }
1203 #endif
1204
1205 /* The name must be defined before initialization */
1206 rl_readline_name = "python";
1207
1208 /* the libedit readline emulation resets key bindings etc
1209 * when calling rl_initialize. So call it upfront
1210 */
1211 if (using_libedit_emulation)
1212 rl_initialize();
1213
1214 /* Detect if libedit's readline emulation uses 0-based
1215 * indexing or 1-based indexing.
1216 */
1217 add_history("1");
1218 if (history_get(1) == NULL) {
1219 libedit_history_start = 0;
1220 } else {
1221 libedit_history_start = 1;
1222 }
1223 /* Some libedit implementations use 1 based indexing on
1224 * replace_history_entry where libreadline uses 0 based.
1225 * The API our module presents is supposed to be 0 based.
1226 * It's a mad mad mad mad world.
1227 */
1228 {
1229 add_history("2");
1230 HIST_ENTRY *old_entry = replace_history_entry(1, "X", NULL);
1231 _py_free_history_entry(old_entry);
1232 HIST_ENTRY *item = history_get(libedit_history_start);
1233 if (item && item->line && strcmp(item->line, "X")) {
1234 libedit_append_replace_history_offset = 0;
1235 } else {
1236 libedit_append_replace_history_offset = 1;
1237 }
1238 }
1239 clear_history();
1240
1241 using_history();
1242
1243 /* Force rebind of TAB to insert-tab */
1244 rl_bind_key('\t', rl_insert);
1245 /* Bind both ESC-TAB and ESC-ESC to the completion function */
1246 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
1247 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
1248 #ifdef HAVE_RL_RESIZE_TERMINAL
1249 /* Set up signal handler for window resize */
1250 sigwinch_ohandler = PyOS_setsig(SIGWINCH, readline_sigwinch_handler);
1251 #endif
1252 /* Set our hook functions */
1253 rl_startup_hook = on_startup_hook;
1254 #ifdef HAVE_RL_PRE_INPUT_HOOK
1255 rl_pre_input_hook = on_pre_input_hook;
1256 #endif
1257 /* Set our completion function */
1258 rl_attempted_completion_function = flex_complete;
1259 /* Set Python word break characters */
1260 completer_word_break_characters =
1261 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
1262 /* All nonalphanums except '.' */
1263 rl_completer_word_break_characters = completer_word_break_characters;
1264
1265 mod_state->begidx = PyLong_FromLong(0L);
1266 mod_state->endidx = PyLong_FromLong(0L);
1267
1268 if (!using_libedit_emulation)
1269 {
1270 if (!isatty(STDOUT_FILENO)) {
1271 /* Issue #19884: stdout is not a terminal. Disable meta modifier
1272 keys to not write the ANSI sequence "\033[1034h" into stdout. On
1273 terminals supporting 8 bit characters like TERM=xterm-256color
1274 (which is now the default Fedora since Fedora 18), the meta key is
1275 used to enable support of 8 bit characters (ANSI sequence
1276 "\033[1034h").
1277
1278 With libedit, this call makes readline() crash. */
1279 rl_variable_bind ("enable-meta-key", "off");
1280 }
1281 }
1282
1283 /* Initialize (allows .inputrc to override)
1284 *
1285 * XXX: A bug in the readline-2.2 library causes a memory leak
1286 * inside this function. Nothing we can do about it.
1287 */
1288 if (using_libedit_emulation)
1289 rl_read_init_file(NULL);
1290 else
1291 rl_initialize();
1292
1293 disable_bracketed_paste();
1294
1295 RESTORE_LOCALE(saved_locale)
1296 return 0;
1297 }
1298
1299 /* Wrapper around GNU readline that handles signals differently. */
1300
1301 static char *completed_input_string;
1302 static void
rlhandler(char * text)1303 rlhandler(char *text)
1304 {
1305 completed_input_string = text;
1306 rl_callback_handler_remove();
1307 }
1308
1309 static char *
readline_until_enter_or_signal(const char * prompt,int * signal)1310 readline_until_enter_or_signal(const char *prompt, int *signal)
1311 {
1312 char * not_done_reading = "";
1313 fd_set selectset;
1314
1315 *signal = 0;
1316 #ifdef HAVE_RL_CATCH_SIGNAL
1317 rl_catch_signals = 0;
1318 #endif
1319
1320 rl_callback_handler_install (prompt, rlhandler);
1321 FD_ZERO(&selectset);
1322
1323 completed_input_string = not_done_reading;
1324
1325 while (completed_input_string == not_done_reading) {
1326 int has_input = 0, err = 0;
1327
1328 while (!has_input)
1329 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
1330
1331 /* [Bug #1552726] Only limit the pause if an input hook has been
1332 defined. */
1333 struct timeval *timeoutp = NULL;
1334 if (PyOS_InputHook)
1335 timeoutp = &timeout;
1336 #ifdef HAVE_RL_RESIZE_TERMINAL
1337 /* Update readline's view of the window size after SIGWINCH */
1338 if (sigwinch_received) {
1339 sigwinch_received = 0;
1340 rl_resize_terminal();
1341 }
1342 #endif
1343 FD_SET(fileno(rl_instream), &selectset);
1344 /* select resets selectset if no input was available */
1345 has_input = select(fileno(rl_instream) + 1, &selectset,
1346 NULL, NULL, timeoutp);
1347 err = errno;
1348 if(PyOS_InputHook) PyOS_InputHook();
1349 }
1350
1351 if (has_input > 0) {
1352 rl_callback_read_char();
1353 }
1354 else if (err == EINTR) {
1355 int s;
1356 PyEval_RestoreThread(_PyOS_ReadlineTState);
1357 s = PyErr_CheckSignals();
1358 PyEval_SaveThread();
1359 if (s < 0) {
1360 rl_free_line_state();
1361 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0700
1362 rl_callback_sigcleanup();
1363 #endif
1364 rl_cleanup_after_signal();
1365 rl_callback_handler_remove();
1366 *signal = 1;
1367 completed_input_string = NULL;
1368 }
1369 }
1370 }
1371
1372 return completed_input_string;
1373 }
1374
1375
1376 static char *
call_readline(FILE * sys_stdin,FILE * sys_stdout,const char * prompt)1377 call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
1378 {
1379 size_t n;
1380 char *p;
1381 int signal;
1382
1383 #ifdef SAVE_LOCALE
1384 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1385 if (!saved_locale)
1386 Py_FatalError("not enough memory to save locale");
1387 _Py_SetLocaleFromEnv(LC_CTYPE);
1388 #endif
1389
1390 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
1391 rl_instream = sys_stdin;
1392 rl_outstream = sys_stdout;
1393 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
1394 rl_prep_terminal (1);
1395 #endif
1396 }
1397
1398 p = readline_until_enter_or_signal(prompt, &signal);
1399
1400 /* we got an interrupt signal */
1401 if (signal) {
1402 RESTORE_LOCALE(saved_locale)
1403 return NULL;
1404 }
1405
1406 /* We got an EOF, return an empty string. */
1407 if (p == NULL) {
1408 p = PyMem_RawMalloc(1);
1409 if (p != NULL)
1410 *p = '\0';
1411 RESTORE_LOCALE(saved_locale)
1412 return p;
1413 }
1414
1415 /* we have a valid line */
1416 n = strlen(p);
1417 if (should_auto_add_history && n > 0) {
1418 const char *line;
1419 int length = _py_get_history_length();
1420 if (length > 0) {
1421 HIST_ENTRY *hist_ent;
1422 if (using_libedit_emulation) {
1423 /* handle older 0-based or newer 1-based indexing */
1424 hist_ent = history_get(length + libedit_history_start - 1);
1425 } else
1426 hist_ent = history_get(length);
1427 line = hist_ent ? hist_ent->line : "";
1428 } else
1429 line = "";
1430 if (strcmp(p, line))
1431 add_history(p);
1432 }
1433 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
1434 release the original. */
1435 char *q = p;
1436 p = PyMem_RawMalloc(n+2);
1437 if (p != NULL) {
1438 memcpy(p, q, n);
1439 p[n] = '\n';
1440 p[n+1] = '\0';
1441 }
1442 free(q);
1443 RESTORE_LOCALE(saved_locale)
1444 return p;
1445 }
1446
1447
1448 /* Initialize the module */
1449
1450 PyDoc_STRVAR(doc_module,
1451 "Importing this module enables command line editing using GNU readline.");
1452
1453 PyDoc_STRVAR(doc_module_le,
1454 "Importing this module enables command line editing using libedit readline.");
1455
1456 static struct PyModuleDef readlinemodule = {
1457 PyModuleDef_HEAD_INIT,
1458 "readline",
1459 doc_module,
1460 sizeof(readlinestate),
1461 readline_methods,
1462 NULL,
1463 readline_traverse,
1464 readline_clear,
1465 readline_free
1466 };
1467
1468
1469 PyMODINIT_FUNC
PyInit_readline(void)1470 PyInit_readline(void)
1471 {
1472 PyObject *m;
1473 readlinestate *mod_state;
1474
1475 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
1476 using_libedit_emulation = 1;
1477 }
1478
1479 if (using_libedit_emulation)
1480 readlinemodule.m_doc = doc_module_le;
1481
1482
1483 m = PyModule_Create(&readlinemodule);
1484
1485 if (m == NULL)
1486 return NULL;
1487
1488 if (PyModule_AddIntConstant(m, "_READLINE_VERSION",
1489 RL_READLINE_VERSION) < 0) {
1490 goto error;
1491 }
1492 if (PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION",
1493 rl_readline_version) < 0) {
1494 goto error;
1495 }
1496 if (PyModule_AddStringConstant(m, "_READLINE_LIBRARY_VERSION",
1497 rl_library_version) < 0)
1498 {
1499 goto error;
1500 }
1501
1502 mod_state = (readlinestate *) PyModule_GetState(m);
1503 PyOS_ReadlineFunctionPointer = call_readline;
1504 if (setup_readline(mod_state) < 0) {
1505 PyErr_NoMemory();
1506 goto error;
1507 }
1508
1509 return m;
1510
1511 error:
1512 Py_DECREF(m);
1513 return NULL;
1514 }
1515