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:
parent
489dbda6a8
commit
d1da6b0160
@ -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
|
||||
|
8
gdb/NEWS
8
gdb/NEWS
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user