annotate Modules/readline.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b36cb4602e21
children 12223782031f
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
39098
50b0b54fb17d Fix memory leaks in some conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
23 #ifdef SAVE_LOCALE
50b0b54fb17d Fix memory leaks in some conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
24 # define RESTORE_LOCALE(sl) { setlocale(LC_CTYPE, sl); free(sl); }
50b0b54fb17d Fix memory leaks in some conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
25 #else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
26 # define RESTORE_LOCALE(sl)
39098
50b0b54fb17d Fix memory leaks in some conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36324
diff changeset
27 #endif
50b0b54fb17d Fix memory leaks in some conditions.
Neal Norwitz <nnorwitz@gmail.com>
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) \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
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: 39802
diff changeset
37 #else
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
38 #if defined(_RL_FUNCTION_TYPEDEF)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 39802
diff changeset
39 extern char **completion_matches(char *, rl_compentry_func_t *);
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
40 #else
58868
2b9b21b830d9 Add guard around the prototype for completion_matches to enable
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56760
diff changeset
41
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
42 #if !defined(__APPLE__)
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
43 extern char **completion_matches(char *, CPFunction *);
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
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
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
46 #endif
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
47
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
48 #ifdef __APPLE__
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
49 /*
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
50 * It is possible to link the readline module to the readline
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
51 * emulation library of editline/libedit.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
52 *
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
53 * On OSX this emulation library is not 100% API compatible
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
54 * with the "real" readline and cannot be detected at compile-time,
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
55 * hence we use a runtime check to detect if we're using libedit
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
56 *
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
57 * Currently there is one know API incompatibility:
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
58 * - 'get_history' has a 1-based index with GNU readline, and a 0-based
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
59 * index with libedit's emulation.
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
60 * - Note that replace_history and remove_history use a 0-based index
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
61 * with both implementation.
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
62 */
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
63 static int using_libedit_emulation = 0;
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
64 static const char libedit_version_tag[] = "EditLine wrapper";
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
65 #endif /* __APPLE__ */
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
66
43825
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
67 static void
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
68 on_completion_display_matches_hook(char **matches,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
69 int num_matches, int max_length);
43825
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
70
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
71
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
72 /* 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
73
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
74 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
75 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
76 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
77 char *s, *copy;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
78 if (!PyArg_ParseTuple(args, "s:parse_and_bind", &s))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
79 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
80 /* Make a copy -- rl_parse_and_bind() modifies its argument */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
81 /* Bernard Herzog */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
82 copy = malloc(1 + strlen(s));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
83 if (copy == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
84 return PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
85 strcpy(copy, s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
86 rl_parse_and_bind(copy);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
87 free(copy); /* Free the copy */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
88 Py_RETURN_NONE;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
89 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
90
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
91 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
92 "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
93 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
94
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 /* 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
97
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
98 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
99 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
100 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
101 char *s = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
102 if (!PyArg_ParseTuple(args, "|z:read_init_file", &s))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
103 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
104 errno = rl_read_init_file(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
105 if (errno)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
106 return PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
107 Py_RETURN_NONE;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
108 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
109
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
110 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
111 "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
112 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
113 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
114
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
115
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
116 /* 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
117
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
118 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
119 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
120 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
121 char *s = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
122 if (!PyArg_ParseTuple(args, "|z:read_history_file", &s))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
123 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
124 errno = read_history(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
125 if (errno)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
126 return PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
127 Py_RETURN_NONE;
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
128 }
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
129
34027
7e99b0680adf Rename a static variable "history_length" to "_history_length".
Hye-Shik Chang <hyeshik@gmail.com>
parents: 33686
diff changeset
130 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
131 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
132 "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
133 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
134 The default filename is ~/.history.");
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
135
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
136
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
137 /* 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
138
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
139 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
140 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
141 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
142 char *s = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
143 if (!PyArg_ParseTuple(args, "|z:write_history_file", &s))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
144 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
145 errno = write_history(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
146 if (!errno && _history_length >= 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
147 history_truncate_file(s, _history_length);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
148 if (errno)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
149 return PyErr_SetFromErrno(PyExc_IOError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
150 Py_RETURN_NONE;
13387
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
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
153 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
154 "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
155 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
156 The default filename is ~/.history.");
13387
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
157
1be4665190f0 added read_history_file and write_history_file
Skip Montanaro <skip@pobox.com>
parents: 13084
diff changeset
158
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
159 /* Set history length */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
160
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
161 static PyObject*
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
162 set_history_length(PyObject *self, PyObject *args)
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
163 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
164 int length = _history_length;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
165 if (!PyArg_ParseTuple(args, "i:set_history_length", &length))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
166 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
167 _history_length = length;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
168 Py_RETURN_NONE;
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
169 }
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
170
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
171 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
172 "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
173 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
174 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
175 history truncation.");
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
176
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
177
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
178 /* Get history length */
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
179
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
180 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
181 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
182 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
183 return PyInt_FromLong(_history_length);
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
184 }
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
185
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
186 PyDoc_STRVAR(get_history_length_doc,
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
187 "get_history_length() -> int\n\
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
188 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
189 the history file.");
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
190
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
191
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
192 /* 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
193
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
194 static PyObject *
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
195 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
196 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
197 PyObject *function = Py_None;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
198 char buf[80];
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
199 PyOS_snprintf(buf, sizeof(buf), "|O:set_%.50s", funcname);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
200 if (!PyArg_ParseTuple(args, buf, &function))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
201 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
202 if (function == Py_None) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
203 Py_XDECREF(*hook_var);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
204 *hook_var = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
205 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
206 else if (PyCallable_Check(function)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
207 PyObject *tmp = *hook_var;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
208 Py_INCREF(function);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
209 *hook_var = function;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
210 Py_XDECREF(tmp);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
211 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
212 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
213 PyOS_snprintf(buf, sizeof(buf),
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
214 "set_%.50s(func): argument not callable",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
215 funcname);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
216 PyErr_SetString(PyExc_TypeError, buf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
217 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
218 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
219 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
220 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
221
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
222
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
223 /* 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
224
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
225 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
226 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
227
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
228 #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
229 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
230 #endif
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
231
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
232 static PyObject *
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
233 set_completion_display_matches_hook(PyObject *self, PyObject *args)
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
234 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
235 PyObject *result = set_hook("completion_display_matches_hook",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
236 &completion_display_matches_hook, args);
43825
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
237 #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
238 /* We cannot set this hook globally, since it replaces the
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
239 default completion display. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
240 rl_completion_display_matches_hook =
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
241 completion_display_matches_hook ?
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
242 #if defined(_RL_FUNCTION_TYPEDEF)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
243 (rl_compdisp_func_t *)on_completion_display_matches_hook : 0;
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
244 #else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
245 (VFunction *)on_completion_display_matches_hook : 0;
49641
a529e3dc695a Merged revisions 67098 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 47527
diff changeset
246 #endif
43825
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
247 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
248 return result;
43825
29bece147893 Only set rl_completion_display_matches_hook if there
Martin v. Löwis <martin@v.loewis.de>
parents: 43228
diff changeset
249
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
250 }
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
251
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
252 PyDoc_STRVAR(doc_set_completion_display_matches_hook,
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
253 "set_completion_display_matches_hook([function]) -> None\n\
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
254 Set or remove the completion display function.\n\
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
255 The function is called as\n\
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
256 function(substitution, [matches], longest_match_length)\n\
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
257 once each time matches need to be displayed.");
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
258
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
259 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
260 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
261 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
262 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
263 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
264
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
265 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
266 "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
267 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
268 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
269 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
270
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
271
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
272 #ifdef HAVE_RL_PRE_INPUT_HOOK
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
273
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
274 /* Set pre-input hook */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
275
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
276 static PyObject *
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
277 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
278 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
279 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
280 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
281
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
282 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
283 "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
284 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
285 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
286 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
287 characters.");
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
288
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
289 #endif
13644
2d5aa212a322 added history file truncation based upon code from Johannes Zellner.
Skip Montanaro <skip@pobox.com>
parents: 13496
diff changeset
290
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
291
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
292 /* 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
293
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
294 static PyObject *completer = NULL;
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
295
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
296 static PyObject *begidx = NULL;
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
297 static PyObject *endidx = NULL;
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
298
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
299
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
300 /* Get the completion type for the scope of the tab-completion */
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
301 static PyObject *
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
302 get_completion_type(PyObject *self, PyObject *noarg)
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
303 {
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
304 return PyInt_FromLong(rl_completion_type);
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
305 }
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
306
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
307 PyDoc_STRVAR(doc_get_completion_type,
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
308 "get_completion_type() -> int\n\
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
309 Get the type of completion being attempted.");
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
310
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
311
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
312 /* Get the beginning index for the scope of the tab-completion */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
313
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
314 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
315 get_begidx(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
316 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
317 Py_INCREF(begidx);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
318 return begidx;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
319 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
320
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
321 PyDoc_STRVAR(doc_get_begidx,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
322 "get_begidx() -> int\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
323 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
324
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
325
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
326 /* Get the ending index for the scope of the tab-completion */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
327
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
328 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
329 get_endidx(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
330 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
331 Py_INCREF(endidx);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
332 return endidx;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
333 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
334
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
335 PyDoc_STRVAR(doc_get_endidx,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
336 "get_endidx() -> int\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
337 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
338
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
339
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
340 /* 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
341
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
342 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
343 set_completer_delims(PyObject *self, PyObject *args)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
344 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
345 char *break_chars;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
346
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
347 if(!PyArg_ParseTuple(args, "s:set_completer_delims", &break_chars)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
348 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
349 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
350 free((void*)rl_completer_word_break_characters);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
351 rl_completer_word_break_characters = strdup(break_chars);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
352 Py_RETURN_NONE;
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
353 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
354
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
355 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
356 "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
357 set the readline word delimiters for tab-completion");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
358
63684
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
359 /* _py_free_history_entry: Utility function to free a history entry. */
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
360
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
361 #if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
362
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
363 /* Readline version >= 5.0 introduced a timestamp field into the history entry
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
364 structure; this needs to be freed to avoid a memory leak. This version of
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
365 readline also introduced the handy 'free_history_entry' function, which
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
366 takes care of the timestamp. */
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
367
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
368 static void
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
369 _py_free_history_entry(HIST_ENTRY *entry)
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
370 {
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
371 histdata_t data = free_history_entry(entry);
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
372 free(data);
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
373 }
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
374
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
375 #else
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
376
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
377 /* No free_history_entry function; free everything manually. */
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
378
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
379 static void
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
380 _py_free_history_entry(HIST_ENTRY *entry)
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
381 {
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
382 if (entry->line)
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
383 free((void *)entry->line);
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
384 if (entry->data)
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
385 free(entry->data);
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
386 free(entry);
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
387 }
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
388
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
389 #endif
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
390
33136
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
391 static PyObject *
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
392 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
393 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
394 int entry_number;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
395 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
396
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
397 if (!PyArg_ParseTuple(args, "i:remove_history", &entry_number))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
398 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
399 if (entry_number < 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
400 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
401 "History index cannot be negative");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
402 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
403 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
404 entry = remove_history(entry_number);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
405 if (!entry) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
406 PyErr_Format(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
407 "No history item at position %d",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
408 entry_number);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
409 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
410 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
411 /* free memory allocated for the history entry */
63684
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
412 _py_free_history_entry(entry);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
413 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
414 }
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
415
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
416 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
417 "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
418 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
419
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
420 static PyObject *
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
421 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
422 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
423 int entry_number;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
424 char *line;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
425 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
426
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
427 if (!PyArg_ParseTuple(args, "is:replace_history", &entry_number,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
428 &line)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
429 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
430 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
431 if (entry_number < 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
432 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
433 "History index cannot be negative");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
434 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
435 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
436 old_entry = replace_history_entry(entry_number, line, (void *)NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
437 if (!old_entry) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
438 PyErr_Format(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
439 "No history item at position %d",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
440 entry_number);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
441 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
442 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
443 /* free memory allocated for the old history entry */
63684
63e1d0dc44ee Merged revisions 83667 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 61463
diff changeset
444 _py_free_history_entry(old_entry);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
445 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
446 }
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
447
1d9835082be5 Add get_history_item and replace_history_item functions to the readline
Skip Montanaro <skip@pobox.com>
parents: 32549
diff changeset
448 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
449 "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
450 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
451
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
452 /* Add a line to the history buffer */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
453
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
454 static PyObject *
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
455 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
456 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
457 char *line;
20550
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
458
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
459 if(!PyArg_ParseTuple(args, "s:add_history", &line)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
460 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
461 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
462 add_history(line);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
463 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
464 }
6a5a10a5b526 SF patch #443759: Add Interface to readline's add_history
Guido van Rossum <guido@python.org>
parents: 20188
diff changeset
465
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
466 PyDoc_STRVAR(doc_add_history,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
467 "add_history(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
468 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
469
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
470
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
471 /* 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
472
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
473 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
474 get_completer_delims(PyObject *self, PyObject *noarg)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
475 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
476 return PyString_FromString(rl_completer_word_break_characters);
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
477 }
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
478
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
479 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
480 "get_completer_delims() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
481 get the readline word delimiters for tab-completion");
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
482
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
483
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
484 /* Set the completer function */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
485
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
486 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
487 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
488 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
489 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
490 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
491
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
492 PyDoc_STRVAR(doc_set_completer,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
493 "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
494 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
495 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
496 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
497 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
498
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
499
27530
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
500 static PyObject *
28122
39cb917b5f7a get_completer() takes no args
Neal Norwitz <nnorwitz@gmail.com>
parents: 27995
diff changeset
501 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
502 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
503 if (completer == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
504 Py_RETURN_NONE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
505 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
506 Py_INCREF(completer);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
507 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
508 }
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
509
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
510 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
511 "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
512 \n\
5765d524de71 Add the get_completer() function based on Michael Stone's patch in
Michael W. Hudson <mwh@python.net>
parents: 27136
diff changeset
513 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
514
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
515 /* Private function to get current length of history. XXX It may be
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
516 * possible to replace this with a direct use of history_length instead,
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
517 * but it's not clear whether BSD's libedit keeps history_length up to date.
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
518 * See issue #8065.*/
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
519
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
520 static int
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
521 _py_get_history_length(void)
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
522 {
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
523 HISTORY_STATE *hist_st = history_get_history_state();
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
524 int length = hist_st->length;
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
525 /* the history docs don't say so, but the address of hist_st changes each
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
526 time history_get_history_state is called which makes me think it's
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
527 freshly malloc'd memory... on the other hand, the address of the last
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
528 line stays the same as long as history isn't extended, so it appears to
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
529 be malloc'd but managed by the history package... */
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
530 free(hist_st);
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
531 return length;
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
532 }
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
533
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
534 /* 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
535
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
536 static PyObject *
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
537 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
538 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
539 int idx = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
540 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
541
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
542 if (!PyArg_ParseTuple(args, "i:index", &idx))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
543 return NULL;
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
544 #ifdef __APPLE__
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
545 if (using_libedit_emulation) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
546 /* Libedit emulation uses 0-based indexes,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
547 * the real one uses 1-based indexes,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
548 * adjust the index to ensure that Python
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
549 * code doesn't have to worry about the
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
550 * difference.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
551 */
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
552 int length = _py_get_history_length();
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
553 idx --;
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
554
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
555 /*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
556 * Apple's readline emulation crashes when
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
557 * the index is out of range, therefore
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
558 * test for that and fail gracefully.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
559 */
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
560 if (idx < 0 || idx >= length) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
561 Py_RETURN_NONE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
562 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
563 }
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
564 #endif /* __APPLE__ */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
565 if ((hist_ent = history_get(idx)))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
566 return PyString_FromString(hist_ent->line);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
567 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
568 Py_RETURN_NONE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
569 }
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
570 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
571
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
572 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
573 "get_history_item() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
574 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
575
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
576
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
577 /* 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
578
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
579 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
580 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
581 {
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
582 return PyInt_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
583 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
584
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
585 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
586 "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
587 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
588
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
589
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
590 /* 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
591
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
592 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
593 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
594 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
595 return PyString_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
596 }
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
597
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
598 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
599 "get_line_buffer() -> string\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
600 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
601
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
602
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
603 #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
604
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
605 /* 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
606
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
607 static PyObject *
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
608 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
609 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
610 clear_history();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
611 Py_RETURN_NONE;
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
612 }
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
613
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
614 PyDoc_STRVAR(doc_clear_history,
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
615 "clear_history() -> None\n\
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
616 Clear the current readline history.");
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
617 #endif
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
618
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
619
6429
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
620 /* 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
621
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
622 static PyObject *
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
623 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
624 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
625 char *s;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
626 if (!PyArg_ParseTuple(args, "s:insert_text", &s))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
627 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
628 rl_insert_text(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
629 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
630 }
14a711268c51 Add get_line_buffer() and insert_text(), suggested by Michael McLay.
Guido van Rossum <guido@python.org>
parents: 6338
diff changeset
631
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
632 PyDoc_STRVAR(doc_insert_text,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
633 "insert_text(string) -> None\n\
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
634 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
635
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
636
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
637 /* Redisplay the line buffer */
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
638
22488
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
639 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
640 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
641 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
642 rl_redisplay();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
643 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
644 }
1361f7bb3f19 Add get_history_item, get_current_history_length, and redisplay functions.
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22114
diff changeset
645
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
646 PyDoc_STRVAR(doc_redisplay,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
647 "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
648 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
649 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
650
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
651
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
652 /* 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
653
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 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
655 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
656 {"parse_and_bind", parse_and_bind, METH_VARARGS, doc_parse_and_bind},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
657 {"get_line_buffer", get_line_buffer, METH_NOARGS, doc_get_line_buffer},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
658 {"insert_text", insert_text, METH_VARARGS, doc_insert_text},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
659 {"redisplay", redisplay, METH_NOARGS, doc_redisplay},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
660 {"read_init_file", read_init_file, METH_VARARGS, doc_read_init_file},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
661 {"read_history_file", read_history_file,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
662 METH_VARARGS, doc_read_history_file},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
663 {"write_history_file", write_history_file,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
664 METH_VARARGS, doc_write_history_file},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
665 {"get_history_item", get_history_item,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
666 METH_VARARGS, doc_get_history_item},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
667 {"get_current_history_length", (PyCFunction)get_current_history_length,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
668 METH_NOARGS, doc_get_current_history_length},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
669 {"set_history_length", set_history_length,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
670 METH_VARARGS, set_history_length_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
671 {"get_history_length", get_history_length,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
672 METH_NOARGS, get_history_length_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
673 {"set_completer", set_completer, METH_VARARGS, doc_set_completer},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
674 {"get_completer", get_completer, METH_NOARGS, doc_get_completer},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
675 {"get_completion_type", get_completion_type,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
676 METH_NOARGS, doc_get_completion_type},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
677 {"get_begidx", get_begidx, METH_NOARGS, doc_get_begidx},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
678 {"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
679
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
680 {"set_completer_delims", set_completer_delims,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
681 METH_VARARGS, doc_set_completer_delims},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
682 {"add_history", py_add_history, METH_VARARGS, doc_add_history},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
683 {"remove_history_item", py_remove_history, METH_VARARGS, doc_remove_history},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
684 {"replace_history_item", py_replace_history, METH_VARARGS, doc_replace_history},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
685 {"get_completer_delims", get_completer_delims,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
686 METH_NOARGS, doc_get_completer_delims},
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
687
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
688 {"set_completion_display_matches_hook", set_completion_display_matches_hook,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
689 METH_VARARGS, doc_set_completion_display_matches_hook},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
690 {"set_startup_hook", set_startup_hook,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
691 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
692 #ifdef HAVE_RL_PRE_INPUT_HOOK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
693 {"set_pre_input_hook", set_pre_input_hook,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
694 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
695 #endif
30471
94d829367473 Patch #800697: Add readline.clear_history.
Martin v. Löwis <martin@v.loewis.de>
parents: 29926
diff changeset
696 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
697 {"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
698 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
699 {0, 0}
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 };
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
701
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
702
20188
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
703 /* 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
704
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
705 static int
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
706 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
707 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
708 int result = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
709 if (func != NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
710 PyObject *r;
43834
d7e9bec1feaa readline module cleanup
Christian Heimes <christian@cheimes.de>
parents: 43825
diff changeset
711 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
712 PyGILState_STATE gilstate = PyGILState_Ensure();
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
713 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
714 r = PyObject_CallFunction(func, NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
715 if (r == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
716 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
717 if (r == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
718 result = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
719 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
720 result = PyInt_AsLong(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
721 if (result == -1 && PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
722 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
723 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
724 Py_DECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
725 goto done;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
726 error:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
727 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
728 Py_XDECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
729 done:
43834
d7e9bec1feaa readline module cleanup
Christian Heimes <christian@cheimes.de>
parents: 43825
diff changeset
730 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
731 PyGILState_Release(gilstate);
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
732 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
733 return result;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
734 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
735 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
736 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
737
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
738 static int
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
739 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
740 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
741 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
742 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
743
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
744 #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
745 static int
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
746 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
747 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
748 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
749 }
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
750 #endif
6dda498cccc4 Patch #462122: add readline startup and pre_event hooks.
Martin v. Löwis <martin@v.loewis.de>
parents: 18932
diff changeset
751
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
752
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
753 /* C function to call the Python completion_display_matches */
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
754
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
755 static void
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
756 on_completion_display_matches_hook(char **matches,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
757 int num_matches, int max_length)
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
758 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
759 int i;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
760 PyObject *m=NULL, *s=NULL, *r=NULL;
43834
d7e9bec1feaa readline module cleanup
Christian Heimes <christian@cheimes.de>
parents: 43825
diff changeset
761 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
762 PyGILState_STATE gilstate = PyGILState_Ensure();
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
763 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
764 m = PyList_New(num_matches);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
765 if (m == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
766 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
767 for (i = 0; i < num_matches; i++) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
768 s = PyString_FromString(matches[i+1]);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
769 if (s == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
770 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
771 if (PyList_SetItem(m, i, s) == -1)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
772 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
773 }
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
774
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
775 r = PyObject_CallFunction(completion_display_matches_hook,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
776 "sOi", matches[0], m, max_length);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
777
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61200
diff changeset
778 Py_DECREF(m); m=NULL;
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
779
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
780 if (r == NULL ||
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
781 (r != Py_None && PyInt_AsLong(r) == -1 && PyErr_Occurred())) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
782 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
783 }
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61200
diff changeset
784 Py_XDECREF(r); r=NULL;
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
785
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
786 if (0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
787 error:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
788 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
789 Py_XDECREF(m);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
790 Py_XDECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
791 }
43834
d7e9bec1feaa readline module cleanup
Christian Heimes <christian@cheimes.de>
parents: 43825
diff changeset
792 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
793 PyGILState_Release(gilstate);
43228
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
794 #endif
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
795 }
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
796
1a0c73580665 Patch #1388440: Add set_completion_display_matches_hook and
Martin v. Löwis <martin@v.loewis.de>
parents: 41554
diff changeset
797
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
798 /* 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
799
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
800 static char *
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 39802
diff changeset
801 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
802 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
803 char *result = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
804 if (completer != NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
805 PyObject *r;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
806 #ifdef WITH_THREAD
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
807 PyGILState_STATE gilstate = PyGILState_Ensure();
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
808 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
809 rl_attempted_completion_over = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
810 r = PyObject_CallFunction(completer, "si", text, state);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
811 if (r == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
812 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
813 if (r == Py_None) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
814 result = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
815 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
816 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
817 char *s = PyString_AsString(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
818 if (s == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
819 goto error;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
820 result = strdup(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
821 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
822 Py_DECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
823 goto done;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
824 error:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
825 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
826 Py_XDECREF(r);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
827 done:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
828 #ifdef WITH_THREAD
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
829 PyGILState_Release(gilstate);
34843
5dda1f9e62a7 Fixes for
Michael W. Hudson <mwh@python.net>
parents: 34842
diff changeset
830 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
831 return result;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
832 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
833 return result;
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
835
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
836
27136
3d2962b0249e Fix from Michael Stone for SF bug #660476 and #513033 (bogus thread
Guido van Rossum <guido@python.org>
parents: 27135
diff changeset
837 /* 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
838 * before calling the normal completer */
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
839
27995
e11a178bb453 flex_complete looks like a private (but callback) function, so make it static
Neal Norwitz <nnorwitz@gmail.com>
parents: 27531
diff changeset
840 static char **
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
841 flex_complete(char *text, int start, int end)
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
842 {
56779
19a832b8464a Merged revisions 75531,75725 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 49641
diff changeset
843 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
844 rl_completion_append_character ='\0';
56779
19a832b8464a Merged revisions 75531,75725 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 49641
diff changeset
845 #endif
19a832b8464a Merged revisions 75531,75725 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 49641
diff changeset
846 #ifdef HAVE_RL_COMPLETION_SUPPRESS_APPEND
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
847 rl_completion_suppress_append = 0;
56779
19a832b8464a Merged revisions 75531,75725 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 49641
diff changeset
848 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
849 Py_XDECREF(begidx);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
850 Py_XDECREF(endidx);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
851 begidx = PyInt_FromLong((long) start);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
852 endidx = PyInt_FromLong((long) end);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
853 return completion_matches(text, *on_completion);
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
854 }
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
855
27135
c2663ca31d7d A few more whitespace normalizations.
Guido van Rossum <guido@python.org>
parents: 27134
diff changeset
856
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
857 /* 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
858
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
859 static void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13644
diff changeset
860 setup_readline(void)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
861 {
25684
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
862 #ifdef SAVE_LOCALE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
863 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
864 if (!saved_locale)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
865 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
866 #endif
c7d5801bbae8 GNU readline() mistakenly sets the LC_CTYPE locale.
Guido van Rossum <guido@python.org>
parents: 24471
diff changeset
867
67005
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
868 #ifdef __APPLE__
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
869 /* the libedit readline emulation resets key bindings etc
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
870 * when calling rl_initialize. So call it upfront
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
871 */
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
872 if (using_libedit_emulation)
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
873 rl_initialize();
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
874 #endif /* __APPLE__ */
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
875
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
876 using_history();
23782
54f6f89139db patch #562492 - prevent duplicate lines in history
Skip Montanaro <skip@pobox.com>
parents: 23580
diff changeset
877
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
878 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
879 #if defined(PYOS_OS2) && defined(PYCC_GCC)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
880 /* Allow $if term= in .inputrc to work */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
881 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
882 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
883 /* Force rebind of TAB to insert-tab */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
884 rl_bind_key('\t', rl_insert);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
885 /* Bind both ESC-TAB and ESC-ESC to the completion function */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
886 rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
887 rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
888 /* Set our hook functions */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
889 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
890 #ifdef HAVE_RL_PRE_INPUT_HOOK
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
891 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
892 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
893 /* Set our completion function */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
894 rl_attempted_completion_function = (CPPFunction *)flex_complete;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
895 /* Set Python word break characters */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
896 rl_completer_word_break_characters =
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
897 strdup(" \t\n`~!@#$%^&*()-=+[{]}\\|;:'\",<>/?");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
898 /* All nonalphanums except '.' */
11485
9cdf3fadda92 Patches by Kannan Vijayan:
Guido van Rossum <guido@python.org>
parents: 10029
diff changeset
899
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
900 begidx = PyInt_FromLong(0L);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
901 endidx = PyInt_FromLong(0L);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
902 /* Initialize (allows .inputrc to override)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
903 *
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
904 * XXX: A bug in the readline-2.2 library causes a memory leak
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
905 * inside this function. Nothing we can do about it.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
906 */
67005
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
907 #ifdef __APPLE__
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
908 if (using_libedit_emulation)
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
909 rl_read_init_file(NULL);
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
910 else
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
911 #endif /* __APPLE__ */
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
912 rl_initialize();
68a42b944fe3 Merged revisions 87356 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 63687
diff changeset
913
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
914 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
915 }
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
916
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
917 /* Wrapper around GNU readline that handles signals differently. */
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
918
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
919
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
920 #if defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
921
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
922 static char *completed_input_string;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
923 static void
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
924 rlhandler(char *text)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
925 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
926 completed_input_string = text;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
927 rl_callback_handler_remove();
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
928 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
929
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
930 extern PyThreadState* _PyOS_ReadlineTState;
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
931
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
932 static char *
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
933 readline_until_enter_or_signal(char *prompt, int *signal)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
934 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
935 char * not_done_reading = "";
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
936 fd_set selectset;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
937
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
938 *signal = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
939 #ifdef HAVE_RL_CATCH_SIGNAL
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
940 rl_catch_signals = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
941 #endif
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
942
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
943 rl_callback_handler_install (prompt, rlhandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
944 FD_ZERO(&selectset);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
945
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
946 completed_input_string = not_done_reading;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
947
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
948 while (completed_input_string == not_done_reading) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
949 int has_input = 0;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
950
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
951 while (!has_input)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
952 { struct timeval timeout = {0, 100000}; /* 0.1 seconds */
39802
4e81974f7e14 [Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout on the select()
Andrew M. Kuchling <amk@amk.ca>
parents: 39098
diff changeset
953
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
954 /* [Bug #1552726] Only limit the pause if an input hook has been
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
955 defined. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
956 struct timeval *timeoutp = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
957 if (PyOS_InputHook)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
958 timeoutp = &timeout;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
959 FD_SET(fileno(rl_instream), &selectset);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
960 /* select resets selectset if no input was available */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
961 has_input = select(fileno(rl_instream) + 1, &selectset,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
962 NULL, NULL, timeoutp);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
963 if(PyOS_InputHook) PyOS_InputHook();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
964 }
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
965
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
966 if(has_input > 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
967 rl_callback_read_char();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
968 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
969 else if (errno == EINTR) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
970 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
971 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
972 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
973 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
974 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
975 #ifdef WITH_THREAD
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
976 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
977 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
978 if (s < 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
979 rl_free_line_state();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
980 rl_cleanup_after_signal();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
981 rl_callback_handler_remove();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
982 *signal = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
983 completed_input_string = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
984 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
985 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
986 }
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
987
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
988 return completed_input_string;
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
989 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
990
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
991
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
992 #else
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
993
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
994 /* Interrupt handler */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
995
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
996 static jmp_buf jbuf;
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
997
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
998 /* ARGSUSED */
13676
5423b132bc97 Removed all instances of RETSIGTYPE from the source code: signal
Tim Peters <tim.peters@gmail.com>
parents: 13665
diff changeset
999 static void
13496
03bc51e43f7a ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13447
diff changeset
1000 onintr(int sig)
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1001 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1002 longjmp(jbuf, 1);
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1003 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1004
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1005
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1006 static char *
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1007 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
1008 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1009 PyOS_sighandler_t old_inthandler;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1010 char *p;
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
1011
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1012 *signal = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1013
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1014 old_inthandler = PyOS_setsig(SIGINT, onintr);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1015 if (setjmp(jbuf)) {
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1016 #ifdef HAVE_SIGRELSE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1017 /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1018 sigrelse(SIGINT);
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1019 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1020 PyOS_setsig(SIGINT, old_inthandler);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1021 *signal = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1022 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1023 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1024 rl_event_hook = PyOS_InputHook;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1025 p = readline(prompt);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1026 PyOS_setsig(SIGINT, old_inthandler);
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1027
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1028 return p;
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1029 }
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1030 #endif /*defined(HAVE_RL_CALLBACK) && defined(HAVE_SELECT) */
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1031
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1032
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1033 static char *
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1034 call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1035 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1036 size_t n;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1037 char *p, *q;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1038 int signal;
33255
3fbd2d1ca5bb SF #1015517, get readline to compile with older compilers
Neal Norwitz <nnorwitz@gmail.com>
parents: 33206
diff changeset
1039
33177
17973f2e3e0e Patch #914291: Restore locale while readline is running.
Martin v. Löwis <martin@v.loewis.de>
parents: 33153
diff changeset
1040 #ifdef SAVE_LOCALE
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1041 char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1042 if (!saved_locale)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1043 Py_FatalError("not enough memory to save locale");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1044 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
1045 #endif
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1046
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1047 if (sys_stdin != rl_instream || sys_stdout != rl_outstream) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1048 rl_instream = sys_stdin;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1049 rl_outstream = sys_stdout;
26849
bca5409b76ec Patch 659834 by Magnus Lie Hetland:
Guido van Rossum <guido@python.org>
parents: 25924
diff changeset
1050 #ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1051 rl_prep_terminal (1);
26849
bca5409b76ec Patch 659834 by Magnus Lie Hetland:
Guido van Rossum <guido@python.org>
parents: 25924
diff changeset
1052 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1053 }
27134
657aeafbbc9a Various cleanups:
Guido van Rossum <guido@python.org>
parents: 26849
diff changeset
1054
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1055 p = readline_until_enter_or_signal(prompt, &signal);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1056
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1057 /* we got an interrupt signal */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1058 if (signal) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1059 RESTORE_LOCALE(saved_locale)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1060 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1061 }
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 11882
diff changeset
1062
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1063 /* We got an EOF, return a empty string. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1064 if (p == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1065 p = PyMem_Malloc(1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1066 if (p != NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1067 *p = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1068 RESTORE_LOCALE(saved_locale)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1069 return p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1070 }
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 32140
diff changeset
1071
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1072 /* we have a valid line */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1073 n = strlen(p);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1074 if (n > 0) {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61200
diff changeset
1075 const char *line;
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
1076 int length = _py_get_history_length();
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
1077 if (length > 0)
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1078 #ifdef __APPLE__
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1079 if (using_libedit_emulation) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1080 /*
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1081 * Libedit's emulation uses 0-based indexes,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1082 * the real readline uses 1-based indexes.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1083 */
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
1084 line = history_get(length - 1)->line;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1085 } else
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1086 #endif /* __APPLE__ */
63687
03aa05ebd9bc Merged revisions 83670 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 63684
diff changeset
1087 line = history_get(length)->line;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1088 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1089 line = "";
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1090 if (strcmp(p, line))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1091 add_history(p);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1092 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1093 /* Copy the malloc'ed buffer into a PyMem_Malloc'ed one and
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1094 release the original. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1095 q = p;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1096 p = PyMem_Malloc(n+2);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1097 if (p != NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1098 strncpy(p, q, n);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1099 p[n] = '\n';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1100 p[n+1] = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1101 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1102 free(q);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1103 RESTORE_LOCALE(saved_locale)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1104 return p;
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1105 }
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1106
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1107
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1108 /* Initialize the module */
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1109
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
1110 PyDoc_STRVAR(doc_module,
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 23782
diff changeset
1111 "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
1112
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1113 #ifdef __APPLE__
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1114 PyDoc_STRVAR(doc_module_le,
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1115 "Importing this module enables command line editing using libedit readline.");
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1116 #endif /* __APPLE__ */
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1117
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
1118 PyMODINIT_FUNC
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13644
diff changeset
1119 initreadline(void)
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1120 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1121 PyObject *m;
6335
575f6b910f88 Reordered and reformatted, and added some cool new features:
Guido van Rossum <guido@python.org>
parents: 5973
diff changeset
1122
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1123 #ifdef __APPLE__
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1124 if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1125 using_libedit_emulation = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1126 }
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1127
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1128 if (using_libedit_emulation)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1129 m = Py_InitModule4("readline", readline_methods, doc_module_le,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1130 (PyObject *)NULL, PYTHON_API_VERSION);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1131 else
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1132
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1133 #endif /* __APPLE__ */
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1134
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1135 m = Py_InitModule4("readline", readline_methods, doc_module,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1136 (PyObject *)NULL, PYTHON_API_VERSION);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1137 if (m == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1138 return;
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
1139
58820
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1140
f108f6275855 Backport the patch that enables linking the readline
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 56779
diff changeset
1141
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1142 PyOS_ReadlineFunctionPointer = call_readline;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58820
diff changeset
1143 setup_readline();
5947
7ca6a912d455 New mechanism for GNU readline interface, via module
Guido van Rossum <guido@python.org>
parents:
diff changeset
1144 }