public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2] [gdb/tui] Show focus window in status line
@ 2023-12-08 16:50 Tom de Vries
  2023-12-08 18:06 ` Tom Tromey
  2023-12-08 19:25 ` Eli Zaretskii
  0 siblings, 2 replies; 3+ messages in thread
From: Tom de Vries @ 2023-12-08 16:50 UTC (permalink / raw)
  To: gdb-patches; +Cc: Eli Zaretskii

The focused window is highlighted by using active-border-kind instead of
border-kind.

But if the focused window is the cmd window (which is an unboxed window), then
no highlighting is done, and it's not obvious from looking at the screen which
window has the focus.  Instead, you have to notice the absence of highlighting
on boxed windows, and then infer that the focus is on the unboxed window.

That approach stops working if there are multiple unboxed windows.

Likewise if highlighting is switched off by setting active-border-kind to the
same value as border-kind.

Make it more explicit which window has the focus by mentioning it in the status
window, like so:
...
native process 8282 (src) In: main                      L7    PC: 0x400525
...

Tested on x86_64-linux and ppc64le-linux.

Tested-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
---
 gdb/doc/gdb.texinfo                  |  3 +++
 gdb/testsuite/gdb.tui/single-key.exp |  4 ++--
 gdb/tui/tui-data.c                   |  2 ++
 gdb/tui/tui-stack.c                  | 16 ++++++++++++++++
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index d2428efdb63..de70ee685e6 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -30293,6 +30293,9 @@ Indicates the current @value{GDBN} target.
 Gives the current process or thread number.
 When no process is being debugged, this field is set to @code{No process}.
 
+@item focus
+Shows the name of the TUI window that has the focus.
+
 @item function
 Gives the current function name for the selected frame.
 The name is demangled if demangling is turned on (@pxref{Print Settings}).
diff --git a/gdb/testsuite/gdb.tui/single-key.exp b/gdb/testsuite/gdb.tui/single-key.exp
index 07c9b00cce5..3925a8142c1 100644
--- a/gdb/testsuite/gdb.tui/single-key.exp
+++ b/gdb/testsuite/gdb.tui/single-key.exp
@@ -25,12 +25,12 @@ set status_win { 0 15 80 1 }
 set command_win { 0 16 80 8 }
 
 # Check that the status window doesn't show Singlekey.
-set re "No process In:"
+set re [string_to_regexp "No process (src) In:"]
 Term::check_region_contents  "status window: initial" {*}$status_win $re
 
 # Enter single-key mode.  Check that the status window does show Singlekey.
 send_gdb "\030s"
-set re "No process \\(SingleKey\\) In:"
+set re [string_to_regexp "No process (SingleKey) (src) In:"]
 gdb_assert { [Term::wait_for_region_contents {*}$status_win $re] } \
     "status window: single-key mode"
 
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index c51bd118165..f5a98233ea0 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -26,6 +26,7 @@
 #include "tui/tui-win.h"
 #include "tui/tui-wingeneral.h"
 #include "tui/tui-winsource.h"
+#include "tui/tui-stack.h"
 #include "gdb_curses.h"
 #include <algorithm>
 
@@ -69,6 +70,7 @@ tui_set_win_focus_to (struct tui_win_info *win_info)
       tui_unhighlight_win (win_with_focus);
       win_with_focus = win_info;
       tui_highlight_win (win_info);
+      tui_show_locator_content ();
     }
 }
 
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 723d6268aad..8bf65ea3556 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -106,6 +106,12 @@ tui_locator_window::make_status_line () const
   const char *pc_buf = pc_out.c_str ();
   int pc_width = pc_out.size ();
 
