mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-23 16:58:09 +02:00
Implement dirty line tracking
This commit is contained in:
@@ -278,6 +278,8 @@ class TestDataTypes(BaseTest):
|
||||
self.ae(cy, 3)
|
||||
for i in range(lb2.ynum):
|
||||
self.ae(lb2.line(i), lb.line(i + 2))
|
||||
self.assertFalse(lb.dirty_lines())
|
||||
self.ae(lb2.dirty_lines(), list(range(lb2.ynum)))
|
||||
|
||||
def line_comparison(self, buf, *lines):
|
||||
for i, l0 in enumerate(lines):
|
||||
@@ -298,6 +300,7 @@ class TestDataTypes(BaseTest):
|
||||
lb = create_lbuf('0123 ', '56789')
|
||||
lb2 = self.line_comparison_rewrap(lb, '0123 5', '6789', '')
|
||||
self.assertContinued(lb2, False, True)
|
||||
self.ae(lb2.dirty_lines(), [0, 1])
|
||||
|
||||
lb = create_lbuf('12', 'abc')
|
||||
lb2 = self.line_comparison_rewrap(lb, '12', 'abc')
|
||||
@@ -357,6 +360,7 @@ class TestDataTypes(BaseTest):
|
||||
hb.rewrap(hb2)
|
||||
for i in range(hb2.ynum):
|
||||
self.ae(hb2.line(i), hb.line(i))
|
||||
self.ae(hb2.dirty_lines(), list(range(hb2.ynum)))
|
||||
hb = filled_history_buf(5, 5)
|
||||
hb2 = HistoryBuf(hb.ynum, hb.xnum * 2)
|
||||
hb.rewrap(hb2)
|
||||
|
||||
@@ -324,3 +324,41 @@ class TestScreen(BaseTest):
|
||||
s.cursor_visible = False
|
||||
s.toggle_alt_screen()
|
||||
self.assertFalse(s.cursor_visible)
|
||||
|
||||
def test_dirty_lines(self):
|
||||
s = self.create_screen()
|
||||
self.assertFalse(s.linebuf.dirty_lines())
|
||||
s.draw('a' * (s.columns * 2))
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 1])
|
||||
self.assertFalse(s.historybuf.dirty_lines())
|
||||
while not s.historybuf.count:
|
||||
s.draw('a' * (s.columns * 2))
|
||||
self.ae(s.historybuf.dirty_lines(), list(range(s.historybuf.count)))
|
||||
self.ae(s.linebuf.dirty_lines(), list(range(s.lines)))
|
||||
s.cursor.x, s.cursor.y = 0, 1
|
||||
s.insert_lines(2)
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 3, 4])
|
||||
s.draw('a' * (s.columns * s.lines))
|
||||
self.ae(s.linebuf.dirty_lines(), list(range(s.lines)))
|
||||
s.cursor.x, s.cursor.y = 0, 1
|
||||
s.delete_lines(2)
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 1, 2])
|
||||
|
||||
s = self.create_screen()
|
||||
self.assertFalse(s.linebuf.dirty_lines())
|
||||
s.erase_in_line(0, False)
|
||||
self.ae(s.linebuf.dirty_lines(), [0])
|
||||
s.index(), s.index()
|
||||
s.erase_in_display(0, False)
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 2, 3, 4])
|
||||
|
||||
s = self.create_screen()
|
||||
self.assertFalse(s.linebuf.dirty_lines())
|
||||
s.insert_characters(2)
|
||||
self.ae(s.linebuf.dirty_lines(), [0])
|
||||
s.cursor.y = 1
|
||||
s.delete_characters(2)
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 1])
|
||||
s.cursor.y = 2
|
||||
s.erase_characters(2)
|
||||
self.ae(s.linebuf.dirty_lines(), [0, 1, 2])
|
||||
|
||||
Reference in New Issue
Block a user