public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrei Pikas <gdb@mail.api.win>
To: gdb-patches@sourceware.org
Cc: Andrei Pikas <gdb@mail.api.win>
Subject: [PATCH] Add style tui-reverse command to colorize TUI current line.
Date: Sat,  9 Jul 2022 22:05:45 +0300	[thread overview]
Message-ID: <20220709190545.3854520-1-gdb@mail.api.win> (raw)

Adds the ability to customize the colors of the current line of code in TUI.
This may be desirable when code highlighting is enabled. Because higlighted
keywords in dark blue color are indistinguishable from a black background
(which is the default inverse color for a white terminal).
Here is a screenshot of old and new behavior
https://drive.google.com/file/d/1doYNdKRlEjsROUaP8DbanV4bBiam7EQl/view
---
 gdb/NEWS            |  4 ++++
 gdb/cli/cli-style.c | 34 ++++++++++++++++++++++++++++++++++
 gdb/cli/cli-style.h |  3 +++
 gdb/doc/gdb.texinfo |  3 +++
 gdb/tui/tui-io.c    | 36 ++++++++++++++++++++++++++++++++----
 gdb/tui/tui-win.c   |  1 +
 6 files changed, 77 insertions(+), 4 deletions(-)

diff --git a/gdb/NEWS b/gdb/NEWS
index 1178a37017e..bf5b3436b49 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -41,6 +41,10 @@
 
 * New commands
 
+set style tui-reverse foreground COLOR
+set style tui-reverse background COLOR
+  Control the styling of the currently executing line of code.
+
 maintenance set ignore-prologue-end-flag on|off
 maintenance show ignore-prologue-end-flag
   This setting, which is off by default, controls whether GDB ignores the
diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
index 3fd85f4aa86..3dc9721548f 100644
--- a/gdb/cli/cli-style.c
+++ b/gdb/cli/cli-style.c
@@ -54,6 +54,28 @@ static const char * const cli_colors[] = {
   "magenta",
   "cyan",
   "white",
+  "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
+  "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
+  "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
+  "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
+  "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72",
+  "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85",
+  "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98",
+  "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109",
+  "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120",
+  "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131",
+  "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142",
+  "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153",
+  "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164",
+  "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175",
+  "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186",
+  "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197",
+  "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208",
+  "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219",
+  "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230",
+  "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241",
+  "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252",
+  "253", "254", "255",
   nullptr
 };
 
@@ -101,6 +123,10 @@ cli_style_option tui_active_border_style ("tui-active-border",
 
 /* See cli-style.h.  */
 
+cli_style_option tui_reverse_style ("tui-reverse", ui_file_style::NONE);
+
+/* See cli-style.h.  */
+
 cli_style_option metadata_style ("metadata", ui_file_style::DIM);
 
 /* See cli-style.h.  */
@@ -446,6 +472,14 @@ TUI window that does have the focus."),
 						&style_show_list,
 						true);
 
+  tui_reverse_style.add_setshow_commands (no_class, _("\
+TUI reverse mode display styling.\n\
+Configure TUI reverse mode colors\n\
+The \"tui-reverse\" style is used when GDB displays the current line of code."),
+						&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 f69df47098c..b147f76b766 100644
--- a/gdb/cli/cli-style.h
+++ b/gdb/cli/cli-style.h
@@ -122,6 +122,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 reverse mode for current line in TUI window.  */
+extern cli_style_option tui_reverse_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 7a4e337d15b..493acfd5c76 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -26642,6 +26642,9 @@ 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-reverse
+Control the styling of the currently executing line of code.
+
 @end table
 
 @node Numbers
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index 22c234a0dc2..8a470d4bbf4 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -35,6 +35,7 @@
 #include "tui/tui-out.h"
 #include "ui-out.h"
 #include "cli-out.h"
+#include "cli/cli-style.h"
 #include <fcntl.h>
 #include <signal.h>
 #ifdef __MINGW32__
@@ -351,6 +352,17 @@ tui_apply_style (WINDOW *w, ui_file_style style)
   last_style = style;
 }
 
