From 5c79b6176cf820ec0d9db6c36105bb268d7c3bc7 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sat, 26 Feb 2011 14:11:07 +0100 Subject: use tigetstr to resolve ansi key sequences --- tcvt.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'tcvt.py') diff --git a/tcvt.py b/tcvt.py index 7b65e96..3d8b167 100755 --- a/tcvt.py +++ b/tcvt.py @@ -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() -- cgit v1.2.3