diff options
author | Tom de Vries <tdevries@suse.de> | 2023-12-04 08:48:48 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2023-12-04 08:48:48 +0100 |
commit | d1a912db7fdf50c28224d20464bfa163d8438980 (patch) | |
tree | b17d70bbfa6bf7f7086c81a5dbdccd4bd7312dce /gdb/tui | |
parent | 6497a01d1d38ca033188702068f38cf6dad75d84 (diff) | |
download | gdb-d1a912db7fdf50c28224d20464bfa163d8438980.zip gdb-d1a912db7fdf50c28224d20464bfa163d8438980.tar.gz gdb-d1a912db7fdf50c28224d20464bfa163d8438980.tar.bz2 |
[gdb/tui] Fix wrapping strings
I noticed that after resizing to a narrow window, I got:
...
┌────────────────┐
│ │
│[ No Source Avail
able ] │
│ │
└────────────────┘
...
Fix this by adding two new functions:
- tui_win_info::display_string (int y, int x, const char *str)
- tui_win_info::display_string (const char *str)
that make sure that borders are not overwritten, which get us instead:
...
┌────────────────┐
│ │
│[ No Source Avai│
│ │
│ │
└────────────────┘
...
Tested on x86_64-linux.
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-data.c | 30 | ||||
-rw-r--r-- | gdb/tui/tui-data.h | 8 | ||||
-rw-r--r-- | gdb/tui/tui-regs.c | 2 | ||||
-rw-r--r-- | gdb/tui/tui-source.c | 2 | ||||
-rw-r--r-- | gdb/tui/tui-winsource.c | 7 |
5 files changed, 42 insertions, 7 deletions
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index fc90df2..c51bd11 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -164,6 +164,36 @@ tui_win_info::set_title (std::string &&new_title) } } +/* See tui-data.h. */ + +void +tui_win_info::display_string (int y, int x, const char *str) const +{ + int n = width - box_width () - x; + if (n <= 0) + return; + + mvwaddnstr (handle.get (), y, x, str, n); +} + +/* See tui-data.h. */ + +void +tui_win_info::display_string (const char *str) const +{ + int y, x; + getyx (handle.get (), y, x); + + /* Avoid Wunused-but-set-variable. */ + (void) y; + + int n = width - box_width () - x; + if (n <= 0) + return; + + waddnstr (handle.get (), str, n); +} + void tui_win_info::rerender () { diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 82340e5..76d0de3 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -167,6 +167,14 @@ public: const std::string &title () const { return m_title; } + /* Display string STR in the window at position (Y,X), abbreviated if + necessary. */ + void display_string (int y, int x, const char *str) const; + + /* Display string STR in the window at the current cursor position, + abbreviated if necessary. */ + void display_string (const char *str) const; + /* Window handle. */ std::unique_ptr<WINDOW, curses_deleter> handle; /* Window width. */ diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c index 01538d4..4c6ea8a 100644 --- a/gdb/tui/tui-regs.c +++ b/gdb/tui/tui-regs.c @@ -407,7 +407,7 @@ tui_data_window::erase_data_content (const char *prompt) x_pos = 1; else x_pos = half_width - strlen (prompt); - mvwaddstr (handle.get (), (height / 2), x_pos, (char *) prompt); + display_string (height / 2, x_pos, prompt); } tui_wrefresh (handle.get ()); } diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 5e9a954..bce381a 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -253,5 +253,5 @@ tui_source_window::show_line_number (int offset) const tui_left_margin_verbose ? "%0*d%c" : "%*d%c", m_digits - 1, lineno, space); } - waddstr (handle.get (), text); + display_string (text); } diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index ea4ca21..acbaef9 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -223,10 +223,7 @@ tui_source_window_base::do_erase_source_content (const char *str) x_pos = 1; else x_pos = half_width - strlen (str); - mvwaddstr (handle.get (), - (height / 2), - x_pos, - (char *) str); + display_string (height / 2, x_pos, str); refresh_window (); } @@ -697,7 +694,7 @@ tui_source_window_base::update_exec_info (bool refresh_p) if (src_element->is_exec_point) element[TUI_EXEC_POS] = '>'; - mvwaddstr (handle.get (), i + box_width (), box_width (), element); + display_string (i + box_width (), box_width (), element); show_line_number (i); } |