+static bool
+get_custom_reverse_style (ui_file_style *style)
+{
+  ui_file_style reverse_style = tui_reverse_style.style();
+  if (reverse_style.is_default())
+    return false;
+
+  *style = reverse_style;
+  return true;
+}
+
 /* Apply an ANSI escape sequence from BUF to W.  BUF must start with
    the ESC character.  If BUF does not start with an ANSI escape,
    return 0.  Otherwise, apply the sequence if it is recognized, or
@@ -392,10 +404,12 @@ apply_ansi_escape (WINDOW *w, const char *buf)
 	  ui_file_style::color fg = style.get_foreground ();
 	  style.set_fg (bg);
 	  style.set_bg (fg);
-	}
 
-      /* Enable A_REVERSE.  */
-      style.set_reverse (true);
+          /* Enable A_REVERSE.  */
+          style.set_reverse (true);
+	}
+      else if (!get_custom_reverse_style (&style))
+        style.set_reverse (true);
     }
 
   tui_apply_style (w, style);
@@ -410,17 +424,19 @@ tui_set_reverse_mode (WINDOW *w, bool reverse)
   ui_file_style style = last_style;
 
   reverse_mode_p = reverse;
-  style.set_reverse (reverse);
 
   if (reverse)
     {
       reverse_save_bg = style.get_background ();
       reverse_save_fg = style.get_foreground ();
+      if (!get_custom_reverse_style (&style))
+        style.set_reverse (reverse);
     }
   else
     {
       style.set_bg (reverse_save_bg);
       style.set_fg (reverse_save_fg);
+      style.set_reverse (reverse);
     }
 
   tui_apply_style (w, style);
@@ -448,6 +464,9 @@ tui_puts (const char *string, WINDOW *w)
   if (w == nullptr)
     w = TUI_CMD_WIN->handle.get ();
 
+  attr_t w_attrs = 0;
+  short w_pair = 0;
+
   while (true)
     {
       const char *next = strpbrk (string, "\n\1\2\033\t");
@@ -472,6 +491,12 @@ tui_puts (const char *string, WINDOW *w)
 	  break;
 
 	case '\n':
+          if (wattr_get (w, &w_attrs, &w_pair, nullptr) == OK)
+            wchgat (w, -1, w_attrs, w_pair, nullptr);
+          do_tui_putc (w, c);
+          ++next;
+          break;
+
 	case '\t':
 	  do_tui_putc (w, c);
 	  ++next;
@@ -497,6 +522,9 @@ tui_puts (const char *string, WINDOW *w)
       string = next;
     }
 
+  if (wattr_get (w, &w_attrs, &w_pair, nullptr) == OK)
+    wchgat (w, -1, w_attrs, w_pair, nullptr);
+
   if (TUI_CMD_WIN != nullptr && w == TUI_CMD_WIN->handle.get ())
     update_cmdwin_start_line ();
 }
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 31b6606636a..ec098e202d2 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -1197,4 +1197,5 @@ the line numbers and uses less horizontal space."),
 
   tui_border_style.changed.attach (tui_rehighlight_all, "tui-win");
   tui_active_border_style.changed.attach (tui_rehighlight_all, "tui-win");
+  tui_reverse_style.changed.attach (tui_refresh_all_win, "tui-win");
 }
-- 
2.34.1


             reply	other threads:[~2022-07-09 19:06 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-09 19:05 Andrei Pikas [this message]
2022-07-09 19:10 ` Eli Zaretskii
2022-07-09 20:20   ` [PATCH] Add style tui-cursorline " Andrei Pikas
2022-07-10  5:03     ` Eli Zaretskii
2022-07-10 10:10       ` [PATCH v2 (mentions of reverse mode eliminated)] " Andrei Pikas
2022-07-10 10:19         ` Eli Zaretskii
2022-07-15 19:40         ` Tom Tromey
2022-07-15 22:06           ` Andrei Pikas
2022-07-18 14:16             ` Andrew Burgess
2022-07-18 15:32               ` Andrei Pikas
2022-07-18 18:12               ` Tom Tromey
2022-07-15 22:49           ` [PATCH v3] Add style tui-current-line " Andrei Pikas
2022-07-16  5:35             ` Eli Zaretskii
2022-07-18 14:30             ` Andrew Burgess
2022-07-18 19:11               ` [PATCH v4 (fix formatting and revert cli_colors to original state)] " Andrei Pikas
2022-07-18 19:14                 ` Eli Zaretskii
2022-07-18 19:16                   ` Andrei Pikas

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=20220709190545.3854520-1-gdb@mail.api.win \
    --to=gdb@mail.api.win \
    --cc=gdb-patches@sourceware.org \
    /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).