[Python-checkins] cpython (merge 3.5 -> default): Issue #16182: Merge readline update from 3.5
martin.panter
python-checkins at python.org
Tue Jun 14 05:02:16 EDT 2016
https://hg.python.org/cpython/rev/c4dd384ee3fa
changeset: 102017:c4dd384ee3fa
parent: 102015:8d493e1ec34b
parent: 102016:005cab4f5629
user: Martin Panter <vadmium+py at gmail.com>
date: Tue Jun 14 08:49:51 2016 +0000
summary:
Issue #16182: Merge readline update from 3.5
files:
Doc/library/readline.rst | 7 +++++--
Lib/test/test_readline.py | 22 +++++++++++++++-------
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Doc/library/readline.rst b/Doc/library/readline.rst
--- a/Doc/library/readline.rst
+++ b/Doc/library/readline.rst
@@ -104,7 +104,9 @@
Append the last *nelements* items of history to a file. The default filename is
:file:`~/.history`. The file must already exist. This calls
- :c:func:`append_history` in the underlying library.
+ :c:func:`append_history` in the underlying library. This function
+ only exists if Python was compiled for a version of the library
+ that supports it.
.. versionadded:: 3.5
@@ -199,7 +201,8 @@
be used as the new hook function; if omitted or ``None``, any
function already installed is removed. The hook is called
with no arguments after the first prompt has been printed and just before
- readline starts reading input characters.
+ readline starts reading input characters. This function only exists
+ if Python was compiled for a version of the library that supports it.
Completion
diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
--- a/Lib/test/test_readline.py
+++ b/Lib/test/test_readline.py
@@ -144,24 +144,32 @@
script = r"""import readline
-if readline.__doc__ and "libedit" in readline.__doc__:
+is_editline = readline.__doc__ and "libedit" in readline.__doc__
+inserted = "[\xEFnserted]"
+macro = "|t\xEB[after]"
+set_pre_input_hook = getattr(readline, "set_pre_input_hook", None)
+if is_editline or not set_pre_input_hook:
+ # The insert_line() call via pre_input_hook() does nothing with Editline,
+ # so include the extra text that would have been inserted here
+ macro = inserted + macro
+
+if is_editline:
readline.parse_and_bind(r'bind ^B ed-prev-char')
readline.parse_and_bind(r'bind "\t" rl_complete')
- # The insert_line() call via pre_input_hook() does nothing with Editline,
- # so include the extra text that would have been inserted here
- readline.parse_and_bind('bind -s ^A "[\xEFnserted]|t\xEB[after]"')
+ readline.parse_and_bind(r'bind -s ^A "{}"'.format(macro))
else:
readline.parse_and_bind(r'Control-b: backward-char')
readline.parse_and_bind(r'"\t": complete')
readline.parse_and_bind(r'set disable-completion off')
readline.parse_and_bind(r'set show-all-if-ambiguous off')
readline.parse_and_bind(r'set show-all-if-unmodified off')
- readline.parse_and_bind('Control-a: "|t\xEB[after]"')
+ readline.parse_and_bind(r'Control-a: "{}"'.format(macro))
def pre_input_hook():
- readline.insert_text("[\xEFnserted]")
+ readline.insert_text(inserted)
readline.redisplay()
-readline.set_pre_input_hook(pre_input_hook)
+if set_pre_input_hook:
+ set_pre_input_hook(pre_input_hook)
def completer(text, state):
if text == "t\xEB":
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list