gdb/tui: add window width information to 'info win' output
authorAndrew Burgess <aburgess@redhat.com>
Mon, 24 Jan 2022 21:25:38 +0000 (21:25 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Sun, 6 Feb 2022 12:29:48 +0000 (12:29 +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.

gdb/NEWS
gdb/testsuite/gdb.tui/info-win.exp [new file with mode: 0644]
gdb/tui/tui-win.c

index e1900596ca74b9dfcbd428558af314b0ef0edcae..8da68c88defc3ca3384f0bb4db5c3892f6becc6e 100644 (file)
--- 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 (file)
index 0000000..2607d5b
--- /dev/null
@@ -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+"]
index c85dfd4e88264a18c0990ab651598d44c346e6c5..fd6ca59a728ac58e6b98581e22c93b94fc12c29d 100644 (file)
@@ -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