Populate character on simulated key presses (#960)

* Populate character on simulated key presses

* Undo example
This commit is contained in:
darrenburns
2022-10-19 15:42:54 +01:00
committed by GitHub
parent 84e514e9e6
commit 3e46f5dbdd
2 changed files with 13 additions and 6 deletions

View File

@@ -6,8 +6,8 @@ import io
import os
import platform
import sys
import unicodedata
import warnings
from collections import defaultdict
from contextlib import redirect_stderr, redirect_stdout
from datetime import datetime
from pathlib import Path, PurePath
@@ -32,7 +32,7 @@ from ._callback import invoke
from ._context import active_app
from ._event_broker import NoHandler, extract_handler_actions
from ._filter import LineFilter, Monochrome
from .binding import Binding, Bindings, NoBinding
from .binding import Binding, Bindings
from .css.query import NoMatches
from .css.stylesheet import Stylesheet
from .design import ColorSystem
@@ -44,6 +44,7 @@ from .drivers.headless_driver import HeadlessDriver
from .features import FeatureFlag, parse_features
from .file_monitor import FileMonitor
from .geometry import Offset, Region, Size
from .keys import REPLACED_KEYS
from .messages import CallbackType
from .reactive import Reactive
from .renderables.blank import Blank
@@ -611,10 +612,15 @@ class App(Generic[ReturnType], DOMNode):
print(f"(pause {wait_ms}ms)")
await asyncio.sleep(float(wait_ms) / 1000)
else:
print(f"press {key!r}")
driver.send_event(
events.Key(self, key, key if len(key) == 1 else None)
)
original_key = REPLACED_KEYS.get(key, key)
try:
char = unicodedata.lookup(
original_key.upper().replace("_", " ")
)
except KeyError:
char = key if len(key) == 1 else None
print(f"press {key!r} (char={char!r})")
driver.send_event(events.Key(self, key, char))
await asyncio.sleep(0.01)
await app._animator.wait_for_idle()

View File

@@ -206,6 +206,7 @@ KEY_NAME_REPLACEMENTS = {
"plus_sign": "plus",
"low_line": "underscore",
}
REPLACED_KEYS = {value: key for key, value in KEY_NAME_REPLACEMENTS.items()}
# Some keys have aliases. For example, if you press `ctrl+m` on your keyboard,
# it's treated the same way as if you press `enter`. Key handlers `key_ctrl_m` and