mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 16:34:47 +01:00
add workaround for ctrl-c not quitting reverse-i-search in readline shell
This commit is contained in:
parent
fbd61b0c20
commit
baf08e35bf
1 changed files with 20 additions and 3 deletions
|
@ -19,14 +19,15 @@ if HAVE_PYGMENTS:
|
|||
import pygments
|
||||
from pygments.formatters.terminal256 import Terminal256Formatter
|
||||
|
||||
RL_COMPLETION_SUPPRESS_APPEND = RL_LIB = None
|
||||
RL_COMPLETION_SUPPRESS_APPEND = RL_LIB = RL_STATE = None
|
||||
RL_CAN_RESIZE = False
|
||||
RL_DONE = None
|
||||
|
||||
_RL_STATE_DONE = 0x1000000
|
||||
_RL_STATE_ISEARCH = 0x0000080
|
||||
|
||||
def setup_readline():
|
||||
"""Sets up the readline module and completion suppression, if available."""
|
||||
global RL_COMPLETION_SUPPRESS_APPEND, RL_LIB, RL_CAN_RESIZE
|
||||
global RL_COMPLETION_SUPPRESS_APPEND, RL_LIB, RL_CAN_RESIZE, RL_STATE
|
||||
if RL_COMPLETION_SUPPRESS_APPEND is not None:
|
||||
return
|
||||
try:
|
||||
|
@ -44,6 +45,7 @@ def setup_readline():
|
|||
except ValueError:
|
||||
# not all versions of readline have this symbol, ie Macs sometimes
|
||||
RL_COMPLETION_SUPPRESS_APPEND = None
|
||||
RL_STATE = ctypes.c_int.in_dll(lib, 'rl_readline_state')
|
||||
RL_CAN_RESIZE = hasattr(lib, 'rl_reset_screen_size')
|
||||
env = builtins.__xonsh_env__
|
||||
# reads in history
|
||||
|
@ -71,6 +73,20 @@ def teardown_readline():
|
|||
return
|
||||
|
||||
|
||||
def fix_readline_state_after_ctrl_c():
|
||||
"""
|
||||
Fix to allow Ctrl-C to exit reverse-i-search.
|
||||
|
||||
Based on code from:
|
||||
http://bugs.python.org/file39467/raw_input__workaround_demo.py
|
||||
"""
|
||||
if RL_STATE.value & _RL_STATE_ISEARCH:
|
||||
RL_STATE.value &= ~_RL_STATE_ISEARCH
|
||||
|
||||
if not RL_STATE.value & _RL_STATE_DONE:
|
||||
RL_STATE.value |= _RL_STATE_DONE
|
||||
|
||||
|
||||
def rl_completion_suppress_append(val=1):
|
||||
"""Sets the rl_completion_suppress_append varaiable, if possible.
|
||||
A value of 1 (default) means to suppress, a value of 0 means to enable.
|
||||
|
@ -263,6 +279,7 @@ class ReadlineShell(BaseShell, Cmd):
|
|||
self._cmdloop(intro=intro)
|
||||
except KeyboardInterrupt:
|
||||
print() # Gives a newline
|
||||
fix_readline_state_after_ctrl_c()
|
||||
self.reset_buffer()
|
||||
intro = None
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue