[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