TIMEOUT_LOOP = 0.1
INPUT_PROMPT = ':'
+KEYBINDINGS = {
+ 'KEY_BACKSPACE': 'prompt_backspace',
+ 'KEY_ENTER': 'prompt_enter'
+}
+
IRCSPEC_LINE_SEPARATOR = b'\r\n'
IRCSPEC_TAG_ESCAPES = ((r'\:', ';'),
(r'\s', ' '),
elif event.type_ == 'SEND':
self._log_buffer += [f'---> {event.payload}']
self._draw_log()
- elif event.type_ == 'INPUT_PROMPT':
- if event.payload[0] == 'ENTER' and self._prompt:
- self.broadcast('PROMPT_COMMAND', self._prompt)
- self._prompt = ''
- elif event.payload[0] == 'BACKSPACE':
- self._prompt = self._prompt[:-1]
- elif event.payload[0] == 'CHARACTER':
- self._prompt += event.payload[1]
+ elif event.type_ == 'KEYBINDING':
+ getattr(self, f'_kb__{event.payload}')()
+ elif event.type_ == 'INPUT_CHAR':
+ self._prompt += event.payload
self._draw_prompt()
elif event.type_ == 'SIGWINCH':
self._calc_and_draw_all()
self._term.flush()
return True
+ def _kb__prompt_backspace(self) -> None:
+ self._prompt = self._prompt[:-1]
+ self._draw_prompt()
+
+ def _kb__prompt_enter(self) -> None:
+ if self._prompt:
+ self.broadcast('PROMPT_COMMAND', self._prompt)
+ self._prompt = ''
+ self._draw_prompt()
+
def _calc_and_draw_all(self) -> None:
self._term.clear()
self._term.calc_geometry()
'Loop receiving and translating keyboard events towards main loop.'
def process_bonus(self, yielded: str) -> None:
- if yielded == 'KEY_ENTER':
- self.broadcast('INPUT_PROMPT', ('ENTER',))
- elif yielded == 'KEY_BACKSPACE':
- self.broadcast('INPUT_PROMPT', ('BACKSPACE',))
+ if yielded in KEYBINDINGS:
+ self.broadcast('KEYBINDING', KEYBINDINGS[yielded])
elif len(yielded) == 1:
- self.broadcast('INPUT_PROMPT', ('CHARACTER', yielded))
+ self.broadcast('INPUT_CHAR', yielded)
else:
self.broadcast('ALERT', f'unknown keyboard input: {yielded}')