diff options
author | Sören Tempel <soeren+git@soeren-tempel.net> | 2021-06-29 03:11:20 +0200 |
---|---|---|
committer | Sören Tempel <soeren+git@soeren-tempel.net> | 2021-06-29 03:11:20 +0200 |
commit | 21577c3c8dab2b63e2710ab1576234a6378b9880 (patch) | |
tree | 3f0741eafa75754ad1ca90ff3edb9a2da67d87ee | |
parent | c7a0620eb2cca0595a57489d68aa8a535733b96d (diff) |
Preliminary support for carriage return
-rw-r--r-- | saneterm/pty.py | 8 | ||||
-rw-r--r-- | saneterm/terminal.py | 6 | ||||
-rw-r--r-- | saneterm/termview.py | 18 |
3 files changed, 32 insertions, 0 deletions
diff --git a/saneterm/pty.py b/saneterm/pty.py index 90bcf34..d294770 100644 --- a/saneterm/pty.py +++ b/saneterm/pty.py @@ -42,6 +42,8 @@ class Source(GLib.Source): class EventType(Enum): TEXT = auto() BELL = auto() + CARRIAGE_RETURN = auto() + NEWLINE = auto() class Parser(object): """ @@ -96,6 +98,12 @@ class Parser(object): if code == '\a': flush_until = pos special_ev = (EventType.BELL, None) + elif code == '\n': + flush_until = pos + special_ev = (EventType.NEWLINE, None) + elif code == '\r': + flush_until = pos + special_ev = (EventType.CARRIAGE_RETURN, None) pos += 1 diff --git a/saneterm/terminal.py b/saneterm/terminal.py index f0c5e4d..41044b4 100644 --- a/saneterm/terminal.py +++ b/saneterm/terminal.py @@ -168,6 +168,12 @@ class Terminal(Gtk.Window): for (ev, data) in self.pty_parser.parse(decoded): if ev is pty.EventType.TEXT: self.termview.insert_data(data) + elif ev is pty.EventType.NEWLINE: + self.termview.set_replace(False) + self.termview.insert_data("\n") + elif ev is pty.EventType.CARRIAGE_RETURN: + self.termview.goto_line_start() + self.termview.set_replace(True) elif ev is pty.EventType.BELL: self.termview.error_bell() self.set_urgency_hint(True) diff --git a/saneterm/termview.py b/saneterm/termview.py index c697fae..0d48b66 100644 --- a/saneterm/termview.py +++ b/saneterm/termview.py @@ -82,6 +82,7 @@ class TermView(Gtk.TextView): # TODO: set insert-hypens to false in GTK 4 # https://docs.gtk.org/gtk4/property.TextTag.insert-hyphens.html Gtk.TextView.__init__(self) + self.__replace = False self._textbuffer = TermBuffer(limit) self._textbuffer.connect("end-user-action", self.__end_user_action) @@ -122,12 +123,29 @@ class TermView(Gtk.TextView): (GObject.TYPE_PYOBJECT,)) def insert_data(self, str): + if self.__replace: + self.do_delete_from_cursor(Gtk.DeleteType.CHARS, len(str)) self._textbuffer.insert(self._textbuffer.get_end_iter(), str) end = self._textbuffer.get_end_iter() self._last_mark = self._textbuffer.create_mark(None, end, True) self._last_output_mark = self._last_mark + def set_replace(self, value): + self.__replace = value + if not value: # FIXME + buffer = self.get_buffer() + buffer.place_cursor(buffer.get_end_iter()) + + def goto_line_start(self): + buffer = self.get_buffer() + + lstart = buffer.get_end_iter() + lstart.set_line_offset(0) + + self.__replace = True + buffer.place_cursor(lstart) + def flush(self): end = self._textbuffer.get_end_iter() |