diff options
author | Helmut Grohne <helmut@subdivi.de> | 2011-02-26 14:11:07 +0100 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2011-02-26 14:11:07 +0100 |
commit | 5c79b6176cf820ec0d9db6c36105bb268d7c3bc7 (patch) | |
tree | a5ba1cc5a467e4bc904464c6b83a9a18cc21f8e6 | |
parent | 182ec65424dc2feb70228c87af40a054751f530b (diff) | |
download | tcvt-5c79b6176cf820ec0d9db6c36105bb268d7c3bc7.tar.gz |
use tigetstr to resolve ansi key sequences
-rwxr-xr-x | tcvt.py | 30 |
1 files changed, 20 insertions, 10 deletions
@@ -406,19 +406,29 @@ class Terminal: else: raise ValueError("feed esc [ %r %r" % (prev, char)) -keymapping = { - curses.KEY_LEFT: "\x1b[D", - curses.KEY_DOWN: "\x1b[B", - curses.KEY_RIGHT: "\x1b[C", - curses.KEY_UP: "\x1b[A", - curses.KEY_HOME: "\x1b[H", - curses.KEY_IC: "\x1b[L", - curses.KEY_BACKSPACE: "\x08", - curses.KEY_PPAGE: "", # unsupported by ansi - curses.KEY_NPAGE: "", # unsupported by ansi +symbolic_keymapping = { + curses.KEY_LEFT: "kcub1", + curses.KEY_DOWN: "kcud1", + curses.KEY_RIGHT: "kcuf1", + curses.KEY_UP: "kcuu1", + curses.KEY_HOME: "khome", + curses.KEY_IC: "kich1", + curses.KEY_BACKSPACE: "kbs", + curses.KEY_PPAGE: "kpp", + curses.KEY_NPAGE: "knp", } +def compute_keymap(symbolic_map): + oldterm = os.environ["TERM"] + curses.setupterm("ansi") + keymap = {} + for key, value in symbolic_map.items(): + keymap[key] = (curses.tigetstr(value) or "").replace("\\E", "\x1b") + curses.setupterm(oldterm) + return keymap + def main(): + keymapping = compute_keymap(symbolic_keymapping) t = Terminal() pid, masterfd = pty.fork() |