From 18d38f6a4dc830722a3a80c7c0bb099ad14ca010 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Tue, 20 Dec 2022 10:36:00 +0000 Subject: [PATCH] keys command --- src/textual/cli/cli.py | 8 +++++++ src/textual/cli/previews/keys.py | 37 ++++++++++++++++++++++++++++++++ src/textual/events.py | 4 +++- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/textual/cli/previews/keys.py diff --git a/src/textual/cli/cli.py b/src/textual/cli/cli.py index 414575d82..e3f93c4ca 100644 --- a/src/textual/cli/cli.py +++ b/src/textual/cli/cli.py @@ -123,3 +123,11 @@ def colors(): from textual.cli.previews import colors colors.app.run() + + +@run.command("keys") +def keys(): + """Show key events""" + from textual.cli.previews import keys + + keys.app.run() diff --git a/src/textual/cli/previews/keys.py b/src/textual/cli/previews/keys.py new file mode 100644 index 000000000..53ede7f3d --- /dev/null +++ b/src/textual/cli/previews/keys.py @@ -0,0 +1,37 @@ +from rich.panel import Panel + +from textual.app import App, ComposeResult +from textual import events +from textual.widgets import Header, Footer, TextLog + + +class KeyLog(TextLog, inherit_bindings=False): + """We don't want to handle scroll keys.""" + + +class KeysApp(App): + """Show key events in a text log.""" + + TITLE = "Textual Keys" + + BINDINGS = [("c", "clear", "Clear")] + + def compose(self) -> ComposeResult: + yield Header() + yield Footer() + yield KeyLog() + + def on_ready(self) -> None: + self.query_one(KeyLog).write(Panel("Press some keys!")) + + def on_key(self, event: events.Key) -> None: + self.query_one(KeyLog).write(event) + + def action_clear(self) -> None: + self.query_one(KeyLog).clear() + + +app = KeysApp() + +if __name__ == "__main__": + app.run() diff --git a/src/textual/events.py b/src/textual/events.py index 912613e19..c16ba2384 100644 --- a/src/textual/events.py +++ b/src/textual/events.py @@ -209,7 +209,9 @@ class Key(InputEvent): def __rich_repr__(self) -> rich.repr.Result: yield "key", self.key - yield "char", self.char, None + yield "char", self.char + yield "is_printable", self.is_printable + yield "key_aliases", self.key_aliases, [self.key_name] @property def key_name(self) -> str | None: