aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-12-04 08:48:48 +0100
committerTom de Vries <tdevries@suse.de>2023-12-04 08:48:48 +0100
commitd1a912db7fdf50c28224d20464bfa163d8438980 (patch)
treeb17d70bbfa6bf7f7086c81a5dbdccd4bd7312dce /gdb/tui
parent6497a01d1d38ca033188702068f38cf6dad75d84 (diff)
downloadfsf-binutils-gdb-d1a912db7fdf50c28224d20464bfa163d8438980.zip
fsf-binutils-gdb-d1a912db7fdf50c28224d20464bfa163d8438980.tar.gz
fsf-binutils-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.c30
-rw-r--r--gdb/tui/tui-data.h8
-rw-r--r--gdb/tui/tui-regs.c2
-rw-r--r--gdb/tui/tui-source.c2
-rw-r--r--gdb/tui/tui-winsource.c7
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);
}