Two fixes for test suite's terminal
authorTom Tromey <tom@tromey.com>
Sun, 28 Jul 2019 21:02:35 +0000 (15:02 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 29 Jul 2019 22:06:58 +0000 (16:06 -0600)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/tuiterm.exp

index f17638736a40961b364fb3da24daee1fd045f801..a0b5862dd8bce892295857bbc43bb4fffb94b472 100644 (file)
@@ -1,3 +1,8 @@
+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
index c58b7cfda215f8a0dde940e8f658ef41e5241557..d94fd431d8a0fbedd5d5082d53b62a000ff55e27 100644 (file)
@@ -104,6 +104,21 @@ namespace eval Term {
        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
@@ -238,7 +253,17 @@ namespace eval Term {
     # 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.