From 535793fcf89eb5ceae0e80cf2679bb16e9d5f212 Mon Sep 17 00:00:00 2001 From: Makoto Shimazu Date: Tue, 11 Sep 2018 10:23:58 +0900 Subject: [PATCH] Read ANSI escape codes by KeyboardRecorderFromConsole --- mozc-nazoru/src/nazoru/bluetooth.py | 3 +++ mozc-nazoru/src/nazoru/keyboard_recorder.py | 26 +++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/mozc-nazoru/src/nazoru/bluetooth.py b/mozc-nazoru/src/nazoru/bluetooth.py index db0418a..3f900ae 100644 --- a/mozc-nazoru/src/nazoru/bluetooth.py +++ b/mozc-nazoru/src/nazoru/bluetooth.py @@ -54,4 +54,7 @@ class Bluetooth(): if cmd not in self.UART_CODES: print('Unknown Command: {}'.format(cmd)) return + if self._dummy: + print('bluetooth: command({})'.format(cmd)) + return self.send(struct.pack('b', self.UART_CODES[cmd])) diff --git a/mozc-nazoru/src/nazoru/keyboard_recorder.py b/mozc-nazoru/src/nazoru/keyboard_recorder.py index c889797..6c489e4 100644 --- a/mozc-nazoru/src/nazoru/keyboard_recorder.py +++ b/mozc-nazoru/src/nazoru/keyboard_recorder.py @@ -73,6 +73,24 @@ class KeyboardRecorderFromConsole(KeyboardRecorder): KeyboardRecorder.__init__(self, verbose) self.log('Input from console') + def _read_ansi_escape(self): + seq = sys.stdin.read(1) + if seq == '[': + code = sys.stdin.read(1) + self.log('CSI code: {}'.format(code)) + if code == 'A': + return (None, 'KEY_UP') + if code == 'B': + return (None, 'KEY_DOWN') + if code == 'C': + return (None, 'KEY_RIGHT') + if code == 'D': + return (None, 'KEY_LEFT') + self.log('it was unknown code...') + else: + self.log('unknown seq: {}'.format(seq)) + return (None, None) + def record(self): """ Returns a tuple of |data| and |command|. @@ -93,8 +111,12 @@ class KeyboardRecorderFromConsole(KeyboardRecorder): key = None finally: now = datetime.datetime.now() - if key == '\n': - return (None, None) + if key == '\x1b': + return self._read_ansi_escape(); + elif key == '\n': + return (None, 'KEY_ENTER') + elif key == '\b' or key == '\x7f': + return (None, 'KEY_BACKSPACE') elif key: if not recording: recording = True