Use a pending update when drawing the screen

This commit is contained in:
Kovid Goyal 2021-08-04 22:06:05 +05:30
parent 9b7899780b
commit 96326280e5
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 22 additions and 8 deletions

View File

@ -278,6 +278,7 @@ class ThemesHandler(Handler):
self.on_browsing_key_event(key_event, in_bracketed_paste)
def draw_screen(self) -> None:
with self.pending_update():
self.cmd.clear_screen()
self.enforce_cursor_state()
if self.state is State.fetching:

View File

@ -10,10 +10,12 @@ from typing import (
from kitty.types import ParsedShortcut
from kitty.typing import (
AbstractEventLoop, BossType, Debug, ImageManagerType, KeyEventType,
KeyActionType, LoopType, MouseEvent, ScreenSize, TermManagerType
AbstractEventLoop, BossType, Debug, ImageManagerType, KeyActionType,
KeyEventType, LoopType, MouseEvent, ScreenSize, TermManagerType
)
from .operations import pending_update
class Handler:
@ -134,6 +136,9 @@ class Handler:
def suspend(self) -> ContextManager[TermManagerType]:
return self._term_manager.suspend()
def pending_update(self) -> ContextManager[None]:
return pending_update(self.write)
class HandleResult:

View File

@ -40,6 +40,7 @@ MODES = dict(
MOUSE_URXVT_MODE=(1015, '?'),
ALTERNATE_SCREEN=(1049, '?'),
BRACKETED_PASTE=(2004, '?'),
PENDING_UPDATE=(2026, '?'),
)
F = TypeVar('F')
@ -290,6 +291,13 @@ def reset_state(normal_screen: bool = True) -> str:
return ans
@contextmanager
def pending_update(write: Callable[[str], None]) -> Generator[None, None, None]:
write(set_mode('PENDING_UPDATE'))
yield
write(reset_mode('PENDING_UPDATE'))
@contextmanager
def cursor(write: Callable[[str], None]) -> Generator[None, None, None]:
write(SAVE_CURSOR)