diff options
Diffstat (limited to 'tcvt.py')
-rwxr-xr-x | tcvt.py | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -562,6 +562,8 @@ class Terminal: def feed_esc(self, char): if char == ord(b'['): self.mode = (self.feed_esc_opbr,) + elif char == ord(b']'): + self.mode = (self.feed_esc_clbr, bytearray()) else: raise ValueError("feed esc %r" % char) @@ -660,6 +662,28 @@ class Terminal: else: raise ValueError("feed esc [ %r %r" % (prev, char)) + def feed_esc_clbr(self, char, prev): + self.feed_reset() + if char == 7: + # Bell character, end of control sequence; pass it through + # if one of those that do not interfere with the other curses. + if not prev.startswith((b"0;", b"1;", b"2;")): + raise ValueError("dropped osc sequence: esc ] %r bel" + % (prev,)) + self.refresh() + if sys.version_info.major == 2: + stdout = sys.stdout + else: + stdout = sys.stdout.buffer + stdout.write(bytearray(b"\x1b]") + prev + bytearray(b"\x07")) + stdout.flush() + + elif 8 <= char <= 13 or 32 <= char <= 126: + self.mode = (self.feed_esc_clbr, prev + bytearray((char,))) + else: + raise ValueError("feed esc ] %r %r" % (prev, char)) + + symbolic_keymapping = { ord(b"\n"): "cr", curses.KEY_LEFT: "kcub1", |