annotate Modules/readline.c @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 6a966179c73a
children cf0f450b3299 8e0b2e75ca7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1 /* This module makes GNU readline available to Python. It has ideas
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
2 * contributed by Lee Busby, LLNL, and William Magro, Cornell Theory
34842
de121899d021 Be a bit more accurate.
Michael W. Hudson <mwh@python.net>
parents: 34841
diff changeset
3 * Center. The completer interface was inspired by Lele Gaifax. More
de121899d021 Be a bit more accurate.
Michael W. Hudson <mwh@python.net>
parents: 34841
diff changeset
4 * recently, it was largely rewritten by Guido van Rossum.
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 */
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
7 /* Standard definitions */
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #include "Python.h"
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #include <setjmp.h>
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #include <signal.h>
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
11 #include <errno.h>
33686
1701dae6474e This is Michiel de Hoon's patch, as attached to the bug report:
Michael W. Hudson <mwh@python.net>
parents: 33255
diff changeset
12 #include <sys/time.h>
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
31504
2abc52c3d4c2 remove support for missing ANSI C header files (limits.h, stddef.h, etc).
Skip Montanaro <skip@pobox.com>
parents: 30910
diff changeset
14 #if defined(HAVE_SETLOCALE)
25684
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
15 /* GNU readline() mistakenly sets the LC_CTYPE locale.
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
16 * This is evil. Only the user or the app's main() should do this!
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
17 * We must save and restore the locale around the rl_initialize() call.
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
18 */
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
19 #define SAVE_LOCALE
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
20 #include <locale.h>
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
21 #endif
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
22
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
23 #ifdef SAVE_LOCALE
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
24 # define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
25 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
26 # define RESTORE_LOCALE(sl)
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
27 #endif
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
28
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
29 /* GNU readline definitions */
17506
55ee15c4eee6 Clean up the unsightly mess around the readline header files. We now
Guido van Rossum <guido@python.org>
parents: 15803
diff changeset
30 #undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
8823
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8391
diff changeset
31 #include <readline/readline.h>
f2a4a2b60860 Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents: 8391
diff changeset
32 #include <readline/history.h>
7982
a909a2869ac5 Make new gcc -Wall happy
Guido van Rossum <guido@python.org>
parents: 7116
diff changeset
33
18474
82a34932ea22 Backport of Guido's checkins of acconfig.h (1.50), configure.in (1.224) and
Thomas Wouters <thomas@python.org>
parents: 17506
diff changeset
34 #ifdef HAVE_RL_COMPLETION_MATCHES
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
35 #define completion_matches(x, y) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
36 rl_completion_matches((x), ((rl_compentry_func_t *)(y)))
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
37 #else
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
38 #if defined(_RL_FUNCTION_TYPEDEF)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
39 extern char **completion_matches(char *, rl_compentry_func_t *);
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
40 #else
58869
47123915ea20 Merged revisions 78148 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56761
diff changeset
41
47123915ea20 Merged revisions 78148 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56761
diff changeset
42 #if !defined(__APPLE__)
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
43 extern char **completion_matches(char *, CPFunction *);
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
44 #endif
18474
82a34932ea22 Backport of Guido's checkins of acconfig.h (1.50), configure.in (1.224) and
Thomas Wouters <thomas@python.org>
parents: 17506
diff changeset
45 #endif
58869
47123915ea20 Merged revisions 78148 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56761
diff changeset
46 #endif
18474
82a34932ea22 Backport of Guido's checkins of acconfig.h (1.50), configure.in (1.224) and
Thomas Wouters <thomas@python.org>
parents: 17506
diff changeset
47
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
48 #ifdef __APPLE__
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
49 /*
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
50 * It is possible to link the readline module to the readline
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
51 * emulation library of editline/libedit.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
52 *
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
53 * On OSX this emulation library is not 100% API compatible
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
54 * with the "real" readline and cannot be detected at compile-time,
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
55 * hence we use a runtime check to detect if we're using libedit
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
56 *
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
57 * Currently there is one know API incompatibility:
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
58 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
59 * index with libedit's emulation.
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
60 * - Note that replace_history and remove_history use a 0-based index
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
61 * with both implementation.
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
62 */
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
63 static int using_libedit_emulation = 0;
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
64 static const char libedit_version_tag[] = "EditLine wrapper";
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
65 #endif /* __APPLE__ */
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
66
65510
ce9f5ce33ad2 Fix compiler warning about unused static function.
Georg Brandl <georg@python.org>
parents: 64234
diff changeset
67 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
43829
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
68 static void
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
69 on_completion_display_matches_hook(char **matches,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
70 int num_matches, int max_length);
65510
ce9f5ce33ad2 Fix compiler warning about unused static function.
Georg Brandl <georg@python.org>
parents: 64234
diff changeset
71 #endif
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
72
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
73 /* Exported function to send one line to readline's init file parser */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
74
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
75 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
76 parse_and_bind(PyObject *self, PyObject *args)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
77 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
78 char *s, *copy;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
79 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
80 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
81 /* Make a copy -- rl_parse_and_bind() modifies its argument */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
82 /* Bernard Herzog */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
83 copy = malloc(1 + strlen(s));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
84 if (copy == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
85 return PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
86 strcpy(copy, s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
87 rl_parse_and_bind(copy);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
88 free(copy); /* Free the copy */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
89 Py_RETURN_NONE;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
90 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
91
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
92 PyDoc_STRVAR(doc_parse_and_bind,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
93 "parse_and_bind(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
94 Parse and execute single line of a readline init file.");
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
95
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
96
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
97 /* Exported function to parse a readline init file */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
98
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
99 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
100 read_init_file(PyObject *self, PyObject *args)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
101 {
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
102 PyObject *filename_obj = Py_None, *filename_bytes;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
103 if (!PyArg_ParseTuple(args, "|O:read_init_file", &filename_obj))
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
104 return NULL;
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
105 if (filename_obj != Py_None) {
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
106 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
107 return NULL;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
108 errno = rl_read_init_file(PyBytes_AsString(filename_bytes));
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
109 Py_DECREF(filename_bytes);
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
110 } else
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
111 errno = rl_read_init_file(NULL);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
112 if (errno)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
113 return PyErr_SetFromErrno(PyExc_IOError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
114 Py_RETURN_NONE;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
115 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
116
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
117 PyDoc_STRVAR(doc_read_init_file,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
118 "read_init_file([filename]) -> None\n\
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
119 Parse a readline initialization file.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
120 The default filename is the last filename used.");
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
121
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
122
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
123 /* Exported function to load a readline history file */
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
124
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
125 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
126 read_history_file(PyObject *self, PyObject *args)
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
127 {
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
128 PyObject *filename_obj = Py_None, *filename_bytes;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
129 if (!PyArg_ParseTuple(args, "|O:read_history_file", &filename_obj))
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
130 return NULL;
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
131 if (filename_obj != Py_None) {
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
132 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
133 return NULL;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
134 errno = read_history(PyBytes_AsString(filename_bytes));
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
135 Py_DECREF(filename_bytes);
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
136 } else
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
137 errno = read_history(NULL);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
138 if (errno)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
139 return PyErr_SetFromErrno(PyExc_IOError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
140 Py_RETURN_NONE;
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
141 }
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
142
34027
7e99b0680adf Rename a static variable "history_length" to "_history_length".
Hye-Shik Chang <hyeshik@gmail.com>
parents: 33686
diff changeset
143 static int _history_length = -1; /* do not truncate history by default */
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
144 PyDoc_STRVAR(doc_read_history_file,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
145 "read_history_file([filename]) -> None\n\
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
146 Load a readline history file.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
147 The default filename is ~/.history.");
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
148
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
149
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
150 /* Exported function to save a readline history file */
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
151
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
152 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
153 write_history_file(PyObject *self, PyObject *args)
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
154 {
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
155 PyObject *filename_obj = Py_None, *filename_bytes;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
156 char *filename;
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
157 int err;
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
158 if (!PyArg_ParseTuple(args, "|O:write_history_file", &filename_obj))
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
159 return NULL;
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
160 if (filename_obj != Py_None) {
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
161 if (!PyUnicode_FSConverter(filename_obj, &filename_bytes))
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
162 return NULL;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
163 filename = PyBytes_AsString(filename_bytes);
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
164 } else {
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
165 filename_bytes = NULL;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
166 filename = NULL;
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
167 }
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
168 errno = err = write_history(filename);
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
169 if (!err && _history_length >= 0)
62266
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
170 history_truncate_file(filename, _history_length);
f60aaf99b836 readline: use PyUnicode_FSConverter() to parse filenames
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61466
diff changeset
171 Py_XDECREF(filename_bytes);
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
172 errno = err;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
173 if (errno)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
174 return PyErr_SetFromErrno(PyExc_IOError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
175 Py_RETURN_NONE;
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
176 }
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
177
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
178 PyDoc_STRVAR(doc_write_history_file,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
179 "write_history_file([filename]) -> None\n\
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
180 Save a readline history file.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
181 The default filename is ~/.history.");
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
182
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
183
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
184 /* Set history length */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
185
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
186 static PyObject*
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
187 set_history_length(PyObject *self, PyObject *args)
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
188 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
189 int length = _history_length;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
190 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
191 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
192 _history_length = length;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
193 Py_RETURN_NONE;
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
194 }
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
195
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
196 PyDoc_STRVAR(set_history_length_doc,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
197 "set_history_length(length) -> None\n\
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
198 set the maximal number of items which will be written to\n\
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
199 the history file. A negative length is used to inhibit\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
200 history truncation.");
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
201
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
202
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
203 /* Get history length */
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
204
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
205 static PyObject*
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
206 get_history_length(PyObject *self, PyObject *noarg)
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
207 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
208 return PyLong_FromLong(_history_length);
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
209 }
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
210
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
211 PyDoc_STRVAR(get_history_length_doc,
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
212 "get_history_length() -> int\n\
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
213 return the maximum number of items that will be written to\n\
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
214 the history file.");
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
215
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
216
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
217 /* Generic hook function setter */
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
218
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
219 static PyObject *
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
220 set_hook(const char *funcname, PyObject **hook_var, PyObject *args)
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
221 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
222 PyObject *function = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
223 char buf[80];
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
224 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
225 if (!PyArg_ParseTuple(args, buf, &function))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
226 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
227 if (function == Py_None) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
228 Py_XDECREF(*hook_var);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
229 *hook_var = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
230 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
231 else if (PyCallable_Check(function)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
232 PyObject *tmp = *hook_var;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
233 Py_INCREF(function);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
234 *hook_var = function;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
235 Py_XDECREF(tmp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
236 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
237 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
238 PyOS_snprintf(buf, sizeof(buf),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
239 "set_%.50s(func): argument not callable",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
240 funcname);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
241 PyErr_SetString(PyExc_TypeError, buf);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
242 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
243 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
244 Py_RETURN_NONE;
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
245 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
246
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
247
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
248 /* Exported functions to specify hook functions in Python */
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
249
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
250 static PyObject *completion_display_matches_hook = NULL;
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
251 static PyObject *startup_hook = NULL;
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
252
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
253 #ifdef HAVE_RL_PRE_INPUT_HOOK
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
254 static PyObject *pre_input_hook = NULL;
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
255 #endif
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
256
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
257 static PyObject *
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
258 set_completion_display_matches_hook(PyObject *self, PyObject *args)
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
259 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
260 PyObject *result = set_hook("completion_display_matches_hook",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
261 &completion_display_matches_hook, args);
43829
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
262 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
263 /* We cannot set this hook globally, since it replaces the
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
264 default completion display. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
265 rl_completion_display_matches_hook =
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
266 completion_display_matches_hook ?
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
267 #if defined(_RL_FUNCTION_TYPEDEF)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
268 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
269 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
270 (VFunction *)on_completion_display_matches_hook : 0;
49642
c089eb64ee57 Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 48660
diff changeset
271 #endif
43829
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
272 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
273 return result;
43829
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
274
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
275 }
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
276
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
277 PyDoc_STRVAR(doc_set_completion_display_matches_hook,
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
278 "set_completion_display_matches_hook([function]) -> None\n\
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
279 Set or remove the completion display function.\n\
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
280 The function is called as\n\
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
281 function(substitution, [matches], longest_match_length)\n\
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
282 once each time matches need to be displayed.");
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
283
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
284 static PyObject *
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
285 set_startup_hook(PyObject *self, PyObject *args)
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
286 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
287 return set_hook("startup_hook", &startup_hook, args);
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
288 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
289
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
290 PyDoc_STRVAR(doc_set_startup_hook,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
291 "set_startup_hook([function]) -> None\n\
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
292 Set or remove the startup_hook function.\n\
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
293 The function is called with no arguments just\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
294 before readline prints the first prompt.");
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
295
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
296
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
297 #ifdef HAVE_RL_PRE_INPUT_HOOK
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
298
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
299 /* Set pre-input hook */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
300
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
301 static PyObject *
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
302 set_pre_input_hook(PyObject *self, PyObject *args)
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
303 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
304 return set_hook("pre_input_hook", &pre_input_hook, args);
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
305 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
306
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
307 PyDoc_STRVAR(doc_set_pre_input_hook,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
308 "set_pre_input_hook([function]) -> None\n\
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
309 Set or remove the pre_input_hook function.\n\
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
310 The function is called with no arguments after the first prompt\n\
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
311 has been printed and just before readline starts reading input\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
312 characters.");
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
313
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
314 #endif
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
315
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
316
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
317 /* Exported function to specify a word completer in Python */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
318
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
319 static PyObject *completer = NULL;
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
320
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
321 static PyObject *begidx = NULL;
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
322 static PyObject *endidx = NULL;
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
323
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
324
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
325 /* Get the completion type for the scope of the tab-completion */
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
326 static PyObject *
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
327 get_completion_type(PyObject *self, PyObject *noarg)
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
328 {
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 43877
diff changeset
329 return PyLong_FromLong(rl_completion_type);
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
330 }
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
331
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
332 PyDoc_STRVAR(doc_get_completion_type,
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
333 "get_completion_type() -> int\n\
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
334 Get the type of completion being attempted.");
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
335
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
336
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
337 /* Get the beginning index for the scope of the tab-completion */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
338
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
339 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
340 get_begidx(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
341 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
342 Py_INCREF(begidx);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
343 return begidx;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
344 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
345
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
346 PyDoc_STRVAR(doc_get_begidx,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
347 "get_begidx() -> int\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
348 get the beginning index of the readline tab-completion scope");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
349
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
350
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
351 /* Get the ending index for the scope of the tab-completion */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
352
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
353 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
354 get_endidx(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
355 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
356 Py_INCREF(endidx);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
357 return endidx;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
358 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
359
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
360 PyDoc_STRVAR(doc_get_endidx,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
361 "get_endidx() -> int\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
362 get the ending index of the readline tab-completion scope");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
363
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
364
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
365 /* Set the tab-completion word-delimiters that readline uses */
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
366
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
367 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
368 set_completer_delims(PyObject *self, PyObject *args)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
369 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
370 char *break_chars;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
371
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
372 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
373 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
374 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
375 free((void*)rl_completer_word_break_characters);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
376 rl_completer_word_break_characters = strdup(break_chars);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
377 Py_RETURN_NONE;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
378 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
379
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
380 PyDoc_STRVAR(doc_set_completer_delims,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
381 "set_completer_delims(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
382 set the readline word delimiters for tab-completion");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
383
63683
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
384 /* _py_free_history_entry: Utility function to free a history entry. */
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
385
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
386 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
387
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
388 /* Readline version >= 5.0 introduced a timestamp field into the history entry
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
389 structure; this needs to be freed to avoid a memory leak. This version of
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
390 readline also introduced the handy 'free_history_entry' function, which
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
391 takes care of the timestamp. */
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
392
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
393 static void
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
394 _py_free_history_entry(HIST_ENTRY *entry)
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
395 {
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
396 histdata_t data = free_history_entry(entry);
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
397 free(data);
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
398 }
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
399
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
400 #else
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
401
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
402 /* No free_history_entry function; free everything manually. */
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
403
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
404 static void
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
405 _py_free_history_entry(HIST_ENTRY *entry)
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
406 {
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
407 if (entry->line)
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
408 free((void *)entry->line);
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
409 if (entry->data)
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
410 free(entry->data);
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
411 free(entry);
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
412 }
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
413
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
414 #endif
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
415
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
416 static PyObject *
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
417 py_remove_history(PyObject *self, PyObject *args)
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
418 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
419 int entry_number;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
420 HIST_ENTRY *entry;
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
421
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
422 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
423 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
424 if (entry_number < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
425 PyErr_SetString(PyExc_ValueError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
426 "History index cannot be negative");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
427 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
428 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
429 entry = remove_history(entry_number);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
430 if (!entry) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
431 PyErr_Format(PyExc_ValueError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
432 "No history item at position %d",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
433 entry_number);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
434 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
435 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
436 /* free memory allocated for the history entry */
63683
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
437 _py_free_history_entry(entry);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
438 Py_RETURN_NONE;
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
439 }
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
440
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
441 PyDoc_STRVAR(doc_remove_history,
33153
4b5b6e861fcf fix a couple problems with the last patch picked up by Michael Hudson
Skip Montanaro <skip@pobox.com>
parents: 33136
diff changeset
442 "remove_history_item(pos) -> None\n\
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
443 remove history item given by its position");
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
444
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
445 static PyObject *
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
446 py_replace_history(PyObject *self, PyObject *args)
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
447 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
448 int entry_number;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
449 char *line;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
450 HIST_ENTRY *old_entry;
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
451
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
452 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
453 &line)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
454 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
455 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
456 if (entry_number < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
457 PyErr_SetString(PyExc_ValueError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
458 "History index cannot be negative");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
459 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
460 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
461 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
462 if (!old_entry) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
463 PyErr_Format(PyExc_ValueError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
464 "No history item at position %d",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
465 entry_number);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
466 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
467 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
468 /* free memory allocated for the old history entry */
63683
33e9be2fa4d2 Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61467
diff changeset
469 _py_free_history_entry(old_entry);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
470 Py_RETURN_NONE;
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
471 }
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
472
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
473 PyDoc_STRVAR(doc_replace_history,
33153
4b5b6e861fcf fix a couple problems with the last patch picked up by Michael Hudson
Skip Montanaro <skip@pobox.com>
parents: 33136
diff changeset
474 "replace_history_item(pos, line) -> None\n\
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
475 replaces history item given by its position with contents of line");
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
476
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
477 /* Add a line to the history buffer */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
478
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
479 static PyObject *
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
480 py_add_history(PyObject *self, PyObject *args)
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
481 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
482 char *line;
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
483
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
484 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
485 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
486 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
487 add_history(line);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
488 Py_RETURN_NONE;
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
489 }
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
490
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
491 PyDoc_STRVAR(doc_add_history,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
492 "add_history(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
493 add a line to the history buffer");
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
494
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
495
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
496 /* Get the tab-completion word-delimiters that readline uses */
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
497
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
498 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
499 get_completer_delims(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
500 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
501 return PyUnicode_FromString(rl_completer_word_break_characters);
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
502 }
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
503
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
504 PyDoc_STRVAR(doc_get_completer_delims,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
505 "get_completer_delims() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
506 get the readline word delimiters for tab-completion");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
507
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
508
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
509 /* Set the completer function */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
510
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
511 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
512 set_completer(PyObject *self, PyObject *args)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
513 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
514 return set_hook("completer", &completer, args);
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
515 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
516
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
517 PyDoc_STRVAR(doc_set_completer,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
518 "set_completer([function]) -> None\n\
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
519 Set or remove the completer function.\n\
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
520 The function is called as function(text, state),\n\
18932
dab95ca8acfc Cleaned up the docstring for readline.set_completer().
Fred Drake <fdrake@acm.org>
parents: 18474
diff changeset
521 for state in 0, 1, 2, ..., until it returns a non-string.\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
522 It should return the next possible completion starting with 'text'.");
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
523
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
524
27530
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
525 static PyObject *
28122
39cb917b5f7a get_completer() takes no args
Neal Norwitz <nnorwitz@gmail.com>
parents: 27995
diff changeset
526 get_completer(PyObject *self, PyObject *noargs)
27530
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
527 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
528 if (completer == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
529 Py_RETURN_NONE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
530 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
531 Py_INCREF(completer);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
532 return completer;
27530
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
533 }
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
534
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
535 PyDoc_STRVAR(doc_get_completer,
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
536 "get_completer() -> function\n\
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
537 \n\
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
538 Returns current completer function.");
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
539
63686
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
540 /* Private function to get current length of history. XXX It may be
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
541 * possible to replace this with a direct use of history_length instead,
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
542 * but it's not clear whether BSD's libedit keeps history_length up to date.
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
543 * See issue #8065.*/
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
544
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
545 static int
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
546 _py_get_history_length(void)
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
547 {
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
548 HISTORY_STATE *hist_st = history_get_history_state();
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
549 int length = hist_st->length;
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
550 /* the history docs don't say so, but the address of hist_st changes each
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
551 time history_get_history_state is called which makes me think it's
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
552 freshly malloc'd memory... on the other hand, the address of the last
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
553 line stays the same as long as history isn't extended, so it appears to
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
554 be malloc'd but managed by the history package... */
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
555 free(hist_st);
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
556 return length;
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
557 }
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
558
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
559 /* Exported function to get any element of history */
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
560
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
561 static PyObject *
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
562 get_history_item(PyObject *self, PyObject *args)
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
563 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
564 int idx = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
565 HIST_ENTRY *hist_ent;
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
566
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
567 if (!PyArg_ParseTuple(args, "i:index", &idx))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
568 return NULL;
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
569 #ifdef __APPLE__
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
570 if (using_libedit_emulation) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
571 /* Libedit emulation uses 0-based indexes,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
572 * the real one uses 1-based indexes,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
573 * adjust the index to ensure that Python
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
574 * code doesn't have to worry about the
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
575 * difference.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
576 */
63685
33d2f4245561 Issue #8065: Fix another memory leak in readline module, from failure to free
Mark Dickinson <dickinsm@gmail.com>
parents: 63682
diff changeset
577 int length = _py_get_history_length();
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
578 idx --;
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
579
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
580 /*
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
581 * Apple's readline emulation crashes when
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
582 * the index is out of range, therefore
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
583 * test for that and fail gracefully.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
584 */
63685
33d2f4245561 Issue #8065: Fix another memory leak in readline module, from failure to free
Mark Dickinson <dickinsm@gmail.com>
parents: 63682
diff changeset
585 if (idx < 0 || idx >= length) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
586 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
587 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
588 }
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
589 #endif /* __APPLE__ */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
590 if ((hist_ent = history_get(idx)))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
591 return PyUnicode_FromString(hist_ent->line);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
592 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
593 Py_RETURN_NONE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
594 }
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
595 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
596
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
597 PyDoc_STRVAR(doc_get_history_item,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
598 "get_history_item() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
599 return the current contents of history item at index.");
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
600
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
601
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
602 /* Exported function to get current length of history */
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
603
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
604 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
605 get_current_history_length(PyObject *self, PyObject *noarg)
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
606 {
63686
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
607 return PyLong_FromLong((long)_py_get_history_length());
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
608 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
609
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
610 PyDoc_STRVAR(doc_get_current_history_length,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
611 "get_current_history_length() -> integer\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
612 return the current (not the maximum) length of history.");
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
613
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
614
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
615 /* Exported function to read the current line buffer */
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
616
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
617 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
618 get_line_buffer(PyObject *self, PyObject *noarg)
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
619 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
620 return PyUnicode_FromString(rl_line_buffer);
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
621 }
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
622
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
623 PyDoc_STRVAR(doc_get_line_buffer,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
624 "get_line_buffer() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
625 return the current contents of the line buffer.");
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
626
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
627
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
628 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
629
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
630 /* Exported function to clear the current history */
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
631
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
632 static PyObject *
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
633 py_clear_history(PyObject *self, PyObject *noarg)
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
634 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
635 clear_history();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
636 Py_RETURN_NONE;
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
637 }
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
638
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
639 PyDoc_STRVAR(doc_clear_history,
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
640 "clear_history() -> None\n\
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
641 Clear the current readline history.");
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
642 #endif
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
643
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
644
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
645 /* Exported function to insert text into the line buffer */
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
646
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
647 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
648 insert_text(PyObject *self, PyObject *args)
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
649 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
650 char *s;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
651 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
652 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
653 rl_insert_text(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
654 Py_RETURN_NONE;
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
655 }
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
656
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
657 PyDoc_STRVAR(doc_insert_text,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
658 "insert_text(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
659 Insert text into the command line.");
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
660
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
661
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
662 /* Redisplay the line buffer */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
663
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
664 static PyObject *
27531
d11223daaf61 I was in this module anyway, so I did some janitorial things.
Michael W. Hudson <mwh@python.net>
parents: 27530
diff changeset
665 redisplay(PyObject *self, PyObject *noarg)
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
666 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
667 rl_redisplay();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
668 Py_RETURN_NONE;
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
669 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
670
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
671 PyDoc_STRVAR(doc_redisplay,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
672 "redisplay() -> None\n\
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
673 Change what's displayed on the screen to reflect the current\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
674 contents of the line buffer.");
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
675
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
676
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
677 /* Table of functions exported by the module */
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
678
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
679 static struct PyMethodDef readline_methods[] =
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
680 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
681 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
682 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
683 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
684 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
685 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
686 {"read_history_file", read_history_file,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
687 METH_VARARGS, doc_read_history_file},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
688 {"write_history_file", write_history_file,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
689 METH_VARARGS, doc_write_history_file},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
690 {"get_history_item", get_history_item,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
691 METH_VARARGS, doc_get_history_item},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
692 {"get_current_history_length", (PyCFunction)get_current_history_length,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
693 METH_NOARGS, doc_get_current_history_length},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
694 {"set_history_length", set_history_length,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
695 METH_VARARGS, set_history_length_doc},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
696 {"get_history_length", get_history_length,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
697 METH_NOARGS, get_history_length_doc},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
698 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
699 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
700 {"get_completion_type", get_completion_type,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
701 METH_NOARGS, doc_get_completion_type},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
702 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
703 {"get_endidx", get_endidx, METH_NOARGS, doc_get_endidx},
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
704
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
705 {"set_completer_delims", set_completer_delims,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
706 METH_VARARGS, doc_set_completer_delims},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
707 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
708 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
709 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
710 {"get_completer_delims", get_completer_delims,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
711 METH_NOARGS, doc_get_completer_delims},
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
712
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
713 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
714 METH_VARARGS, doc_set_completion_display_matches_hook},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
715 {"set_startup_hook", set_startup_hook,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
716 METH_VARARGS, doc_set_startup_hook},
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
717 #ifdef HAVE_RL_PRE_INPUT_HOOK
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
718 {"set_pre_input_hook", set_pre_input_hook,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
719 METH_VARARGS, doc_set_pre_input_hook},
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
720 #endif
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
721 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
722 {"clear_history", py_clear_history, METH_NOARGS, doc_clear_history},
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
723 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
724 {0, 0}
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
725 };
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
726
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
727
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
728 /* C function to call the Python hooks. */
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
729
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
730 static int
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
731 on_hook(PyObject *func)
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
732 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
733 int result = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
734 if (func != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
735 PyObject *r;
43877
1165d261fb05 Merged revisions 58947-59004 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43829
diff changeset
736 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
737 PyGILState_STATE gilstate = PyGILState_Ensure();
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
738 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
739 r = PyObject_CallFunction(func, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
740 if (r == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
741 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
742 if (r == Py_None)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
743 result = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
744 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
745 result = PyLong_AsLong(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
746 if (result == -1 && PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
747 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
748 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
749 Py_DECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
750 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
751 error:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
752 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
753 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
754 done:
43877
1165d261fb05 Merged revisions 58947-59004 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 43829
diff changeset
755 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
756 PyGILState_Release(gilstate);
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
757 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
758 return result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
759 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
760 return result;
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
761 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
762
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
763 static int
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
764 on_startup_hook(void)
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
765 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
766 return on_hook(startup_hook);
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
767 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
768
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
769 #ifdef HAVE_RL_PRE_INPUT_HOOK
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
770 static int
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
771 on_pre_input_hook(void)
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
772 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
773 return on_hook(pre_input_hook);
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
774 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
775 #endif
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
776
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
777
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
778 /* C function to call the Python completion_display_matches */
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
779
65510
ce9f5ce33ad2 Fix compiler warning about unused static function.
Georg Brandl <georg@python.org>
parents: 64234
diff changeset
780 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
781 static void
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
782 on_completion_display_matches_hook(char **matches,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
783 int num_matches, int max_length)
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
784 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
785 int i;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
786 PyObject *m=NULL, *s=NULL, *r=NULL;
43818
5a169de36de7 Fixed some of the bugs in the readline module. #1425 is still open and several methods don't do enough error checks.
Christian Heimes <christian@cheimes.de>
parents: 43292
diff changeset
787 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
788 PyGILState_STATE gilstate = PyGILState_Ensure();
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
789 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
790 m = PyList_New(num_matches);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
791 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
792 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
793 for (i = 0; i < num_matches; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
794 s = PyUnicode_FromString(matches[i+1]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
795 if (s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
796 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
797 if (PyList_SetItem(m, i, s) == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
798 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
799 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
800 r = PyObject_CallFunction(completion_display_matches_hook,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
801 "sOi", matches[0], m, max_length);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
802
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
803 Py_DECREF(m); m=NULL;
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
804
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
805 if (r == NULL ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
806 (r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
807 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
808 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
809 Py_XDECREF(r); r=NULL;
43829
7bc4cc972b0b Merged revisions 58939-58946 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43818
diff changeset
810
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
811 if (0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
812 error:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
813 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
814 Py_XDECREF(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
815 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
816 }
43818
5a169de36de7 Fixed some of the bugs in the readline module. #1425 is still open and several methods don't do enough error checks.
Christian Heimes <christian@cheimes.de>
parents: 43292
diff changeset
817 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
818 PyGILState_Release(gilstate);
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
819 #endif
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
820 }
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
821
65927
46241a35b5fc Fix Issue 10307 - compile error in readline.c
Senthil Kumaran <orsenthil@gmail.com>
parents: 65510
diff changeset
822 #endif
43292
876b7ef4775d Merged revisions 57778-58052 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 41554
diff changeset
823
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
824 /* C function to call the Python completer. */
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
825
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
826 static char *
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
827 on_completion(const char *text, int state)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
828 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
829 char *result = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
830 if (completer != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
831 PyObject *r;
43818
5a169de36de7 Fixed some of the bugs in the readline module. #1425 is still open and several methods don't do enough error checks.
Christian Heimes <christian@cheimes.de>
parents: 43292
diff changeset
832 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
833 PyGILState_STATE gilstate = PyGILState_Ensure();
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
834 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
835 rl_attempted_completion_over = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
836 r = PyObject_CallFunction(completer, "si", text, state);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
837 if (r == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
838 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
839 if (r == Py_None) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
840 result = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
841 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
842 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
843 char *s = _PyUnicode_AsString(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
844 if (s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
845 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
846 result = strdup(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
847 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
848 Py_DECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
849 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
850 error:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
851 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
852 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
853 done:
43818
5a169de36de7 Fixed some of the bugs in the readline module. #1425 is still open and several methods don't do enough error checks.
Christian Heimes <christian@cheimes.de>
parents: 43292
diff changeset
854 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
855 PyGILState_Release(gilstate);
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
856 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
857 return result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
858 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
859 return result;
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
860 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
861
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
862
27136
3d2962b0249e Fix from Michael Stone for SF bug #660476 and #513033 (bogus thread
Guido van Rossum <guido@python.org>
parents: 27135
diff changeset
863 /* A more flexible constructor that saves the "begidx" and "endidx"
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
864 * before calling the normal completer */
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
865
27995
e11a178bb453 flex_complete looks like a private (but callback) function, so make it static
Neal Norwitz <nnorwitz@gmail.com>
parents: 27531
diff changeset
866 static char **
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
867 flex_complete(char *text, int start, int end)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
868 {
56631
e6c4dbb5db02 Merged revisions 75533 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52951
diff changeset
869 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
870 rl_completion_append_character ='\0';
56762
6da0ae680fb6 Merged revisions 75726 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56631
diff changeset
871 #endif
6da0ae680fb6 Merged revisions 75726 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56631
diff changeset
872 #ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
873 rl_completion_suppress_append = 0;
56631
e6c4dbb5db02 Merged revisions 75533 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52951
diff changeset
874 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
875 Py_XDECREF(begidx);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
876 Py_XDECREF(endidx);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
877 begidx = PyLong_FromLong((long) start);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
878 endidx = PyLong_FromLong((long) end);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
879 return completion_matches(text, *on_completion);
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
880 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
881
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
882
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
883 /* Helper to initialize GNU readline properly. */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
884
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
885 static void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13644
diff changeset
886 setup_readline(void)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
887 {
25684
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
888 #ifdef SAVE_LOCALE
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
889 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
890 if (!saved_locale)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
891 Py_FatalError("not enough memory to save locale");
25684
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
892 #endif
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
893
67003
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
894 #ifdef __APPLE__
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
895 /* the libedit readline emulation resets key bindings etc
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
896 * when calling rl_initialize. So call it upfront
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
897 */
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
898 if (using_libedit_emulation)
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
899 rl_initialize();
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
900 #endif /* __APPLE__ */
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
901
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
902 using_history();
23782
54f6f89139db patch #562492 - prevent duplicate lines in history
Skip Montanaro <skip@pobox.com>
parents: 23580
diff changeset
903
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
904 rl_readline_name = "python";
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21940
diff changeset
905 #if defined(PYOS_OS2) && defined(PYCC_GCC)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
906 /* Allow $if term= in .inputrc to work */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
907 rl_terminal_name = getenv("TERM");
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21940
diff changeset
908 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
909 /* Force rebind of TAB to insert-tab */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
910 rl_bind_key('\t', rl_insert);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
911 /* Bind both ESC-TAB and ESC-ESC to the completion function */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
912 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
913 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
914 /* Set our hook functions */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
915 rl_startup_hook = (Function *)on_startup_hook;
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
916 #ifdef HAVE_RL_PRE_INPUT_HOOK
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
917 rl_pre_input_hook = (Function *)on_pre_input_hook;
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
918 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
919 /* Set our completion function */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
920 rl_attempted_completion_function = (CPPFunction *)flex_complete;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
921 /* Set Python word break characters */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
922 rl_completer_word_break_characters =
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
923 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
924 /* All nonalphanums except '.' */
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
925
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
926 begidx = PyLong_FromLong(0L);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
927 endidx = PyLong_FromLong(0L);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
928 /* Initialize (allows .inputrc to override)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
929 *
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
930 * XXX: A bug in the readline-2.2 library causes a memory leak
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
931 * inside this function. Nothing we can do about it.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
932 */
67003
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
933 #ifdef __APPLE__
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
934 if (using_libedit_emulation)
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
935 rl_read_init_file(NULL);
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
936 else
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
937 #endif /* __APPLE__ */
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
938 rl_initialize();
a5ed4a12430a #9907: call rl_initialize early when using editline on OSX
R. David Murray <rdmurray@bitdance.com>
parents: 65927
diff changeset
939
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
940 RESTORE_LOCALE(saved_locale)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
941 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
942
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
943 /* Wrapper around GNU readline that handles signals differently. */
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
944
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
945
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
946 #if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
947
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
948 static char *completed_input_string;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
949 static void
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
950 rlhandler(char *text)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
951 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
952 completed_input_string = text;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
953 rl_callback_handler_remove();
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
954 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
955
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
956 extern PyThreadState* _PyOS_ReadlineTState;
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
957
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
958 static char *
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
959 readline_until_enter_or_signal(char *prompt, int *signal)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
960 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
961 char * not_done_reading = "";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
962 fd_set selectset;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
963
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
964 *signal = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
965 #ifdef HAVE_RL_CATCH_SIGNAL
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
966 rl_catch_signals = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
967 #endif
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
968
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
969 rl_callback_handler_install (prompt, rlhandler);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
970 FD_ZERO(&selectset);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
971
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
972 completed_input_string = not_done_reading;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
973
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
974 while (completed_input_string == not_done_reading) {
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
975 int has_input = 0, err = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
976
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
977 while (!has_input)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
978 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
979
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
980 /* [Bug #1552726] Only limit the pause if an input hook has been
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
981 defined. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
982 struct timeval *timeoutp = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
983 if (PyOS_InputHook)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
984 timeoutp = &timeout;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
985 FD_SET(fileno(rl_instream), &selectset);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
986 /* select resets selectset if no input was available */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
987 has_input = select(fileno(rl_instream) + 1, &selectset,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
988 NULL, NULL, timeoutp);
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
989 err = errno;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
990 if(PyOS_InputHook) PyOS_InputHook();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
991 }
33686
1701dae6474e This is Michiel de Hoon's patch, as attached to the bug report:
Michael W. Hudson <mwh@python.net>
parents: 33255
diff changeset
992
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
993 if (has_input > 0) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
994 rl_callback_read_char();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
995 }
73996
6a966179c73a Issue #10350: Read and save errno before calling a function which might overwrite it.
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
996 else if (err == EINTR) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
997 int s;
34877
9a7f46c42773 In a threads-disabled build, typing Ctrl-C into a raw_input() crashed,
Michael W. Hudson <mwh@python.net>
parents: 34843
diff changeset
998 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
999 PyEval_RestoreThread(_PyOS_ReadlineTState);
34877
9a7f46c42773 In a threads-disabled build, typing Ctrl-C into a raw_input() crashed,
Michael W. Hudson <mwh@python.net>
parents: 34843
diff changeset
1000 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1001 s = PyErr_CheckSignals();
34877
9a7f46c42773 In a threads-disabled build, typing Ctrl-C into a raw_input() crashed,
Michael W. Hudson <mwh@python.net>
parents: 34843
diff changeset
1002 #ifdef WITH_THREAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1003 PyEval_SaveThread();
34877
9a7f46c42773 In a threads-disabled build, typing Ctrl-C into a raw_input() crashed,
Michael W. Hudson <mwh@python.net>
parents: 34843
diff changeset
1004 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1005 if (s < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1006 rl_free_line_state();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1007 rl_cleanup_after_signal();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1008 rl_callback_handler_remove();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1009 *signal = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1010 completed_input_string = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1011 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1012 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1013 }
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1014
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1015 return completed_input_string;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1016 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1017
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1018
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1019 #else
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1020
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1021 /* Interrupt handler */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1022
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1023 static jmp_buf jbuf;
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1024
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1025 /* ARGSUSED */
13676
5423b132bc97 Removed all instances of RETSIGTYPE from the source code: signal
Tim Peters <tim.peters@gmail.com>
parents: 13665
diff changeset
1026 static void
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
1027 onintr(int sig)
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1028 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1029 longjmp(jbuf, 1);
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1030 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1031
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1032
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1033 static char *
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1034 readline_until_enter_or_signal(char *prompt, int *signal)
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1035 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1036 PyOS_sighandler_t old_inthandler;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1037 char *p;
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
1038
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1039 *signal = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1040
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1041 old_inthandler = PyOS_setsig(SIGINT, onintr);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1042 if (setjmp(jbuf)) {
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1043 #ifdef HAVE_SIGRELSE
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1044 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1045 sigrelse(SIGINT);
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1046 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1047 PyOS_setsig(SIGINT, old_inthandler);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1048 *signal = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1049 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1050 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1051 rl_event_hook = PyOS_InputHook;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1052 p = readline(prompt);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1053 PyOS_setsig(SIGINT, old_inthandler);
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1054
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1055 return p;
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1056 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1057 #endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1058
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1059
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1060 static char *
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1061 call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1062 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1063 size_t n;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1064 char *p, *q;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1065 int signal;
33255
3fbd2d1ca5bb SF #1015517, get readline to compile with older compilers
Neal Norwitz <nnorwitz@gmail.com>
parents: 33206
diff changeset
1066
33177
17973f2e3e0e Patch #914291: Restore locale while readline is running.
Martin v. Löwis <martin@v.loewis.de>
parents: 33153
diff changeset
1067 #ifdef SAVE_LOCALE
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1068 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1069 if (!saved_locale)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1070 Py_FatalError("not enough memory to save locale");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1071 setlocale(LC_CTYPE, "");
33177
17973f2e3e0e Patch #914291: Restore locale while readline is running.
Martin v. Löwis <martin@v.loewis.de>
parents: 33153
diff changeset
1072 #endif
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1073
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1074 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1075 rl_instream = sys_stdin;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1076 rl_outstream = sys_stdout;
26849
bca5409b76ec Patch 659834 by Magnus Lie Hetland:
Guido van Rossum <guido@python.org>
parents: 25924
diff changeset
1077 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1078 rl_prep_terminal (1);
26849
bca5409b76ec Patch 659834 by Magnus Lie Hetland:
Guido van Rossum <guido@python.org>
parents: 25924
diff changeset
1079 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1080 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1081
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1082 p = readline_until_enter_or_signal(prompt, &signal);
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
1083
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1084 /* we got an interrupt signal */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1085 if (signal) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1086 RESTORE_LOCALE(saved_locale)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1087 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1088 }
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1089
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1090 /* We got an EOF, return a empty string. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1091 if (p == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1092 p = PyMem_Malloc(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1093 if (p != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1094 *p = '\0';
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1095 RESTORE_LOCALE(saved_locale)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1096 return p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1097 }
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1098
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1099 /* we have a valid line */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1100 n = strlen(p);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1101 if (n > 0) {
64234
1c8834f3cdb9 Under OS X, history_get from readline returns a const char *, but the local
Brett Cannon <bcannon@gmail.com>
parents: 63685
diff changeset
1102 const char *line;
63686
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
1103 int length = _py_get_history_length();
dc20df9c9ba9 Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63683
diff changeset
1104 if (length > 0)
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1105 #ifdef __APPLE__
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1106 if (using_libedit_emulation) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1107 /*
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1108 * Libedit's emulation uses 0-based indexes,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1109 * the real readline uses 1-based indexes.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1110 */
64234
1c8834f3cdb9 Under OS X, history_get from readline returns a const char *, but the local
Brett Cannon <bcannon@gmail.com>
parents: 63685
diff changeset
1111 line = (const char *)history_get(length - 1)->line;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1112 } else
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1113 #endif /* __APPLE__ */
64234
1c8834f3cdb9 Under OS X, history_get from readline returns a const char *, but the local
Brett Cannon <bcannon@gmail.com>
parents: 63685
diff changeset
1114 line = (const char *)history_get(length)->line;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1115 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1116 line = "";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1117 if (strcmp(p, line))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1118 add_history(p);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1119 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1120 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1121 release the original. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1122 q = p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1123 p = PyMem_Malloc(n+2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1124 if (p != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1125 strncpy(p, q, n);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1126 p[n] = '\n';
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1127 p[n+1] = '\0';
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1128 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1129 free(q);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1130 RESTORE_LOCALE(saved_locale)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1131 return p;
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1132 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1133
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1134
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1135 /* Initialize the module */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1136
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
1137 PyDoc_STRVAR(doc_module,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
1138 "Importing this module enables command line editing using GNU readline.");
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1139
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1140 #ifdef __APPLE__
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1141 PyDoc_STRVAR(doc_module_le,
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1142 "Importing this module enables command line editing using libedit readline.");
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1143 #endif /* __APPLE__ */
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
1144
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
1145 static struct PyModuleDef readlinemodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1146 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1147 "readline",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1148 doc_module,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1149 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1150 readline_methods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1151 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1152 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1153 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1154 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
1155 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
1156
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1157
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
1158 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 44099
diff changeset
1159 PyInit_readline(void)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1160 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1161 PyObject *m;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1162
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1163 #ifdef __APPLE__
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1164 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1165 using_libedit_emulation = 1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1166 }
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1167
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1168 if (using_libedit_emulation)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58869
diff changeset
1169 readlinemodule.m_doc = doc_module_le;
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1170
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1171 #endif /* __APPLE__ */
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1172
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1173 m = PyModule_Create(&readlinemodule);
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1174
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1175 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1176 return NULL;
25924
dc4a0336a2a3 Patch #512981: Update readline input stream on sys.stdin/out change.
Martin v. Löwis <martin@v.loewis.de>
parents: 25684
diff changeset
1177
56135
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1178
1c50dc213312 Merged revisions 74970 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 52951
diff changeset
1179
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1180 PyOS_ReadlineFunctionPointer = call_readline;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1181 setup_readline();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 56762
diff changeset
1182 return m;
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1183 }