summaryrefslogtreecommitdiff
path: root/tcvt.py
diff options
context:
space:
mode:
Diffstat (limited to 'tcvt.py')
-rwxr-xr-xtcvt.py35
1 files changed, 28 insertions, 7 deletions
diff --git a/tcvt.py b/tcvt.py
index 389ec14..7b65e96 100755
--- a/tcvt.py
+++ b/tcvt.py
@@ -255,6 +255,8 @@ class Terminal:
def start(self):
self.realscreen = curses.initscr()
+ self.realscreen.nodelay(1)
+ self.realscreen.keypad(1)
curses.start_color()
init_color_pairs()
self.screen = TwoColumn(self.realscreen)
@@ -274,7 +276,7 @@ class Terminal:
self.screen.addch(ord(char))
elif char in '0123456789@:~$ .#!/_(),[]=-+*\'"|<>%&\\?;`^{}':
self.screen.addch(ord(char))
- elif char in '\xb6\xb7\xc3\xfc\xf6':
+ elif char in '\xb6\xb7\xc3\xd6\xdc\xe4\xfc\xf6':
self.screen.addch(ord(char))
elif char == '\xc4':
self.screen.addch(curses.ACS_HLINE)
@@ -404,6 +406,18 @@ 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
+}
+
def main():
t = Terminal()
@@ -426,12 +440,19 @@ def main():
continue
raise
if 0 in res:
- data = os.read(0, 1)
- if ord(data) == 0xb3:
- t.switchmode()
- t.resizepty(masterfd)
- else:
- os.write(masterfd, data)
+ while True:
+ key = t.realscreen.getch()
+ if key == -1:
+ break
+ if key == 0xb3:
+ t.switchmode()
+ t.resizepty(masterfd)
+ elif key <= 0xff:
+ os.write(masterfd, chr(key))
+ elif key in keymapping:
+ os.write(masterfd, keymapping[key])
+ else:
+ raise ValueError("getch returned %d" % key)
elif masterfd in res:
try:
data = os.read(masterfd, 1024)