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
This commit is contained in:
Tom Tromey 2019-07-11 17:06:00 -06:00
parent 489dbda6a8
commit d1da6b0160
10 changed files with 102 additions and 11 deletions

@ -1,3 +1,18 @@
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.
2019-11-30 Tom Tromey <tom@tromey.com>
* dwarf2read.c (dwarf2_add_field): Include field offset when

@ -188,6 +188,14 @@ show print frame-info
'frame', 'stepi'. The python frame filtering also respect this setting.
The 'backtrace' '-frame-info' option can override this global setting.
set tui compact-source
show tui compact-source
Enable the "compact" display mode for the TUI source window. The
compact display uses only as much space as is needed for the line
numbers in the current file, and only a single space to separate the
line numbers from the source.
info modules [-q] [REGEXP]
Return a list of Fortran modules matching REGEXP, or all modules if
no REGEXP is given.

@ -1,3 +1,7 @@
2019-12-01 Tom Tromey <tom@tromey.com>
* gdb.texinfo (TUI Configuration): Document new setting.
2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.texinfo (Define): Indicate that user-defined prefix can

@ -28017,6 +28017,14 @@ Use extra bright or bold and standout mode.
Set the width of tab stops to be @var{nchars} characters. This
setting affects the display of TAB characters in the source and
assembly windows.
@item set tui compact-source @r{[}on@r{|}off@r{]}
@kindex set tui compact-source
Set whether the TUI source window is displayed in ``compact'' form.
The default display uses more space for line numbers and starts the
source text at the next tab stop; the compact display uses only as
much space as is needed for the line numbers in the current file, and
only a single space to separate the line numbers from the source.
@end table
@node Emacs

@ -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;

@ -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. */

@ -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);
}

@ -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 */

@ -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;
@ -77,12 +77,17 @@ tui_copy_source_line (const char **ptr, int line_no, int first_col,
std::string result;
if (line_no > 0)
{
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;
char c;

@ -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. */