Exactly which escape sequences are emitted by gdb in TUI mode are
determined largely by the curses implementation. Testing my latest
(as yet unsubmitted) series to refactor the TUI showed a couple of
failures that I tracked to the test suite's terminal implementation.
In particular, the CSI "@" sequence was not implemented; and the CSI
"X" sequence was implemented incorrectly.
This patch fixes both of these problems. Tested on x86-64 Fedora 28.
gdb/testsuite/ChangeLog
2019-07-29 Tom Tromey <tom@tromey.com>
* lib/tuiterm.exp (Term::_csi_@): New proc.
(Term::_csi_X): Don't move cursor.
+2019-07-29 Tom Tromey <tom@tromey.com>
+
+ * lib/tuiterm.exp (Term::_csi_@): New proc.
+ (Term::_csi_X): Don't move cursor.
+
2019-07-29 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.base/options.exp: Update backtrace - completion to
set _cur_x 0
}
+ # Make room for characters.
+ proc _csi_@ {args} {
+ set n [_default [lindex $args 0] 1]
+ variable _cur_x
+ variable _cur_y
+ variable _chars
+ set in_x $_cur_x
+ set out_x [expr {$_cur_x + $n}]
+ for {set i 0} {$i < $n} {incr i} {
+ set _chars($out_x,$_cur_y) $_chars($in_x,$_cur_y)
+ incr in_x
+ incr out_x
+ }
+ }
+
# Cursor Up.
proc _csi_A {args} {
variable _cur_y
# Erase chars.
proc _csi_X {args} {
set n [_default [lindex $args 0] 1]
- _insert [string repeat " " $n]
+ # Erase characters but don't move cursor.
+ variable _cur_x
+ variable _cur_y
+ variable _attrs
+ variable _chars
+ set lattr [array get _attrs]
+ set x $_cur_x
+ for {set i 0} {$i < $n} {incr i} {
+ set _chars($x,$_cur_y) [list " " $lattr]
+ incr x
+ }
}
# Repeat.