home · contact · privacy
Refactor keypress handlings.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 13 Jun 2025 16:39:19 +0000 (18:39 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 13 Jun 2025 16:39:19 +0000 (18:39 +0200)
ircplom/events.py
ircplom/tui.py

index 93d20d69e2537127c9b3b2d504957e8afe694a45..364f551ac701eee465d087136d15b924e9f1c735 100644 (file)
@@ -13,15 +13,14 @@ class EventType(Enum):
     EXCEPTION = auto()
     INIT_CONNECT = auto()
     INIT_RECONNECT = auto()
-    KEYBINDING = auto()
     LOG = auto()
     LOG_CONN = auto()
     NICK_SET = auto()
     PING = auto()
-    PROMPT_ADD = auto()
     QUIT = auto()
     SEND = auto()
     SET_SCREEN = auto()
+    TUI_CMD = auto()
 
 
 class Event(NamedTuple):
index f4b1b4bcd2ca5dd80b0feff81c15be4711c35bf0..4d3f01f1198f7df5e3f258d604c414678b60d52e 100644 (file)
@@ -211,6 +211,10 @@ class _PromptWidget(_ScrollableWidget):
                 self._history += [self._input_buffer[:]]
                 self._reset_buffer('')
 
+    def cmd__append(self, to_append: str) -> None:
+        'Append to prompt input buffer.'
+        self.append(to_append)
+
     def cmd__backspace(self) -> None:
         'Truncate current content by one character, if possible.'
         if self._cursor_x > 0:
@@ -336,11 +340,13 @@ class _KeyboardLoop(Loop):
                     to_paste += ' '
                 else:
                     to_paste += '#'
-            self.broadcast(EventType.PROMPT_ADD, to_paste)
+            self.broadcast(EventType.TUI_CMD,
+                           ('window.prompt.append', to_paste))
         elif yielded in _KEYBINDINGS:
-            self.broadcast(EventType.KEYBINDING, _KEYBINDINGS[yielded])
+            self.broadcast(EventType.TUI_CMD, _KEYBINDINGS[yielded])
         elif len(yielded) == 1:
-            self.broadcast(EventType.PROMPT_ADD, yielded)
+            self.broadcast(EventType.TUI_CMD,
+                           ('window.prompt.append', yielded))
         else:
             self.broadcast(EventType.LOG,
                            f'ALERT: unknown keyboard input: {yielded}')
@@ -410,12 +416,10 @@ class _TuiLoop(Loop):
             conn_win.prompt.update_prompt(nick_confirmed=False)
             if conn_win == self.window:
                 self.window.prompt.draw()
-        elif event.type_ == EventType.KEYBINDING:
+        elif event.type_ == EventType.TUI_CMD:
             cmd = self._cmd_name_to_cmd(event.payload[0])
             assert cmd is not None
             cmd(*event.payload[1:])
-        elif event.type_ == EventType.PROMPT_ADD:
-            self.window.prompt.append(event.payload)
         # elif event.type_ == EventType.DEBUG:
         #     from traceback import format_exception
         #     for line in '\n'.join(format_exception(event.payload)