From 7806cea72329a354c36ed8b2177d03f9d5e2673f Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 2 Sep 2018 19:41:41 -0600 Subject: [PATCH] Deprecate and replace the "tabset" command The "tabset" command sets the tab width as used by the TUI for source and disassembly display. This command has long seemed to be misnamed to me. It is more in keeping with gdb design to call it "set tui tab-width". Also, making this change allows for the corresponding "show" command to work. gdb/ChangeLog 2018-10-19 Tom Tromey PR tui/18388: * NEWS: Mention tabset deprecation. * tui/tui-win.c (tui_tab_width, internal_tab_width): New globals. (update_tab_width): New function. (tui_set_tab_width, tui_show_tab_width): New functions. (tui_set_tab_width_command): Use update_tab_width. (_initialize_tui_win): Move to end of file. Deprecate "tabset". Add new "set tui tab-width" command. * tui/tui-source.c (tui_set_source_content): Update. * tui/tui-disasm.c (tui_set_disassem_content): Update. * tui/tui-data.h (tui_default_tab_len, tui_set_default_tab_len): Don't declare. (tui_tab_width): Declare. * tui/tui-data.c (default_tab_len, tui_default_tab_len) (tui_set_default_tab_len): Remove. gdb/doc/ChangeLog 2018-10-19 Tom Tromey PR tui/18388: * gdb.texinfo (TUI Commands): Remove tabset documentation. (TUI Configuration): Document "set tui tab-width". --- gdb/ChangeLog | 18 +++ gdb/NEWS | 4 + gdb/doc/ChangeLog | 6 + gdb/doc/gdb.texinfo | 15 ++- gdb/tui/tui-data.c | 17 --- gdb/tui/tui-data.h | 4 +- gdb/tui/tui-disasm.c | 2 +- gdb/tui/tui-source.c | 8 +- gdb/tui/tui-win.c | 313 +++++++++++++++++++++++++------------------ 9 files changed, 227 insertions(+), 160 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 57a0a95cf2..c703922b1d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2018-10-19 Tom Tromey + + PR tui/18388: + * NEWS: Mention tabset deprecation. + * tui/tui-win.c (tui_tab_width, internal_tab_width): New globals. + (update_tab_width): New function. + (tui_set_tab_width, tui_show_tab_width): New functions. + (tui_set_tab_width_command): Use update_tab_width. + (_initialize_tui_win): Move to end of file. Deprecate "tabset". + Add new "set tui tab-width" command. + * tui/tui-source.c (tui_set_source_content): Update. + * tui/tui-disasm.c (tui_set_disassem_content): Update. + * tui/tui-data.h (tui_default_tab_len, tui_set_default_tab_len): + Don't declare. + (tui_tab_width): Declare. + * tui/tui-data.c (default_tab_len, tui_default_tab_len) + (tui_set_default_tab_len): Remove. + 2018-10-19 Tom Tromey * tui/tui-io.h (key_is_start_sequence, key_is_end_sequence) diff --git a/gdb/NEWS b/gdb/NEWS index 126e61e282..1f311a42d8 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -79,6 +79,10 @@ thread apply [all | COUNT | -COUNT] [FLAG]... COMMAND FLAG arguments allow to control what output to produce and how to handle errors raised when applying COMMAND to a thread. +set tui tab-width NCHARS +show tui tab-width NCHARS + "set tui tab-width" replaces the "tabset" command, which has been deprecated. + * MI changes ** The '-data-disassemble' MI command now accepts an '-a' option to diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 0cab170456..4eee031ddb 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2018-10-19 Tom Tromey + + PR tui/18388: + * gdb.texinfo (TUI Commands): Remove tabset documentation. + (TUI Configuration): Document "set tui tab-width". + 2018-10-09 Tom Tromey * python.texi (Inferiors In Python): Link to "Frames In Python", diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index b0dc3bf67c..e985a7cc48 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -26780,13 +26780,6 @@ decrease it. The @var{name} parameter can be one of @code{src} (the source window), @code{cmd} (the command window), @code{asm} (the disassembly window), or @code{regs} (the register display window). -@item tabset @var{nchars} -@kindex tabset -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. -@end table - @node TUI Configuration @section TUI Configuration Variables @cindex TUI configuration variables @@ -26838,6 +26831,14 @@ Use extra bright or bold mode. @item bold-standout Use extra bright or bold and standout mode. @end table + +@item set tui tab-width @var{nchars} +@kindex set tui tab-width +@kindex tabset +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. +@end table @end table @node Emacs diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 66693afe96..4391f0d100 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -40,7 +40,6 @@ static struct tui_gen_win_info _locator; static struct tui_gen_win_info exec_info[2]; static struct tui_win_info *src_win_list[2]; static struct tui_list source_windows = {src_win_list, 0}; -static int default_tab_len = DEFAULT_TAB_LEN; static struct tui_win_info *win_with_focus = NULL; static struct tui_layout_def layout_def = { SRC_WIN, /* DISPLAY_MODE */ @@ -136,22 +135,6 @@ tui_set_win_with_focus (struct tui_win_info *win_info) } -/* Answer the length in chars, of tabs. */ -int -tui_default_tab_len (void) -{ - return default_tab_len; -} - - -/* Set the length in chars, of tabs. */ -void -tui_set_default_tab_len (int len) -{ - default_tab_len = len; -} - - /* Accessor for the current source window. Usually there is only one source window (either source or disassembly), but both can be displayed at the same time. */ diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 79a438d8e2..231534fd0d 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -331,8 +331,6 @@ extern void tui_clear_source_windows (void); extern void tui_clear_source_windows_detail (void); extern void tui_clear_win_detail (struct tui_win_info *); extern void tui_add_to_source_windows (struct tui_win_info *); -extern int tui_default_tab_len (void); -extern void tui_set_default_tab_len (int); extern struct tui_win_info *tui_win_with_focus (void); extern void tui_set_win_with_focus (struct tui_win_info *); extern struct tui_layout_def *tui_layout_def (void); @@ -344,4 +342,6 @@ extern struct tui_win_info *tui_prev_win (struct tui_win_info *); extern void tui_add_to_source_windows (struct tui_win_info *); +extern unsigned int tui_tab_width; + #endif /* TUI_DATA_H */ diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 1bbfd1e981..da461c11e9 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -171,7 +171,7 @@ tui_set_disassem_content (struct gdbarch *gdbarch, CORE_ADDR pc) int max_lines, line_width; CORE_ADDR cur_pc; struct tui_gen_win_info *locator = tui_locator_win_info_ptr (); - int tab_len = tui_default_tab_len (); + int tab_len = tui_tab_width; struct tui_asm_line *asm_lines; int insn_pos; int addr_size, insn_size; diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index de8b77ee85..a26b7b0cbf 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -131,9 +131,9 @@ tui_set_source_content (struct symtab *s, /* Init the line with the line number. */ sprintf (src_line, "%-6d", cur_line_no); cur_len = strlen (src_line); - i = cur_len - ((cur_len / tui_default_tab_len ()) - * tui_default_tab_len ()); - while (i < tui_default_tab_len ()) + i = cur_len - ((cur_len / tui_tab_width) + * tui_tab_width); + while (i < tui_tab_width) { src_line[cur_len] = ' '; i++; @@ -181,7 +181,7 @@ tui_set_source_content (struct symtab *s, if (c == '\t') { int j, max_tab_len - = tui_default_tab_len (); + = tui_tab_width; for (j = i - ((i / max_tab_len) * max_tab_len); diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index bcd0e54189..0234ed45b1 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -430,113 +430,6 @@ winheight_completer (struct cmd_list_element *ignore, window_name_completer (tracker, 0, text, word); } -/* Function to initialize gdb commands, for tui window - manipulation. */ - -void -_initialize_tui_win (void) -{ - static struct cmd_list_element *tui_setlist; - static struct cmd_list_element *tui_showlist; - struct cmd_list_element *cmd; - - /* Define the classes of commands. - They will appear in the help list in the reverse of this order. */ - add_prefix_cmd ("tui", class_tui, set_tui_cmd, - _("TUI configuration variables"), - &tui_setlist, "set tui ", - 0 /* allow-unknown */, &setlist); - add_prefix_cmd ("tui", class_tui, show_tui_cmd, - _("TUI configuration variables"), - &tui_showlist, "show tui ", - 0 /* allow-unknown */, &showlist); - - add_com ("refresh", class_tui, tui_refresh_all_command, - _("Refresh the terminal display.\n")); - add_com ("tabset", class_tui, tui_set_tab_width_command, _("\ -Set the width (in characters) of tab stops.\n\ -Usage: tabset N\n")); - cmd = add_com ("winheight", class_tui, tui_set_win_height_command, _("\ -Set or modify the height of a specified window.\n" -WIN_HEIGHT_USAGE -"Window names are:\n\ -src : the source window\n\ -cmd : the command window\n\ -asm : the disassembly window\n\ -regs : the register display\n")); - add_com_alias ("wh", "winheight", class_tui, 0); - set_cmd_completer (cmd, winheight_completer); - add_info ("win", tui_all_windows_info, - _("List of all displayed windows.\n")); - cmd = add_com ("focus", class_tui, tui_set_focus_command, _("\ -Set focus to named window or next/prev window.\n" -FOCUS_USAGE -"Valid Window names are:\n\ -src : the source window\n\ -asm : the disassembly window\n\ -regs : the register display\n\ -cmd : the command window\n")); - add_com_alias ("fs", "focus", class_tui, 0); - set_cmd_completer (cmd, focus_completer); - add_com ("+", class_tui, tui_scroll_forward_command, _("\ -Scroll window forward.\n\ -Usage: + [WIN] [N]\n")); - add_com ("-", class_tui, tui_scroll_backward_command, _("\ -Scroll window backward.\n\ -Usage: - [WIN] [N]\n")); - add_com ("<", class_tui, tui_scroll_left_command, _("\ -Scroll window text to the left.\n\ -Usage: < [WIN] [N]\n")); - add_com (">", class_tui, tui_scroll_right_command, _("\ -Scroll window text to the right.\n\ -Usage: > [WIN] [N]\n")); - - /* Define the tui control variables. */ - add_setshow_enum_cmd ("border-kind", no_class, tui_border_kind_enums, - &tui_border_kind, _("\ -Set the kind of border for TUI windows."), _("\ -Show the kind of border for TUI windows."), _("\ -This variable controls the border of TUI windows:\n\ -space use a white space\n\ -ascii use ascii characters + - | for the border\n\ -acs use the Alternate Character Set"), - tui_set_var_cmd, - show_tui_border_kind, - &tui_setlist, &tui_showlist); - - add_setshow_enum_cmd ("border-mode", no_class, tui_border_mode_enums, - &tui_border_mode, _("\ -Set the attribute mode to use for the TUI window borders."), _("\ -Show the attribute mode to use for the TUI window borders."), _("\ -This variable controls the attributes to use for the window borders:\n\ -normal normal display\n\ -standout use highlight mode of terminal\n\ -reverse use reverse video mode\n\ -half use half bright\n\ -half-standout use half bright and standout mode\n\ -bold use extra bright or bold\n\ -bold-standout use extra bright or bold with standout mode"), - tui_set_var_cmd, - show_tui_border_mode, - &tui_setlist, &tui_showlist); - - add_setshow_enum_cmd ("active-border-mode", no_class, tui_border_mode_enums, - &tui_active_border_mode, _("\ -Set the attribute mode to use for the active TUI window border."), _("\ -Show the attribute mode to use for the active TUI window border."), _("\ -This variable controls the attributes to use for the active window border:\n\ -normal normal display\n\ -standout use highlight mode of terminal\n\ -reverse use reverse video mode\n\ -half use half bright\n\ -half-standout use half bright and standout mode\n\ -bold use extra bright or bold\n\ -bold-standout use extra bright or bold with standout mode"), - tui_set_var_cmd, - show_tui_active_border_mode, - &tui_setlist, &tui_showlist); -} - /* Update gdb's knowledge of the terminal size. */ void tui_update_gdb_sizes (void) @@ -1113,6 +1006,65 @@ tui_refresh_all_command (const char *arg, int from_tty) tui_refresh_all_win (); } +/* The tab width that should be used by the TUI. */ + +unsigned int tui_tab_width = DEFAULT_TAB_LEN; + +/* The tab width as set by the user. */ + +static unsigned int internal_tab_width = DEFAULT_TAB_LEN; + +/* After the tab width is set, call this to update the relevant + windows. */ + +static void +update_tab_width () +{ + /* We don't really change the height of any windows, but + calling these 2 functions causes a complete regeneration + and redisplay of the window's contents, which will take + the new tab width into account. */ + if (tui_win_list[SRC_WIN] + && tui_win_list[SRC_WIN]->generic.is_visible) + { + make_invisible_and_set_new_height (TUI_SRC_WIN, + TUI_SRC_WIN->generic.height); + make_visible_with_new_height (TUI_SRC_WIN); + } + if (tui_win_list[DISASSEM_WIN] + && tui_win_list[DISASSEM_WIN]->generic.is_visible) + { + make_invisible_and_set_new_height (TUI_DISASM_WIN, + TUI_DISASM_WIN->generic.height); + make_visible_with_new_height (TUI_DISASM_WIN); + } +} + +/* Callback for "set tui tab-width". */ + +static void +tui_set_tab_width (const char *ignore, + int from_tty, struct cmd_list_element *c) +{ + if (internal_tab_width == 0) + { + internal_tab_width = tui_tab_width; + error (_("Tab width must not be 0")); + } + + tui_tab_width = internal_tab_width; + update_tab_width (); +} + +/* Callback for "show tui tab-width". */ + +static void +tui_show_tab_width (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (gdb_stdout, _("TUI tab width is %s spaces.\n"), value); + +} /* Set the tab width of the specified window. */ static void @@ -1125,30 +1077,15 @@ tui_set_tab_width_command (const char *arg, int from_tty) int ts; ts = atoi (arg); - if (ts > 0) + if (ts <= 0) + warning (_("Tab widths greater than 0 must be specified.")); + else { - tui_set_default_tab_len (ts); - /* We don't really change the height of any windows, but - calling these 2 functions causes a complete regeneration - and redisplay of the window's contents, which will take - the new tab width into account. */ - if (tui_win_list[SRC_WIN] - && tui_win_list[SRC_WIN]->generic.is_visible) - { - make_invisible_and_set_new_height (TUI_SRC_WIN, - TUI_SRC_WIN->generic.height); - make_visible_with_new_height (TUI_SRC_WIN); - } - if (tui_win_list[DISASSEM_WIN] - && tui_win_list[DISASSEM_WIN]->generic.is_visible) - { - make_invisible_and_set_new_height (TUI_DISASM_WIN, - TUI_DISASM_WIN->generic.height); - make_visible_with_new_height (TUI_DISASM_WIN); - } + internal_tab_width = ts; + tui_tab_width = ts; + + update_tab_width (); } - else - warning (_("Tab widths greater than 0 must be specified.")); } } @@ -1706,3 +1643,121 @@ The window name specified must be valid and visible.\n")); } } } + +/* Function to initialize gdb commands, for tui window + manipulation. */ + +void +_initialize_tui_win (void) +{ + static struct cmd_list_element *tui_setlist; + static struct cmd_list_element *tui_showlist; + struct cmd_list_element *cmd; + + /* Define the classes of commands. + They will appear in the help list in the reverse of this order. */ + add_prefix_cmd ("tui", class_tui, set_tui_cmd, + _("TUI configuration variables"), + &tui_setlist, "set tui ", + 0 /* allow-unknown */, &setlist); + add_prefix_cmd ("tui", class_tui, show_tui_cmd, + _("TUI configuration variables"), + &tui_showlist, "show tui ", + 0 /* allow-unknown */, &showlist); + + add_com ("refresh", class_tui, tui_refresh_all_command, + _("Refresh the terminal display.\n")); + + cmd = add_com ("tabset", class_tui, tui_set_tab_width_command, _("\ +Set the width (in characters) of tab stops.\n\ +Usage: tabset N\n")); + deprecate_cmd (cmd, "set tui tab-width"); + + cmd = add_com ("winheight", class_tui, tui_set_win_height_command, _("\ +Set or modify the height of a specified window.\n" +WIN_HEIGHT_USAGE +"Window names are:\n\ +src : the source window\n\ +cmd : the command window\n\ +asm : the disassembly window\n\ +regs : the register display\n")); + add_com_alias ("wh", "winheight", class_tui, 0); + set_cmd_completer (cmd, winheight_completer); + add_info ("win", tui_all_windows_info, + _("List of all displayed windows.\n")); + cmd = add_com ("focus", class_tui, tui_set_focus_command, _("\ +Set focus to named window or next/prev window.\n" +FOCUS_USAGE +"Valid Window names are:\n\ +src : the source window\n\ +asm : the disassembly window\n\ +regs : the register display\n\ +cmd : the command window\n")); + add_com_alias ("fs", "focus", class_tui, 0); + set_cmd_completer (cmd, focus_completer); + add_com ("+", class_tui, tui_scroll_forward_command, _("\ +Scroll window forward.\n\ +Usage: + [WIN] [N]\n")); + add_com ("-", class_tui, tui_scroll_backward_command, _("\ +Scroll window backward.\n\ +Usage: - [WIN] [N]\n")); + add_com ("<", class_tui, tui_scroll_left_command, _("\ +Scroll window text to the left.\n\ +Usage: < [WIN] [N]\n")); + add_com (">", class_tui, tui_scroll_right_command, _("\ +Scroll window text to the right.\n\ +Usage: > [WIN] [N]\n")); + + /* Define the tui control variables. */ + add_setshow_enum_cmd ("border-kind", no_class, tui_border_kind_enums, + &tui_border_kind, _("\ +Set the kind of border for TUI windows."), _("\ +Show the kind of border for TUI windows."), _("\ +This variable controls the border of TUI windows:\n\ +space use a white space\n\ +ascii use ascii characters + - | for the border\n\ +acs use the Alternate Character Set"), + tui_set_var_cmd, + show_tui_border_kind, + &tui_setlist, &tui_showlist); + + add_setshow_enum_cmd ("border-mode", no_class, tui_border_mode_enums, + &tui_border_mode, _("\ +Set the attribute mode to use for the TUI window borders."), _("\ +Show the attribute mode to use for the TUI window borders."), _("\ +This variable controls the attributes to use for the window borders:\n\ +normal normal display\n\ +standout use highlight mode of terminal\n\ +reverse use reverse video mode\n\ +half use half bright\n\ +half-standout use half bright and standout mode\n\ +bold use extra bright or bold\n\ +bold-standout use extra bright or bold with standout mode"), + tui_set_var_cmd, + show_tui_border_mode, + &tui_setlist, &tui_showlist); + + add_setshow_enum_cmd ("active-border-mode", no_class, tui_border_mode_enums, + &tui_active_border_mode, _("\ +Set the attribute mode to use for the active TUI window border."), _("\ +Show the attribute mode to use for the active TUI window border."), _("\ +This variable controls the attributes to use for the active window border:\n\ +normal normal display\n\ +standout use highlight mode of terminal\n\ +reverse use reverse video mode\n\ +half use half bright\n\ +half-standout use half bright and standout mode\n\ +bold use extra bright or bold\n\ +bold-standout use extra bright or bold with standout mode"), + tui_set_var_cmd, + show_tui_active_border_mode, + &tui_setlist, &tui_showlist); + + add_setshow_zuinteger_cmd ("tab-width", no_class, + &internal_tab_width, _("\ +Set the tab width, in characters, for the TUI."), _("\ +Show the tab witdh, in characters, for the TUI"), _("\ +This variable controls how many spaces are used to display a tab character."), + tui_set_tab_width, tui_show_tab_width, + &tui_setlist, &tui_showlist); +} -- 2.34.1