diff options
Diffstat (limited to 'tcvt.py')
-rwxr-xr-x | tcvt.py | 84 |
1 files changed, 44 insertions, 40 deletions
@@ -515,16 +515,17 @@ class Terminal: def feed(self, char): self.mode[0](char, *self.mode[1:]) + feed_simple_table = { + ord('\a'): do_bel, + ord('\b'): do_cub1, + ord('\n'): do_ind, + ord('\r'): do_cr, + ord('\t'): do_ht, + } def feed_simple(self, char): - func = { - ord('\a'): self.do_bel, - ord('\b'): self.do_cub1, - ord('\n'): self.do_ind, - ord('\r'): self.do_cr, - ord('\t'): self.do_ht, - }.get(char) + func = self.feed_simple_table.get(char) if func: - func() + func(self) elif char in simple_characters: self.addch(char) elif char == 0x1b: @@ -548,22 +549,23 @@ class Terminal: else: raise ValueError("feed esc %r" % char) + feed_esc_opbr_table = { + ord('A'): do_cuu1, + ord('B'): do_cud1, + ord('C'): do_cuf1, + ord('D'): do_cub1, + ord('H'): do_home, + ord('J'): do_ed, + ord('L'): do_il1, + ord('M'): do_dl1, + ord('K'): do_el, + ord('P'): do_dch1, + } def feed_esc_opbr(self, char): self.feed_reset() - func = { - ord('A'): self.do_cuu1, - ord('B'): self.do_cud1, - ord('C'): self.do_cuf1, - ord('D'): self.do_cub1, - ord('H'): self.do_home, - ord('J'): self.do_ed, - ord('L'): self.do_il1, - ord('M'): self.do_dl1, - ord('K'): self.do_el, - ord('P'): self.do_dch1, - }.get(char) + func = self.feed_esc_opbr_table.get(char) if func: - func() + func(self) elif char == ord(b'm'): self.feed_esc_opbr_next(char, bytearray(b'0')) elif char in bytearray(b'0123456789'): @@ -571,15 +573,16 @@ class Terminal: else: raise ValueError("feed esc [ %r" % char) + feed_color_table = { + 1: do_bold, + 4: do_smul, + 5: do_blink, + 8: do_invis, + } def feed_color(self, code): - func = { - 1: self.do_bold, - 4: self.do_smul, - 5: self.do_blink, - 8: self.do_invis, - }.get(code) + func = self.feed_color_table.get(code) if func: - func() + func(self) elif code == 0: self.fg = self.bg = 0 self.screen.attrset(0) @@ -606,21 +609,22 @@ class Terminal: else: raise ValueError("feed esc [ %r m" % code) + feed_esc_opbr_next_table = { + ord('A'): do_cuu, + ord('B'): do_cud, + ord('C'): do_cuf, + ord('D'): do_cub, + ord('L'): do_il, + ord('M'): do_dl, + ord('P'): do_dch, + ord('X'): do_ech, + ord('@'): do_ich, + } def feed_esc_opbr_next(self, char, prev): self.feed_reset() - func = { - ord('A'): self.do_cuu, - ord('B'): self.do_cud, - ord('C'): self.do_cuf, - ord('D'): self.do_cub, - ord('L'): self.do_il, - ord('M'): self.do_dl, - ord('P'): self.do_dch, - ord('X'): self.do_ech, - ord('@'): self.do_ich, - }.get(char) + func = self.feed_esc_opbr_next_table.get(char) if func and prev.isdigit(): - func(int(prev)) + func(self, int(prev)) elif char in bytearray(b'0123456789;'): self.mode = (self.feed_esc_opbr_next, prev + bytearray((char,))) elif char == ord(b'm'): |