diff options
author | Tom de Vries <tdevries@suse.de> | 2024-04-02 16:09:10 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-04-02 16:09:10 +0200 |
commit | b35013e29f3bcf9028aa22291f378010420322fe (patch) | |
tree | 531aad71ff66da8bf83049db0eaf51c223b316b2 /gdb/tui | |
parent | 33c58f484406bd9665e5bd15637600540157f612 (diff) | |
download | gdb-b35013e29f3bcf9028aa22291f378010420322fe.zip gdb-b35013e29f3bcf9028aa22291f378010420322fe.tar.gz gdb-b35013e29f3bcf9028aa22291f378010420322fe.tar.bz2 |
[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 [7m printf ("hello\n");[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
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-winsource.c | 10 | ||||
-rw-r--r-- | gdb/tui/tui.c | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 4dbbe92..61c8e00 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -467,6 +467,16 @@ tui_source_window_base::rerender () struct symtab *s = find_pc_line_symtab (get_frame_pc (frame)); if (this != TUI_SRC_WIN) find_line_pc (s, cursal.line, &cursal.pc); + + /* This centering code is copied from tui_source_window::maybe_update. + It would be nice to do centering more often, and do it in just one + location. But since this is a regression fix, handle this + conservatively for now. */ + int start_line = (cursal.line - ((height - box_size ()) / 2)) + 1; + if (start_line <= 0) + start_line = 1; + cursal.line = start_line; + update_source_window (gdbarch, cursal); } else diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c index 19f0960..eaee85f 100644 --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -466,7 +466,7 @@ tui_enable (void) tui_set_term_width_to (COLS); def_prog_mode (); - tui_show_frame_info (0); + tui_show_frame_info (deprecated_safe_get_selected_frame ()); tui_set_initial_layout (); tui_set_win_focus_to (TUI_SRC_WIN); keypad (TUI_CMD_WIN->handle.get (), TRUE); |