public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH] [gdb/tui] Add set style tui-status-window
Date: Mon, 22 May 2023 15:15:40 +0200	[thread overview]
Message-ID: <20230522131545.12291-3-tdevries@suse.de> (raw)
In-Reply-To: <20230522131545.12291-1-tdevries@suse.de>

Currently, the status window attributes are hardcoded to standout.

Add a new command "set style tui-status-window foreground/background/mode"
that controls the foreground and background colors, and the attributes for the
status window, where the attributes use the same <mode> options as used
for "set tui border-mode" and "set tui active-border-mode".

The default is none/none/standout, so there's no change in behaviour.

Tested on x86_64-linux.
---
 gdb/cli/cli-style.c             | 12 +++++++
 gdb/cli/cli-style.h             | 10 ++++++
 gdb/doc/gdb.texinfo             |  9 +++++
 gdb/testsuite/gdb.tui/basic.exp |  5 +++
 gdb/tui/tui-stack.c             | 16 +++++----
 gdb/tui/tui-win.c               | 58 +++++++++++++++++++++++++++++++++
 gdb/tui/tui-win.h               |  3 ++
 7 files changed, 106 insertions(+), 7 deletions(-)

diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
index cd510b440db..29aa2d92cd3 100644
--- a/gdb/cli/cli-style.c
+++ b/gdb/cli/cli-style.c
@@ -101,6 +101,10 @@ cli_style_option tui_active_border_style ("tui-active-border",
 
 /* See cli-style.h.  */
 
+cli_style_option tui_status_window_style ("tui-status-window", ui_file_style::NONE);
+
+/* See cli-style.h.  */
+
 cli_style_option metadata_style ("metadata", ui_file_style::DIM);
 
 /* See cli-style.h.  */
@@ -469,6 +473,14 @@ TUI window that does have the focus."),
 						&style_show_list,
 						true);
 
+  tui_status_window_style.add_setshow_commands (no_class, _("\
+TUI status window styling.\n\
+Configure TUI status window colors\n\
+The \"tui-status-window\" style is used when GDB displays the status window."),
+						&style_set_list,
+						&style_show_list,
+						true);
+
   version_style.add_setshow_commands (no_class, _("\
 Version string display styling.\n\
 Configure colors used to display the GDB version string."),
diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h
index f315241ccb4..b00c798caec 100644
--- a/gdb/cli/cli-style.h
+++ b/gdb/cli/cli-style.h
@@ -58,6 +58,13 @@ class cli_style_option
   /* Same as SET_LIST but for the show command list.  */
   struct cmd_list_element *show_list () { return m_show_list; };
 
+  /* Return the 'set style NAME' command list, that can be used
+     to add commands to.  */
+  struct cmd_list_element **modifiable_set_list () { return &m_set_list; };
+
+  /* Same as MODIFIABLE_SET_LIST but for the show command list.  */
+  struct cmd_list_element **modifiable_show_list () { return &m_show_list; };
+
   /* This style can be observed for any changes.  */
   gdb::observers::observable<> changed;
 
@@ -138,6 +145,9 @@ extern cli_style_option tui_border_style;
 /* The border style of a TUI window that does have the focus.  */
 extern cli_style_option tui_active_border_style;
 
+/* The style of a TUI status window.  */
+extern cli_style_option tui_status_window_style;
+
 /* The style to use for the GDB version string.  */
 extern cli_style_option version_style;
 
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index f23bcc5f3f8..c0e33c951b4 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -27300,6 +27300,13 @@ general styling to @value{GDBN}.  @xref{TUI Configuration}.
 Control the styling of the active TUI border; that is, the TUI window
 that has the focus.
 
+@item tui-status-window
+Control the styling of the TUI status window.  Note that, unlike other
+styling options, the tui-border has a mode rather than an intensity.
+The values for mode are the same as for @ref{set tui border-mode} and
+@ref{set tui active-border-mode}.  By default, this style's mode is
+standout, and the foreground and background colors are none.
+
 @item disassembler comment
 Control the styling of comments in the disassembler output.  These are
 managed with the @code{set style disassembler comment} family of
@@ -30273,8 +30280,10 @@ Use the Alternate Character Set to draw the border.  The border is
 drawn using character line graphics if the terminal supports them.
 @end table
 
+@anchor{set tui border-mode}
 @item set tui border-mode @var{mode}
 @kindex set tui border-mode
+@anchor{set tui active-border-mode}
 @itemx set tui active-border-mode @var{mode}
 @kindex set tui active-border-mode
 Select the display attributes for the borders of the inactive windows
diff --git a/gdb/testsuite/gdb.tui/basic.exp b/gdb/testsuite/gdb.tui/basic.exp
index 2c55c2b95bc..1bfcec21256 100644
--- a/gdb/testsuite/gdb.tui/basic.exp
+++ b/gdb/testsuite/gdb.tui/basic.exp
@@ -114,3 +114,8 @@ set status_window_line 15
 set status [Term::get_line_with_attrs $status_window_line]
 gdb_assert { [regexp "^<reverse:1>$re_noattr*<reverse:0>$" $status] == 1} \
     "status window: reverse"
+
+Term::command "set style tui-status-window mode normal"
+
+set status [Term::get_line_with_attrs $status_window_line]
+gdb_assert { [regexp "^$re_noattr*$" $status] == 1} "status window: normal"
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 76b8f066abb..46504b90f98 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -37,6 +37,9 @@
 #include "tui/tui-winsource.h"
 #include "tui/tui-file.h"
 #include "tui/tui-location.h"
+#include "tui/tui-win.h"
+#include "tui/tui-io.h"
+#include "cli/cli-style.h"
 
 #include "gdb_curses.h"
 
@@ -234,15 +237,14 @@ tui_locator_window::rerender ()
   std::string string = make_status_line ();
   scrollok (handle.get (), FALSE);
   wmove (handle.get (), 0, 0);
-  /* We ignore the return value from wstandout and wstandend, casting them
-     to void in order to avoid a compiler warning.  The warning itself was
-     introduced by a patch to ncurses 5.7 dated 2009-08-29, changing these
-     macro to expand to code that causes the compiler to generate an
-     unused-value warning.  */
-  (void) wstandout (handle.get ());
+
+  if (cli_styling)
+    tui_apply_style (handle.get (), tui_status_window_style.style ());
+  wattron (handle.get (), tui_status_window_attrs);
   waddstr (handle.get (), string.c_str ());
   wclrtoeol (handle.get ());
-  (void) wstandend (handle.get ());
+  wattroff (handle.get (), tui_status_window_attrs);
+  tui_apply_style (handle.get (), ui_file_style ());
   refresh_window ();
   wmove (handle.get (), 0, 0);
 }
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 6710b3e17e5..875149cd38b 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -346,6 +346,42 @@ tui_set_var_cmd (const char *null_args,
     tui_rehighlight_all ();
 }
 
