GH-106734: Disable tab completion in pdb's multiline mode (GH-106735)

This commit is contained in:
Tian Gao 2023-09-11 18:28:43 -07:00 committed by GitHub
parent b88d9e75f6
commit 391f3e3ca9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 21 deletions

View File

@ -514,6 +514,22 @@ class Pdb(bdb.Bdb, cmd.Cmd):
if obj is not None:
self.message(repr(obj))
@contextmanager
def _disable_tab_completion(self):
if self.use_rawinput and self.completekey == 'tab':
try:
import readline
except ImportError:
yield
return
try:
readline.parse_and_bind('tab: self-insert')
yield
finally:
readline.parse_and_bind('tab: complete')
else:
yield
def default(self, line):
if line[:1] == '!': line = line[1:].strip()
locals = self.curframe_locals
@ -521,28 +537,29 @@ class Pdb(bdb.Bdb, cmd.Cmd):
try:
if (code := codeop.compile_command(line + '\n', '<stdin>', 'single')) is None:
# Multi-line mode
buffer = line
continue_prompt = "... "
while (code := codeop.compile_command(buffer, '<stdin>', 'single')) is None:
if self.use_rawinput:
try:
line = input(continue_prompt)
except (EOFError, KeyboardInterrupt):
self.lastcmd = ""
print('\n')
return
else:
self.stdout.write(continue_prompt)
self.stdout.flush()
line = self.stdin.readline()
if not len(line):
self.lastcmd = ""
self.stdout.write('\n')
self.stdout.flush()
return
with self._disable_tab_completion():
buffer = line
continue_prompt = "... "
while (code := codeop.compile_command(buffer, '<stdin>', 'single')) is None:
if self.use_rawinput:
try:
line = input(continue_prompt)
except (EOFError, KeyboardInterrupt):
self.lastcmd = ""
print('\n')
return
else:
line = line.rstrip('\r\n')
buffer += '\n' + line
self.stdout.write(continue_prompt)
self.stdout.flush()
line = self.stdin.readline()
if not len(line):
self.lastcmd = ""
self.stdout.write('\n')
self.stdout.flush()
return
else:
line = line.rstrip('\r\n')
buffer += '\n' + line
save_stdout = sys.stdout
save_stdin = sys.stdin
save_displayhook = sys.displayhook

View File

@ -0,0 +1 @@
Disable tab completion in multiline mode of :mod:`pdb`