[Python-checkins] cpython (merge 3.4 -> default): (Merge 3.4) Issue #19884: readline: Disable the meta modifier key if stdout is
victor.stinner
python-checkins at python.org
Thu Jul 24 12:25:06 CEST 2014
http://hg.python.org/cpython/rev/f85a968f9e01
changeset: 91826:f85a968f9e01
parent: 91823:85b213df0524
parent: 91825:6303266beb80
user: Victor Stinner <victor.stinner at gmail.com>
date: Thu Jul 24 12:24:45 2014 +0200
summary:
(Merge 3.4) 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.
files:
Lib/test/test_readline.py | 23 ++++++++++++++++++-----
Misc/NEWS | 5 +++++
Modules/readline.c | 11 +++++++++++
3 files changed, 34 insertions(+), 5 deletions(-)
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
@@ -1,17 +1,20 @@
"""
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
from test.support import run_unittest, import_module
+from test.script_helper import assert_python_ok
# Skip tests if there is no readline module
readline = import_module('readline')
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'),
"The history update test cannot be run because the "
@@ -40,8 +43,18 @@
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():
- run_unittest(TestHistoryManipulation)
+ run_unittest(TestHistoryManipulation, TestReadline)
if __name__ == "__main__":
test_main()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -108,6 +108,11 @@
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 #4350: Removed a number of out-of-dated and non-working for a long time
Tkinter methods.
diff --git a/Modules/readline.c b/Modules/readline.c
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -1019,6 +1019,17 @@
mod_state->begidx = PyLong_FromLong(0L);
mod_state->endidx = PyLong_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)
*
* XXX: A bug in the readline-2.2 library causes a memory leak
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list