summaryrefslogtreecommitdiff
path: root/tcvt.py
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2011-02-26 14:11:07 +0100
committerHelmut Grohne <helmut@subdivi.de>2011-02-26 14:11:07 +0100
commit5c79b6176cf820ec0d9db6c36105bb268d7c3bc7 (patch)
treea5ba1cc5a467e4bc904464c6b83a9a18cc21f8e6 /tcvt.py
parent182ec65424dc2feb70228c87af40a054751f530b (diff)
downloadtcvt-5c79b6176cf820ec0d9db6c36105bb268d7c3bc7.tar.gz
use tigetstr to resolve ansi key sequences
Diffstat (limited to 'tcvt.py')
-rwxr-xr-xtcvt.py30
1 files changed, 20 insertions, 10 deletions
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()