+/* Value of "tui status-window-mode".  */
+
+static const char *tui_status_window_mode = "standout";
+
+/* See tui-win.h.  */
+
+int tui_status_window_attrs;
+
+/* Show value of "tui status-window-mode".  */
+
+static void
+show_tui_status_window_mode (struct ui_file *file,
+			     int from_tty,
+			     struct cmd_list_element *c,
+			     const char *value)
+{
+  gdb_printf (file, _("\
+The attribute mode to use for the TUI status window is \"%s\".\n"),
+	      value);
+}
+
+/* Set value of "tui status-window-mode".  */
+
+static void
+set_tui_status_window_mode (const char *null_args,
+			    int from_tty, struct cmd_list_element *c)
+{
+  struct tui_translate *entry
+    = translate (tui_status_window_mode, tui_border_mode_translate);
+  if (tui_status_window_attrs == entry->value)
+    return;
+
+  tui_status_window_attrs = entry->value;
+  if (tui_active)
+    tui_show_locator_content ();
+}
 \f
 
 /* True if TUI resizes should print a message.  This is used by the
@@ -1251,6 +1287,23 @@ This variable controls the attributes to use for the active window border:\n\
 			show_tui_active_border_mode,
 			&tui_setlist, &tui_showlist);
 
+  add_setshow_enum_cmd ("mode", no_class, tui_border_mode_enums,
+			&tui_status_window_mode, _("\
+Set the attribute mode to use for the TUI status window."), _("\
+Show the attribute mode to use for the TUI status window."), _("\
+This variable controls the attributes to use for the status window:\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"),
+			set_tui_status_window_mode,
+			show_tui_status_window_mode,
+			tui_status_window_style.modifiable_set_list (),
+			tui_status_window_style.modifiable_show_list ());
+
   add_setshow_zuinteger_cmd ("tab-width", no_class,
 			     &internal_tab_width, _("\
 Set the tab width, in characters, for the TUI."), _("\
@@ -1305,4 +1358,9 @@ When enabled, the left margin will use '_' and '0' instead of spaces."),
 
   tui_border_style.changed.attach (tui_rehighlight_all, "tui-win");
   tui_active_border_style.changed.attach (tui_rehighlight_all, "tui-win");
+  tui_status_window_style.changed.attach (tui_show_locator_content, "tui-win");
+
+  /* Assign default value.  */
+  tui_status_window_attrs
+    = translate (tui_status_window_mode, tui_border_mode_translate)->value;
 }
diff --git a/gdb/tui/tui-win.h b/gdb/tui/tui-win.h
index 3d35f1dfb7f..5ace83a742a 100644
--- a/gdb/tui/tui-win.h
+++ b/gdb/tui/tui-win.h
@@ -38,6 +38,9 @@ extern chtype tui_border_hline;
 extern int tui_border_attrs;
 extern int tui_active_border_attrs;
 
+/* Attributes for the contents of the status window.  */
+extern int tui_status_window_attrs;
+
 extern bool tui_update_variables ();
 
 extern void tui_initialize_win (void);

base-commit: 5a8f5960fd8fc5136fc24ddaf08a25c73f9c8329
-- 
2.35.3


  parent reply	other threads:[~2023-05-22 13:15 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-22 13:15 [PATCH 0/6] [gdb/tui] Introduce ansi-for-tui Tom de Vries
2023-05-22 13:15 ` [PATCH 1/6] [gdb/testsuite] Use TERM=dummy in gdb.tui/tuiterm.exp Tom de Vries
2023-05-22 13:15 ` Tom de Vries [this message]
2023-05-22 13:47   ` [PATCH] [gdb/tui] Add set style tui-status-window Eli Zaretskii
2023-05-22 14:22     ` Tom de Vries
2023-05-22 15:50       ` Eli Zaretskii
2023-05-22 13:15 ` [PATCH 2/6] [gdb/testsuite] Factor out Term::_wrap_cursor Tom de Vries
2023-05-22 13:15 ` [PATCH 3/6] [gdb/contrib] Add ansi-for-tui.sh Tom de Vries
2023-05-22 13:15 ` [PATCH 4/6] [gdb/testsuite] Make ansi-for-tui available in with_tuiterm Tom de Vries
2023-05-22 13:15 ` [PATCH 5/6] [gdb/testsuite] Implement the newline glitch in tuiterm Tom de Vries
2023-05-22 13:15 ` [PATCH 6/6] [gdb/testsuite] Use ansi-for-tui " Tom de Vries

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230522131545.12291-3-tdevries@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    --cc=tom@tromey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).