Type check set_mode and reset_mode
This commit is contained in:
parent
96326280e5
commit
03517459db
@ -87,14 +87,14 @@ def launch(args: List[str]) -> None:
|
|||||||
del args[:2]
|
del args[:2]
|
||||||
args = [kitten] + args
|
args = [kitten] + args
|
||||||
os.environ['KITTY_CONFIG_DIRECTORY'] = config_dir
|
os.environ['KITTY_CONFIG_DIRECTORY'] = config_dir
|
||||||
from kittens.tui.operations import clear_screen, reset_mode
|
from kittens.tui.operations import clear_screen, reset_mode, Mode
|
||||||
set_debug(kitten)
|
set_debug(kitten)
|
||||||
m = import_kitten_main_module(config_dir, kitten)
|
m = import_kitten_main_module(config_dir, kitten)
|
||||||
try:
|
try:
|
||||||
result = m['start'](args)
|
result = m['start'](args)
|
||||||
finally:
|
finally:
|
||||||
sys.stdin = sys.__stdin__
|
sys.stdin = sys.__stdin__
|
||||||
print(reset_mode('ALTERNATE_SCREEN') + clear_screen(), end='')
|
print(reset_mode(Mode.ALTERNATE_SCREEN) + clear_screen(), end='')
|
||||||
if result is not None:
|
if result is not None:
|
||||||
import json
|
import json
|
||||||
data = json.dumps(result)
|
data = json.dumps(result)
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
import sys
|
import sys
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
from enum import Enum
|
||||||
from typing import (
|
from typing import (
|
||||||
IO, Any, Callable, Dict, Generator, Optional, Tuple, TypeVar, Union
|
IO, Any, Callable, Dict, Generator, Optional, Tuple, TypeVar, Union
|
||||||
)
|
)
|
||||||
@ -22,26 +23,28 @@ SAVE_PRIVATE_MODE_VALUES = '\033[?s'
|
|||||||
RESTORE_PRIVATE_MODE_VALUES = '\033[?r'
|
RESTORE_PRIVATE_MODE_VALUES = '\033[?r'
|
||||||
SAVE_COLORS = '\033[#P'
|
SAVE_COLORS = '\033[#P'
|
||||||
RESTORE_COLORS = '\033[#Q'
|
RESTORE_COLORS = '\033[#Q'
|
||||||
MODES = dict(
|
|
||||||
LNM=(20, ''),
|
|
||||||
IRM=(4, ''),
|
class Mode(Enum):
|
||||||
DECKM=(1, '?'),
|
LNM = (20, '')
|
||||||
DECSCNM=(5, '?'),
|
IRM = (4, '')
|
||||||
DECOM=(6, '?'),
|
DECKM = (1, '?')
|
||||||
DECAWM=(7, '?'),
|
DECSCNM = (5, '?')
|
||||||
DECARM=(8, '?'),
|
DECOM = (6, '?')
|
||||||
DECTCEM=(25, '?'),
|
DECAWM = (7, '?')
|
||||||
MOUSE_BUTTON_TRACKING=(1000, '?'),
|
DECARM = (8, '?')
|
||||||
MOUSE_MOTION_TRACKING=(1002, '?'),
|
DECTCEM = (25, '?')
|
||||||
MOUSE_MOVE_TRACKING=(1003, '?'),
|
MOUSE_BUTTON_TRACKING = (1000, '?')
|
||||||
FOCUS_TRACKING=(1004, '?'),
|
MOUSE_MOTION_TRACKING = (1002, '?')
|
||||||
MOUSE_UTF8_MODE=(1005, '?'),
|
MOUSE_MOVE_TRACKING = (1003, '?')
|
||||||
MOUSE_SGR_MODE=(1006, '?'),
|
FOCUS_TRACKING = (1004, '?')
|
||||||
MOUSE_URXVT_MODE=(1015, '?'),
|
MOUSE_UTF8_MODE = (1005, '?')
|
||||||
ALTERNATE_SCREEN=(1049, '?'),
|
MOUSE_SGR_MODE = (1006, '?')
|
||||||
BRACKETED_PASTE=(2004, '?'),
|
MOUSE_URXVT_MODE = (1015, '?')
|
||||||
PENDING_UPDATE=(2026, '?'),
|
ALTERNATE_SCREEN = (1049, '?')
|
||||||
)
|
BRACKETED_PASTE = (2004, '?')
|
||||||
|
PENDING_UPDATE = (2026, '?')
|
||||||
|
|
||||||
|
|
||||||
F = TypeVar('F')
|
F = TypeVar('F')
|
||||||
all_cmds: Dict[str, Callable] = {}
|
all_cmds: Dict[str, Callable] = {}
|
||||||
@ -53,14 +56,14 @@ def cmd(f: F) -> F:
|
|||||||
|
|
||||||
|
|
||||||
@cmd
|
@cmd
|
||||||
def set_mode(which: str, private: bool = True) -> str:
|
def set_mode(which: Mode) -> str:
|
||||||
num, private_ = MODES[which]
|
num, private = which.value
|
||||||
return '\033[{}{}h'.format(private_, num)
|
return '\033[{}{}h'.format(private, num)
|
||||||
|
|
||||||
|
|
||||||
@cmd
|
@cmd
|
||||||
def reset_mode(which: str) -> str:
|
def reset_mode(which: Mode) -> str:
|
||||||
num, private = MODES[which]
|
num, private = which.value
|
||||||
return '\033[{}{}l'.format(private, num)
|
return '\033[{}{}l'.format(private, num)
|
||||||
|
|
||||||
|
|
||||||
@ -101,12 +104,12 @@ def set_window_title(value: str) -> str:
|
|||||||
|
|
||||||
@cmd
|
@cmd
|
||||||
def set_line_wrapping(yes_or_no: bool) -> str:
|
def set_line_wrapping(yes_or_no: bool) -> str:
|
||||||
return set_mode('DECAWM') if yes_or_no else reset_mode('DECAWM')
|
return set_mode(Mode.DECAWM) if yes_or_no else reset_mode(Mode.DECAWM)
|
||||||
|
|
||||||
|
|
||||||
@cmd
|
@cmd
|
||||||
def set_cursor_visible(yes_or_no: bool) -> str:
|
def set_cursor_visible(yes_or_no: bool) -> str:
|
||||||
return set_mode('DECTCEM') if yes_or_no else reset_mode('DECTCEM')
|
return set_mode(Mode.DECTCEM) if yes_or_no else reset_mode(Mode.DECTCEM)
|
||||||
|
|
||||||
|
|
||||||
@cmd
|
@cmd
|
||||||
@ -263,18 +266,18 @@ def clear_images_on_screen(delete_data: bool = False) -> str:
|
|||||||
|
|
||||||
def init_state(alternate_screen: bool = True) -> str:
|
def init_state(alternate_screen: bool = True) -> str:
|
||||||
ans = (
|
ans = (
|
||||||
S7C1T + SAVE_CURSOR + SAVE_PRIVATE_MODE_VALUES + reset_mode('LNM') +
|
S7C1T + SAVE_CURSOR + SAVE_PRIVATE_MODE_VALUES + reset_mode(Mode.LNM) +
|
||||||
reset_mode('IRM') + reset_mode('DECKM') + reset_mode('DECSCNM') +
|
reset_mode(Mode.IRM) + reset_mode(Mode.DECKM) + reset_mode(Mode.DECSCNM) +
|
||||||
set_mode('DECARM') + set_mode('DECAWM') +
|
set_mode(Mode.DECARM) + set_mode(Mode.DECAWM) +
|
||||||
set_mode('DECTCEM') + reset_mode('MOUSE_BUTTON_TRACKING') +
|
set_mode(Mode.DECTCEM) + reset_mode(Mode.MOUSE_BUTTON_TRACKING) +
|
||||||
reset_mode('MOUSE_MOTION_TRACKING') + reset_mode('MOUSE_MOVE_TRACKING') +
|
reset_mode(Mode.MOUSE_MOTION_TRACKING) + reset_mode(Mode.MOUSE_MOVE_TRACKING) +
|
||||||
reset_mode('FOCUS_TRACKING') + reset_mode('MOUSE_UTF8_MODE') +
|
reset_mode(Mode.FOCUS_TRACKING) + reset_mode(Mode.MOUSE_UTF8_MODE) +
|
||||||
reset_mode('MOUSE_SGR_MODE') + reset_mode('MOUSE_UTF8_MODE') +
|
reset_mode(Mode.MOUSE_SGR_MODE) + reset_mode(Mode.MOUSE_UTF8_MODE) +
|
||||||
set_mode('BRACKETED_PASTE') + SAVE_COLORS +
|
set_mode(Mode.BRACKETED_PASTE) + SAVE_COLORS +
|
||||||
'\033[*x' # reset DECSACE to default region select
|
'\033[*x' # reset DECSACE to default region select
|
||||||
)
|
)
|
||||||
if alternate_screen:
|
if alternate_screen:
|
||||||
ans += set_mode('ALTERNATE_SCREEN') + reset_mode('DECOM')
|
ans += set_mode(Mode.ALTERNATE_SCREEN) + reset_mode(Mode.DECOM)
|
||||||
ans += clear_screen()
|
ans += clear_screen()
|
||||||
ans += '\033[>31u' # extended keyboard mode
|
ans += '\033[>31u' # extended keyboard mode
|
||||||
return ans
|
return ans
|
||||||
@ -284,7 +287,7 @@ def reset_state(normal_screen: bool = True) -> str:
|
|||||||
ans = ''
|
ans = ''
|
||||||
ans += '\033[<u' # restore keyboard mode
|
ans += '\033[<u' # restore keyboard mode
|
||||||
if normal_screen:
|
if normal_screen:
|
||||||
ans += reset_mode('ALTERNATE_SCREEN')
|
ans += reset_mode(Mode.ALTERNATE_SCREEN)
|
||||||
ans += RESTORE_PRIVATE_MODE_VALUES
|
ans += RESTORE_PRIVATE_MODE_VALUES
|
||||||
ans += RESTORE_CURSOR
|
ans += RESTORE_CURSOR
|
||||||
ans += RESTORE_COLORS
|
ans += RESTORE_COLORS
|
||||||
@ -293,9 +296,9 @@ def reset_state(normal_screen: bool = True) -> str:
|
|||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def pending_update(write: Callable[[str], None]) -> Generator[None, None, None]:
|
def pending_update(write: Callable[[str], None]) -> Generator[None, None, None]:
|
||||||
write(set_mode('PENDING_UPDATE'))
|
write(set_mode(Mode.PENDING_UPDATE))
|
||||||
yield
|
yield
|
||||||
write(reset_mode('PENDING_UPDATE'))
|
write(reset_mode(Mode.PENDING_UPDATE))
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@ -308,9 +311,9 @@ def cursor(write: Callable[[str], None]) -> Generator[None, None, None]:
|
|||||||
@contextmanager
|
@contextmanager
|
||||||
def alternate_screen(f: Optional[IO[str]] = None) -> Generator[None, None, None]:
|
def alternate_screen(f: Optional[IO[str]] = None) -> Generator[None, None, None]:
|
||||||
f = f or sys.stdout
|
f = f or sys.stdout
|
||||||
print(set_mode('ALTERNATE_SCREEN'), end='', file=f)
|
print(set_mode(Mode.ALTERNATE_SCREEN), end='', file=f)
|
||||||
yield
|
yield
|
||||||
print(reset_mode('ALTERNATE_SCREEN'), end='', file=f)
|
print(reset_mode(Mode.ALTERNATE_SCREEN), end='', file=f)
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@ -414,6 +417,7 @@ def as_type_stub() -> str:
|
|||||||
'from kitty.typing import GraphicsCommandType, ScreenSize',
|
'from kitty.typing import GraphicsCommandType, ScreenSize',
|
||||||
'from kitty.rgb import Color',
|
'from kitty.rgb import Color',
|
||||||
'import kitty.rgb',
|
'import kitty.rgb',
|
||||||
|
'import kittens.tui.operations',
|
||||||
]
|
]
|
||||||
methods = []
|
methods = []
|
||||||
for name, func in all_cmds.items():
|
for name, func in all_cmds.items():
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user