]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42819, readline: Disable bracketed paste (GH-24108) (GH-24545)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 16 Feb 2021 00:18:07 +0000 (16:18 -0800)
committerGitHub <noreply@github.com>
Tue, 16 Feb 2021 00:18:07 +0000 (01:18 +0100)
(cherry picked from commit 755f3c1521b422bc2177013d289f5439975fdc4f)

Co-authored-by: Dustin Rodrigues <dust.rod@gmail.com>
Co-authored-by: Dustin Rodrigues <dust.rod@gmail.com>
Misc/ACKS
Misc/NEWS.d/next/Core and Builtins/2021-01-04-23-54-34.bpo-42819.4KO6wU.rst [new file with mode: 0644]
Modules/readline.c

index 58a4accd13451a46f259a44e4462459bab020bf2..73d35c2d86bdc01d1b110360ae536906ba6aeffe 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1444,6 +1444,7 @@ Mark Roddy
 Kevin Rodgers
 Sean Rodman
 Giampaolo Rodola
+Dustin Rodrigues
 Mauro S. M. Rodrigues
 Elson Rodriguez
 Adi Roiban
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-04-23-54-34.bpo-42819.4KO6wU.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-04-23-54-34.bpo-42819.4KO6wU.rst
new file mode 100644 (file)
index 0000000..d067f0b
--- /dev/null
@@ -0,0 +1,8 @@
+:mod:`readline`: Explicitly disable bracketed paste in the interactive
+interpreter, even if it's set in the inputrc, is enabled by default (eg GNU
+Readline 8.1), or a user calls ``readline.read_init_file()``. The Python REPL
+has not implemented bracketed paste support. Also, bracketed mode writes the
+``"\x1b[?2004h"`` escape sequence into stdout which causes test failures in
+applications that don't support it. It can still be explicitly enabled by
+calling ``readline.parse_and_bind("set enable-bracketed-paste on")``. Patch by
+Dustin Rodrigues.
index 12d6cc78e38a77491a21615c41573fe0ca4ad6f6..1e74f997b071129d5760e5d2dc99b85c150e8a52 100644 (file)
@@ -146,6 +146,26 @@ decode(const char *s)
 }
 
 
+/*
+Explicitly disable bracketed paste in the interactive interpreter, even if it's
+set in the inputrc, is enabled by default (eg GNU Readline 8.1), or a user calls
+readline.read_init_file(). The Python REPL has not implemented bracketed
+paste support. Also, bracketed mode writes the "\x1b[?2004h" escape sequence
+into stdout which causes test failures in applications that don't support it.
+It can still be explicitly enabled by calling readline.parse_and_bind("set
+enable-bracketed-paste on"). See bpo-42819 for more details.
+
+This should be removed if bracketed paste mode is implemented (bpo-39820).
+*/
+
+static void
+disable_bracketed_paste(void)
+{
+    if (!using_libedit_emulation) {
+        rl_variable_bind ("enable-bracketed-paste", "off");
+    }
+}
+
 /* Exported function to send one line to readline's init file parser */
 
 static PyObject *
@@ -192,6 +212,7 @@ read_init_file(PyObject *self, PyObject *args)
         errno = rl_read_init_file(NULL);
     if (errno)
         return PyErr_SetFromErrno(PyExc_OSError);
+    disable_bracketed_paste();
     Py_RETURN_NONE;
 }
 
@@ -1152,6 +1173,8 @@ setup_readline(readlinestate *mod_state)
     else
         rl_initialize();
 
+    disable_bracketed_paste();
+
     RESTORE_LOCALE(saved_locale)
     return 0;
 }