I came across a bug in the implementation of line feed in tuiterm, and added a
unit test that exposes it.
Before sending the line feed we have:
...
Screen Dump (size 8 columns x 4 rows, cursor at column 0, row 3):
0 abcdefgh
1 ijklmnop
2 qrstuvwx
3 yz01234
...
and after it we have:
...
Screen Dump (size 8 columns x 4 rows, cursor at column 0, row 1):
0 ijklmnop
1 qrstuvwx
2 yz01234
3 yz01234
...
Note how the cursor started at row 3 and after the line feed ended up at
row 1, while it should have stayed in row 3.
Fix this by moving "incr _cur_row -1" one level up in the loop nest in
proc _ctl_0x0a.
Tested on x86_64-linux.
} 1 3
}
+proc test_linefeed_scroll { } {
+ Term::_move_cursor 0 3
+ Term::_ctl_0x0a
+ check "linefeed_scroll" {
+ "ijklmnop"
+ "qrstuvwx"
+ "yz01234 "
+ "yz01234 "
+ } 0 3
+ Term::dump_screen
+}
+
proc test_carriage_return { } {
Term::_move_cursor 1 2
Term::_ctl_0x0d
foreach_with_prefix test {
test_backspace
test_linefeed
+ test_linefeed_scroll
test_carriage_return
test_insert_characters
test_cursor_up
for {set x 0} {$x < $_cols} {incr x} {
set _chars($x,$y) $_chars($x,$next_y)
}
- incr _cur_row -1
}
+
+ incr _cur_row -1
}
}
}