diff options
author | Helmut Grohne <helmut@subdivi.de> | 2017-01-10 12:37:07 +0100 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2017-01-10 12:37:07 +0100 |
commit | f0109cd5051e4b32e038d0dc156e5a8e4fd08caf (patch) | |
tree | ce87f31aee171e538421c22dc0f94aa95ec9464f | |
parent | a39db1ed4fc8b6e66779f9ae5b9341763c9d4c1f (diff) | |
download | tcvt-f0109cd5051e4b32e038d0dc156e5a8e4fd08caf.tar.gz |
implement cursor position reporting (u7)
This is used by a number of programs (including vim) to determine utf8
terminal capabilities.
The feed functions now return none or a bytes object. If a bytes object
is returned, it is sent back to the requesting program.
-rwxr-xr-x | tcvt.py | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -520,6 +520,10 @@ class Terminal: self.screen.move(n - 1, x) self.request_refresh() + def do_u7(self): + y, x = self.screen.getyx() + return b"\x1b[%d;%dR" % (y + 1, x + 1) + def feed_reset(self): if self.graphics_font: self.mode = (self.feed_graphics,) @@ -527,7 +531,7 @@ class Terminal: self.mode = (self.feed_simple,) def feed(self, char): - self.mode[0](char, *self.mode[1:]) + return self.mode[0](char, *self.mode[1:]) feed_simple_table = { ord('\a'): do_bel, @@ -661,6 +665,8 @@ class Terminal: self.request_refresh() elif char == ord(b'K') and prev == b'1': self.do_el1() + elif char == ord(b'n') and prev == b'6': + return self.do_u7() else: raise ValueError("feed esc [ %r %r" % (prev, char)) @@ -845,13 +851,15 @@ def main(): if not data: break for char in bytearray(data): - if "TCVT_DEVEL" in os.environ: - t.feed(char) + try: + response = t.feed(char) + except ValueError: + if "TCVT_DEVEL" in os.environ: + raise + t.feed_reset() else: - try: - t.feed(char) - except ValueError: - t.feed_reset() + if response: + os.write(masterfd, response) t.refresh(0.1) else: t.refresh() |