bpo-42819, readline: Disable bracketed paste (GH-24108) (GH-24545)

(cherry picked from commit 755f3c1521)

Co-authored-by: Dustin Rodrigues <dust.rod@gmail.com>

Co-authored-by: Dustin Rodrigues <dust.rod@gmail.com>
This commit is contained in:
Miss Islington (bot) 2021-02-15 16:18:07 -08:00 committed by GitHub
parent 9cc70bc220
commit 85fd9f4e45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 0 deletions

View File

@ -1444,6 +1444,7 @@ Mark Roddy
Kevin Rodgers Kevin Rodgers
Sean Rodman Sean Rodman
Giampaolo Rodola Giampaolo Rodola
Dustin Rodrigues
Mauro S. M. Rodrigues Mauro S. M. Rodrigues
Elson Rodriguez Elson Rodriguez
Adi Roiban Adi Roiban

View File

@ -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.

View 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 */ /* Exported function to send one line to readline's init file parser */
static PyObject * static PyObject *
@ -192,6 +212,7 @@ read_init_file(PyObject *self, PyObject *args)
errno = rl_read_init_file(NULL); errno = rl_read_init_file(NULL);
if (errno) if (errno)
return PyErr_SetFromErrno(PyExc_OSError); return PyErr_SetFromErrno(PyExc_OSError);
disable_bracketed_paste();
Py_RETURN_NONE; Py_RETURN_NONE;
} }
@ -1152,6 +1173,8 @@ setup_readline(readlinestate *mod_state)
else else
rl_initialize(); rl_initialize();
disable_bracketed_paste();
RESTORE_LOCALE(saved_locale) RESTORE_LOCALE(saved_locale)
return 0; return 0;
} }