diff --git a/__main__.py b/__main__.py index f668b990a..0148a6e9a 100644 --- a/__main__.py +++ b/__main__.py @@ -31,14 +31,26 @@ def runpy(args: List[str]) -> None: def hold(args: List[str]) -> None: import subprocess - import tty + import termios from contextlib import suppress + from kittens.tui.operations import init_state, set_cursor_visible ret = subprocess.Popen(args[1:]).wait() with suppress(BaseException): - print('\n\x1b[1;32mPress any key to exit', end='', flush=True) + print( + '\n\x1b[1;32mPress Enter to exit', + end=init_state(alternate_screen=False, kitty_keyboard_mode=False) + set_cursor_visible(False), + flush=True) with suppress(BaseException): - tty.setraw(sys.stdin.fileno()) - sys.stdin.buffer.read(1) + fd = sys.stdin.fileno() + old = termios.tcgetattr(fd) + new = old[:] + new[3] &= ~termios.ECHO # 3 == 'lflags' + tcsetattr_flags = termios.TCSAFLUSH + if hasattr(termios, 'TCSASOFT'): + tcsetattr_flags |= getattr(termios, 'TCSASOFT') + termios.tcsetattr(fd, tcsetattr_flags, new) + with suppress(KeyboardInterrupt): + input() raise SystemExit(ret) diff --git a/kittens/tui/operations.py b/kittens/tui/operations.py index 523be1302..74a0e35ec 100644 --- a/kittens/tui/operations.py +++ b/kittens/tui/operations.py @@ -291,7 +291,7 @@ class MouseTracking(Enum): full = auto() -def init_state(alternate_screen: bool = True, mouse_tracking: MouseTracking = MouseTracking.none) -> str: +def init_state(alternate_screen: bool = True, mouse_tracking: MouseTracking = MouseTracking.none, kitty_keyboard_mode: bool = True) -> str: sc = SAVE_CURSOR if alternate_screen else '' ans = ( S7C1T + sc + SAVE_PRIVATE_MODE_VALUES + reset_mode(Mode.LNM) + @@ -314,7 +314,10 @@ def init_state(alternate_screen: bool = True, mouse_tracking: MouseTracking = Mo ans += set_mode(Mode.MOUSE_MOTION_TRACKING) elif mouse_tracking is MouseTracking.full: ans += set_mode(Mode.MOUSE_MOVE_TRACKING) - ans += '\033[>31u' # extended keyboard mode + if kitty_keyboard_mode: + ans += '\033[>31u' # extended keyboard mode + else: + ans += '\033[>u' # legacy keyboard mode return ans