[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