Kaydet (Commit) 63a47478 authored tarafından Victor Stinner's avatar Victor Stinner

Issue #19884: readline: Disable the meta modifier key if stdout is not a

terminal to not write the ANSI sequence "\033[1034h" into stdout. This sequence
is used on some terminal (ex: TERM=xterm-256color") to enable support of 8 bit
characters.
üst 909d61f7
""" """
Very minimal unittests for parts of the readline module. Very minimal unittests for parts of the readline module.
These tests were added to check that the libedit emulation on OSX and
the "real" readline have the same interface for history manipulation. That's
why the tests cover only a small subset of the interface.
""" """
import os
import unittest import unittest
from test.test_support import run_unittest, import_module from test.test_support import run_unittest, import_module
from test.script_helper import assert_python_ok
# Skip tests if there is no readline module # Skip tests if there is no readline module
readline = import_module('readline') readline = import_module('readline')
class TestHistoryManipulation (unittest.TestCase): class TestHistoryManipulation (unittest.TestCase):
"""These tests were added to check that the libedit emulation on OSX and
the "real" readline have the same interface for history manipulation.
That's why the tests cover only a small subset of the interface.
"""
@unittest.skipIf(not hasattr(readline, 'clear_history'), @unittest.skipIf(not hasattr(readline, 'clear_history'),
"The history update test cannot be run because the " "The history update test cannot be run because the "
...@@ -40,8 +42,18 @@ class TestHistoryManipulation (unittest.TestCase): ...@@ -40,8 +42,18 @@ class TestHistoryManipulation (unittest.TestCase):
self.assertEqual(readline.get_current_history_length(), 1) self.assertEqual(readline.get_current_history_length(), 1)
class TestReadline(unittest.TestCase):
def test_init(self):
# Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
# written into stdout when the readline module is imported and stdout
# is redirected to a pipe.
rc, stdout, stderr = assert_python_ok('-c', 'import readline',
TERM='xterm-256color')
self.assertEqual(stdout, b'')
def test_main(): def test_main():
run_unittest(TestHistoryManipulation) run_unittest(TestHistoryManipulation, TestReadline)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -13,6 +13,11 @@ Core and Builtins ...@@ -13,6 +13,11 @@ Core and Builtins
Library Library
------- -------
- Issue #19884: readline: Disable the meta modifier key if stdout is not
a terminal to not write the ANSI sequence "\033[1034h" into stdout. This
sequence is used on some terminal (ex: TERM=xterm-256color") to enable
support of 8 bit characters.
- Issue #22017: Correct reference counting errror in the initialization of the - Issue #22017: Correct reference counting errror in the initialization of the
_warnings module. _warnings module.
......
...@@ -887,7 +887,7 @@ setup_readline(void) ...@@ -887,7 +887,7 @@ setup_readline(void)
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
/* the libedit readline emulation resets key bindings etc /* the libedit readline emulation resets key bindings etc
* when calling rl_initialize. So call it upfront * when calling rl_initialize. So call it upfront
*/ */
if (using_libedit_emulation) if (using_libedit_emulation)
...@@ -932,6 +932,17 @@ setup_readline(void) ...@@ -932,6 +932,17 @@ setup_readline(void)
begidx = PyInt_FromLong(0L); begidx = PyInt_FromLong(0L);
endidx = PyInt_FromLong(0L); endidx = PyInt_FromLong(0L);
if (!isatty(STDOUT_FILENO)) {
/* Issue #19884: stdout is no a terminal. Disable meta modifier
keys to not write the ANSI sequence "\033[1034h" into stdout. On
terminals supporting 8 bit characters like TERM=xterm-256color
(which is now the default Fedora since Fedora 18), the meta key is
used to enable support of 8 bit characters (ANSI sequence
"\033[1034h"). */
rl_variable_bind ("enable-meta-key", "off");
}
/* Initialize (allows .inputrc to override) /* Initialize (allows .inputrc to override)
* *
* XXX: A bug in the readline-2.2 library causes a memory leak * XXX: A bug in the readline-2.2 library causes a memory leak
...@@ -943,7 +954,7 @@ setup_readline(void) ...@@ -943,7 +954,7 @@ setup_readline(void)
else else
#endif /* __APPLE__ */ #endif /* __APPLE__ */
rl_initialize(); rl_initialize();
RESTORE_LOCALE(saved_locale) RESTORE_LOCALE(saved_locale)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment