[gdb/tui] Fix centering and highlighting of current line
commitb35013e29f3bcf9028aa22291f378010420322fe
authorTom de Vries <tdevries@suse.de>
Tue, 2 Apr 2024 14:09:10 +0000 (2 16:09 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 2 Apr 2024 14:09:10 +0000 (2 16:09 +0200)
tree531aad71ff66da8bf83049db0eaf51c223b316b2
parent33c58f484406bd9665e5bd15637600540157f612
[gdb/tui] Fix centering and highlighting of current line

After starting TUI like this with a hello world a.out:
...
$ gdb -q a.out -ex start -ex "tui enable"
...
we get:
...
┌─hello.c──────────────────────────────┐
│        5 {                           │
│        6   printf ("hello\n");       │
│        7                             │
│        8   return 0;                 │
│        9 }                           │
│                                      │
└──────────────────────────────────────┘
...

This is a regression since commit ee1e9bbb513 ("[gdb/tui] Fix displaying main
after resizing"), before which we had instead:
...
┌─hello.c──────────────────────────────┐
│        4 main (void)                 │
│        5 {                           │
│  >     6 \e[7m  printf ("hello\n");\e[0m       │
│        7                             │
│        8   return 0;                 │
│        9 }                           │
└──────────────────────────────────────┘
...

In other words, the problems are:
- the active line (source line 6) is no longer highlighted, and
- the active line is not vertically centered (screen line 2 out 6 instead of
  screen line 3 out of 6).

Fix these problems respectively by:
- in tui_enable, instead of "tui_show_frame_info (0)" using
  'tui_show_frame_info (deprecated_safe_get_selected_frame ())", and
- in tui_source_window_base::rerender, adding centering functionality.

Tested on aarch64-linux.

Co-Authored-By: Tom Tromey <tom@tromey.com>
Approved-By: Tom Tromey <tom@tromey.com>
PR tui/31522
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31522
gdb/testsuite/gdb.tui/main-2.exp [new file with mode: 0644]
gdb/tui/tui-winsource.c
gdb/tui/tui.c