aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-04-02 16:09:10 +0200
committerTom de Vries <tdevries@suse.de>2024-04-02 16:09:10 +0200
commitb35013e29f3bcf9028aa22291f378010420322fe (patch)
tree531aad71ff66da8bf83049db0eaf51c223b316b2 /gdb/tui
parent33c58f484406bd9665e5bd15637600540157f612 (diff)
downloadgdb-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  printf ("hello\n"); │ │ 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.c10
-rw-r--r--gdb/tui/tui.c2
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);