+  /* Width of the field showing the window with current focus.  For a window
+     named "src" we show "(src)".  */
+  int focus_width = (tui_win_with_focus () != nullptr
+		     ? 1 + strlen (tui_win_with_focus ()->name ()) + 1
+		     : 0);
+
   /* First determine the amount of proc name width we have available.
      The +1 are for a space separator between fields.  */
   proc_width = (status_size
@@ -116,6 +122,9 @@ tui_locator_window::make_status_line () const
 		- (PC_PREFIX.size () + pc_width + 1)
 		- (tui_current_key_mode == TUI_SINGLE_KEY_MODE
 		   ? (SINGLE_KEY.size () + 1)
+		   : 0)
+		- (focus_width > 0
+		   ? focus_width + 1
 		   : 0));
 
   /* If there is no room to print the function name, try by removing
@@ -159,6 +168,13 @@ tui_locator_window::make_status_line () const
       string.puts (" ");
     }
 
+  if (tui_win_with_focus () != nullptr)
+    {
+      string.puts ("(");
+      string.puts (tui_win_with_focus ()->name ());
+      string.puts (") ");
+    }
+
   /* Procedure/class name.  */
   if (proc_width > 0)
     {

base-commit: ee1e9bbb5139d766d70cfa036979cec73a1223b7
-- 
2.35.3


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] [gdb/tui] Show focus window in status line
  2023-12-08 16:50 [PATCH v2] [gdb/tui] Show focus window in status line Tom de Vries
@ 2023-12-08 18:06 ` Tom Tromey
  2023-12-08 19:25 ` Eli Zaretskii
  1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2023-12-08 18:06 UTC (permalink / raw)
  To: Tom de Vries; +Cc: gdb-patches, Eli Zaretskii

>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:

Tom> Make it more explicit which window has the focus by mentioning it in the status
Tom> window, like so:
Tom> ...
Tom> native process 8282 (src) In: main                      L7    PC: 0x400525
Tom> ...

Tom> Tested on x86_64-linux and ppc64le-linux.

Code parts are fine by me, thank you.
Approved-By: Tom Tromey <tom@tromey.com>

Just FYI, I will rebase my locator-renaming series over this.

Tom

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] [gdb/tui] Show focus window in status line
  2023-12-08 16:50 [PATCH v2] [gdb/tui] Show focus window in status line Tom de Vries
  2023-12-08 18:06 ` Tom Tromey
@ 2023-12-08 19:25 ` Eli Zaretskii
  1 sibling, 0 replies; 3+ messages in thread
From: Eli Zaretskii @ 2023-12-08 19:25 UTC (permalink / raw)
  To: Tom de Vries; +Cc: gdb-patches

> From: Tom de Vries <tdevries@suse.de>
> Cc: Eli Zaretskii <eliz@gnu.org>
> Date: Fri,  8 Dec 2023 17:50:25 +0100
> 
> The focused window is highlighted by using active-border-kind instead of
> border-kind.
> 
> But if the focused window is the cmd window (which is an unboxed window), then
> no highlighting is done, and it's not obvious from looking at the screen which
> window has the focus.  Instead, you have to notice the absence of highlighting
> on boxed windows, and then infer that the focus is on the unboxed window.
> 
> That approach stops working if there are multiple unboxed windows.
> 
> Likewise if highlighting is switched off by setting active-border-kind to the
> same value as border-kind.
> 
> Make it more explicit which window has the focus by mentioning it in the status
> window, like so:
> ...
> native process 8282 (src) In: main                      L7    PC: 0x400525
> ...
> 
> Tested on x86_64-linux and ppc64le-linux.
> 
> Tested-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
> ---
>  gdb/doc/gdb.texinfo                  |  3 +++
>  gdb/testsuite/gdb.tui/single-key.exp |  4 ++--
>  gdb/tui/tui-data.c                   |  2 ++
>  gdb/tui/tui-stack.c                  | 16 ++++++++++++++++
>  4 files changed, 23 insertions(+), 2 deletions(-)

The gdb.texinfo part is OK, thanks.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-12-08 19:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-08 16:50 [PATCH v2] [gdb/tui] Show focus window in status line Tom de Vries
2023-12-08 18:06 ` Tom Tromey
2023-12-08 19:25 ` Eli Zaretskii

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).