diff options
author | Tom Tromey <tom@tromey.com> | 2019-07-11 17:06:00 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-12-01 11:59:23 -0700 |
commit | d1da6b01608841c846aa75209248e276f49e1587 (patch) | |
tree | e3a2f0b33cacf71c077a015f2647690086e70ef9 /gdb/tui | |
parent | 489dbda6a8d6d54bbc349c7048553fc5f791cb41 (diff) | |
download | gdb-d1da6b01608841c846aa75209248e276f49e1587.zip gdb-d1da6b01608841c846aa75209248e276f49e1587.tar.gz gdb-d1da6b01608841c846aa75209248e276f49e1587.tar.bz2 |
Allow using less horizontal space in TUI source window
The source window currently uses a field width of 6 for line numbers,
and it further aligns to the next tab stop. This seemed a bit
wasteful of horizontal space to me, so I changed that in an earlier
patch.
However, that change wasn't universally popular. This patch instead
adds the option to use less horizontal space in the TUI source window.
gdb/ChangeLog
2019-12-01 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.h (tui_copy_source_line): Add "ndigits"
parameter.
* tui/tui-winsource.c (tui_copy_source_line): Add "ndigits"
parameter.
* tui/tui-win.h (compact_source): Declare.
* tui/tui-win.c (compact_source): New global.
(tui_set_compact_source, tui_show_compact_source): New functions.
(_initialize_tui_win): Add "compact-source" setting.
* tui/tui-source.c (tui_source_window::set_contents): Handle
compact_source setting.
* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
* NEWS: Document new setting.
gdb/doc/ChangeLog
2019-12-01 Tom Tromey <tom@tromey.com>
* gdb.texinfo (TUI Configuration): Document new setting.
Change-Id: I46ce9a68b12c9c79332d510f9c14b3c84b7efadd
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-disasm.c | 2 | ||||
-rw-r--r-- | gdb/tui/tui-source.c | 15 | ||||
-rw-r--r-- | gdb/tui/tui-win.c | 33 | ||||
-rw-r--r-- | gdb/tui/tui-win.h | 3 | ||||
-rw-r--r-- | gdb/tui/tui-winsource.c | 15 | ||||
-rw-r--r-- | gdb/tui/tui-winsource.h | 10 |
6 files changed, 67 insertions, 11 deletions
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 8d5512e..9819cb9 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -245,7 +245,7 @@ tui_disasm_window::set_contents (struct gdbarch *arch, + asm_lines[i].insn); const char *ptr = line.c_str (); - src->line = tui_copy_source_line (&ptr, -1, offset, line_width); + src->line = tui_copy_source_line (&ptr, -1, offset, line_width, 0); src->line_or_addr.loa = LOA_ADDRESS; src->line_or_addr.u.addr = asm_lines[i].addr; diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 915f9e3..32877d7 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include <math.h> #include <ctype.h> #include "symtab.h" #include "frame.h" @@ -33,6 +34,7 @@ #include "tui/tui-data.h" #include "tui/tui-io.h" #include "tui/tui-stack.h" +#include "tui/tui-win.h" #include "tui/tui-winsource.h" #include "tui/tui-source.h" #include "gdb_curses.h" @@ -59,8 +61,10 @@ tui_source_window::set_contents (struct gdbarch *arch, nlines = (line_no + (height - 2)) - line_no; std::string srclines; + const std::vector<off_t> *offsets; if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, - &srclines)) + &srclines) + || !g_source_cache.get_line_charpos (s, &offsets)) ret = TUI_FAILURE; else { @@ -78,6 +82,13 @@ tui_source_window::set_contents (struct gdbarch *arch, start_line_or_addr.loa = LOA_LINE; cur_line_no = start_line_or_addr.u.line_no = line_no; + int digits = 0; + if (compact_source) + { + double l = log10 (offsets->size ()); + digits = 1 + (int) l; + } + const char *iter = srclines.c_str (); content.resize (nlines); while (cur_line < nlines) @@ -89,7 +100,7 @@ tui_source_window::set_contents (struct gdbarch *arch, if (*iter != '\0') text = tui_copy_source_line (&iter, cur_line_no, horizontal_offset, - line_width); + line_width, digits); /* Set whether element is the execution point and whether there is a break point on it. */ diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index f47dad8..576f9a5 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -927,6 +927,29 @@ tui_show_tab_width (struct ui_file *file, int from_tty, } +/* See tui-win.h. */ + +bool compact_source = false; + +/* Callback for "set tui compact-source". */ + +static void +tui_set_compact_source (const char *ignore, int from_tty, + struct cmd_list_element *c) +{ + if (TUI_SRC_WIN != nullptr) + TUI_SRC_WIN->refill (); +} + +/* Callback for "show tui compact-source". */ + +static void +tui_show_compact_source (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + printf_filtered (_("TUI source window compactness is %s.\n"), value); +} + /* Set the tab width of the specified window. */ static void tui_set_tab_width_command (const char *arg, int from_tty) @@ -1484,4 +1507,14 @@ When enabled GDB will print a message when the terminal is resized."), show_tui_resize_message, &maintenance_set_cmdlist, &maintenance_show_cmdlist); + + add_setshow_boolean_cmd ("compact-source", class_tui, + &compact_source, _("\ +Set whether the TUI source window is compact."), _("\ +Show whether the TUI source window is compact."), _("\ +This variable controls whether the TUI source window is shown\n\ +in a compact form. The compact form puts the source closer to\n\ +the line numbers and uses less horizontal space."), + tui_set_compact_source, tui_show_compact_source, + &tui_setlist, &tui_showlist); } diff --git a/gdb/tui/tui-win.h b/gdb/tui/tui-win.h index 81b7dac..1ffe683 100644 --- a/gdb/tui/tui-win.h +++ b/gdb/tui/tui-win.h @@ -54,4 +54,7 @@ extern void tui_update_gdb_sizes (void); /* Create or get the TUI command list. */ struct cmd_list_element **tui_get_cmd_list (void); +/* Whether compact source display should be used. */ +extern bool compact_source; + #endif /* TUI_TUI_WIN_H */ diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 3ca723c..81937c1 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -69,7 +69,7 @@ tui_display_main () std::string tui_copy_source_line (const char **ptr, int line_no, int first_col, - int line_width) + int line_width, int ndigits) { const char *lineptr = *ptr; @@ -78,10 +78,15 @@ tui_copy_source_line (const char **ptr, int line_no, int first_col, if (line_no > 0) { - result = string_printf ("%-6d", line_no); - int len = result.size (); - len = len - ((len / tui_tab_width) * tui_tab_width); - result.append (len, ' '); + if (ndigits > 0) + result = string_printf ("%*d ", ndigits, line_no); + else + { + result = string_printf ("%-6d", line_no); + int len = result.size (); + len = len - ((len / tui_tab_width) * tui_tab_width); + result.append (len, ' '); + } } int column = 0; diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h index 7c3c626..8b96200 100644 --- a/gdb/tui/tui-winsource.h +++ b/gdb/tui/tui-winsource.h @@ -238,12 +238,16 @@ extern void tui_update_source_windows_with_line (struct symtab *, /* Extract some source text from PTR. LINE_NO is the line number. If it is positive, it is printed at the start of the line. FIRST_COL is the first column to extract, and LINE_WIDTH is the number of - characters to display. Returns a string holding the desired text. - PTR is updated to point to the start of the next line. */ + characters to display. NDIGITS is used to format the line number + (if it is positive). If NDIGITS is greater than 0, then that many + digits are used; otherwise the line number is formatted with 6 + digits and the text is aligned to the next tab stop. Returns a + string holding the desired text. PTR is updated to point to the + start of the next line. */ extern std::string tui_copy_source_line (const char **ptr, int line_no, int first_col, - int line_width); + int line_width, int ndigits); /* Constant definitions. */ #define SCROLL_THRESHOLD 2 /* Threshold for lazy scroll. */ |