[PATCH 1/7] gdb/tui: add window width information to 'info win' output

Andrew Burgess aburgess@redhat.com
Sun Feb 6 13:43:12 GMT 2022


* Andrew Burgess <aburgess@redhat.com> [2022-01-28 15:55:02 +0000]:

> Now that we support horizontal window placement in the tui, it makes
> sense to have 'info win' include the width, as well as the height, of
> the currently visible windows.
> 
> That's what this commit does.  Example output is now:
> 
>   (gdb) info win
>   Name       Lines Columns Focus
>   src           12      40 (has focus)
>   asm           12      41
>   status         1      80
>   cmd           11      80
> 
> I've added a NEWS entry, but the documentation was already suitably
> vague, it just says that 'info win' displays the size of the visible
> windows, so I don't think anything needs to be added there.
> 
> I've also added some tests, as far as I could find, the 'info win'
> command was previously untested.

I've gone ahead and pushed this patch, I think this is the obvious
solution for adding this information to gdb.

If anyone disagrees, feel free to say.

Thanks,
Andrew



> ---
>  gdb/NEWS                           |  4 ++
>  gdb/testsuite/gdb.tui/info-win.exp | 61 ++++++++++++++++++++++++++++++
>  gdb/tui/tui-win.c                  |  4 +-
>  3 files changed, 68 insertions(+), 1 deletion(-)
>  create mode 100644 gdb/testsuite/gdb.tui/info-win.exp
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index e1900596ca7..8da68c88def 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -102,6 +102,10 @@ show debug lin-lwp
>    debug linux-nat' and 'show debug linux-nat' should be used
>    instead.
>  
> +info win
> +  This command now includes information about the width of the tui
> +  windows in its output.
> +
>  * Python API
>  
>    ** New function gdb.add_history(), which takes a gdb.Value object
> diff --git a/gdb/testsuite/gdb.tui/info-win.exp b/gdb/testsuite/gdb.tui/info-win.exp
> new file mode 100644
> index 00000000000..2607d5be493
> --- /dev/null
> +++ b/gdb/testsuite/gdb.tui/info-win.exp
> @@ -0,0 +1,61 @@
> +# Copyright 2022 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# Test 'info win'.
> +
> +tuiterm_env
> +
> +standard_testfile
> +
> +Term::clean_restart 24 80
> +
> +if {![Term::enter_tui]} {
> +    unsupported "TUI not supported"
> +    return
> +}
> +
> +Term::command "layout src"
> +Term::command "info win"
> +Term::check_region_contents "info win, layout src" \
> +    0 16 80 8 [multi_line "info win\\s+" \
> +		   "Name\\s+Lines\\s+Columns\\s+Focus\\s+" \
> +		   "src\\s+15\\s+80\\s+\\(has focus\\)\\s+" \
> +		   "status\\s+1\\s+80\\s+" \
> +		   "cmd\\s+8\\s+80\\s+"]
> +
> +Term::command "tui new-layout h { -horizontal src 1 asm 1 } 1 status 0 cmd 1"
> +Term::command "layout h"
> +Term::command "winheight cmd + 3"
> +
> +# As the tuiterm.exp library just waits for the prompt and command to
> +# be echo'ed bcak to the screen, multiple 'info win' calls like this
> +# have a problem.  Dejagnu will send the command to gdb, but will then
> +# immediately see the '(gdb) info win' output from the first use
> +# above.  This means we end up rushing ahead, and some tests might
> +# fail.
> +#
> +# To work around this, I'm sending a unique command 'p 1' here, that
> +# only happens after the second 'info win' call.  When the 'p 1'
> +# completes, I know the second 'info win' has also completed.
> +Term::command "info win"
> +Term::command "p 1"
> +
> +Term::check_region_contents "info win, layout h" \
> +    0 13 80 11 [multi_line "info win\\s+" \
> +		   "Name\\s+Lines\\s+Columns\\s+Focus\\s+" \
> +		   "src\\s+12\\s+40\\s+\\(has focus\\)\\s+" \
> +		   "asm\\s+12\\s+41\\s+" \
> +		   "status\\s+1\\s+80\\s+" \
> +		   "cmd\\s+11\\s+80\\s+"]
> diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
> index c85dfd4e882..fd6ca59a728 100644
> --- a/gdb/tui/tui-win.c
> +++ b/gdb/tui/tui-win.c
> @@ -714,9 +714,10 @@ tui_all_windows_info (const char *arg, int from_tty)
>    struct tui_win_info *win_with_focus = tui_win_with_focus ();
>    struct ui_out *uiout = current_uiout;
>  
> -  ui_out_emit_table table_emitter (uiout, 3, -1, "tui-windows");
> +  ui_out_emit_table table_emitter (uiout, 4, -1, "tui-windows");
>    uiout->table_header (10, ui_left, "name", "Name");
>    uiout->table_header (5, ui_right, "lines", "Lines");
> +  uiout->table_header (7, ui_right, "columns", "Columns");
>    uiout->table_header (10, ui_left, "focus", "Focus");
>    uiout->table_body ();
>  
> @@ -727,6 +728,7 @@ tui_all_windows_info (const char *arg, int from_tty)
>  
>  	uiout->field_string ("name", win_info->name ());
>  	uiout->field_signed ("lines", win_info->height);
> +	uiout->field_signed ("columns", win_info->width);
>  	if (win_with_focus == win_info)
>  	  uiout->field_string ("focus", _("(has focus)"));
>  	else
> -- 
> 2.25.4
> 



More information about the Gdb-patches mailing list