about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--saneterm/termview.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/saneterm/termview.py b/saneterm/termview.py
index 6558f2a..7276977 100644
--- a/saneterm/termview.py
+++ b/saneterm/termview.py
@@ -95,6 +95,7 @@ class TermView(Gtk.TextView):
     def cursor_at_end(self):
         return self.__cursor_at_mark(self._last_mark)
 
+    # XXX: Can maybe be removed in favor of do_delete_from_cursor.
     def do_backspace(self):
         # If current position is output positon ignore backspace.
         if not self.cursor_at_out():
@@ -110,6 +111,26 @@ class TermView(Gtk.TextView):
         else:
             self._last_mark = buffer.create_mark(None, end, True)
 
+    def do_delete_from_cursor(self, type, count):
+        # If the type is GTK_DELETE_CHARS, GTK+ deletes the selection.
+        if type == Gtk.DeleteType.CHARS:
+            Gtk.TextView.do_delete_from_cursor(self, type, count)
+            return
+
+        buf = self._textbuffer
+        cur = buf.get_iter_at_offset(buf.props.cursor_position)
+        out = buf.get_iter_at_mark(self._last_output_mark)
+
+        # Only go backward by $count chars if there are enough
+        # characters in the buffer and the movement would not
+        # go beyond the last output point.
+        if cur.backward_chars(count):
+            return
+        elif cur.compare(out) != 1: # cur <= out
+            return
+
+        Gtk.TextView.do_delete_from_cursor(self, type, count)
+
     def __kill_after_output(self, textview):
         buffer = textview.get_buffer()