]> granicus.if.org Git - nethack/commitdiff
Omit accel and select char from menu colors
authorTung Nguyen <tungtn3@gmail.com>
Thu, 17 Mar 2016 03:20:17 +0000 (14:20 +1100)
committerTung Nguyen <tungtn3@gmail.com>
Thu, 17 Mar 2016 08:46:07 +0000 (19:46 +1100)
e.g. When there's "a - whatever", color the "whatever" part and leave
the "a - " part unformatted.  This matches the behavior of menu colors
in NAO343.

win/tty/wintty.c

index 19947486958c03e7a94f04e7bcd3de00cf7eb4d5..9c33a11b133457f01cd2de6afdc356c8ba58f3c9 100644 (file)
@@ -1777,6 +1777,15 @@ struct WinDesc *cw;
                      page_lines++, curr = curr->next) {
                     int color = NO_COLOR, attr = ATR_NONE;
                     boolean menucolr = FALSE;
+                    int select_pos = -1; /* -/+/# position for selectables */
+                    int format_start_pos = 0; /* menu color/attr start pos */
+
+                    if (curr->identifier.a_void != 0) {
+                        /* "a - whatever" */
+                        select_pos = 2; /* '-' */
+                        format_start_pos = 4; /* start of "whatever" */
+                    }
+
                     if (curr->selector)
                         *rp++ = curr->selector;
 
@@ -1793,27 +1802,31 @@ struct WinDesc *cw;
                      * actually output the character.  We're faster doing
                      * this.
                      */
-                    if (iflags.use_menu_color
-                        && (menucolr = get_menu_coloring(curr->str, &color,
-                                                         &attr))) {
-                        term_start_attr(attr);
-#ifdef TEXTCOLOR
-                        if (color != NO_COLOR)
-                            term_start_color(color);
-#endif
-                    } else
-                        term_start_attr(curr->attr);
                     for (n = 0, cp = curr->str;
 #ifndef WIN32CON
                          *cp
                          && (int) ++ttyDisplay->curx < (int) ttyDisplay->cols;
-                         cp++, n++)
+                         cp++, n++
 #else
                          *cp
                          && (int) ttyDisplay->curx < (int) ttyDisplay->cols;
-                         cp++, n++, ttyDisplay->curx++)
+                         cp++, n++, ttyDisplay->curx++
+#endif
+                        ) {
+                        if (n == format_start_pos) {
+                            if (iflags.use_menu_color
+                                && (menucolr = get_menu_coloring(curr->str,
+                                                                 &color,
+                                                                 &attr))) {
+                                term_start_attr(attr);
+#ifdef TEXTCOLOR
+                                if (color != NO_COLOR)
+                                    term_start_color(color);
 #endif
-                        if (n == 2 && curr->identifier.a_void != 0
+                            } else
+                                term_start_attr(curr->attr);
+                        }
+                        if (n == select_pos && curr->identifier.a_void != 0
                             && curr->selected) {
                             if (curr->count == -1L)
                                 (void) putchar('+'); /* all selected */
@@ -1821,6 +1834,7 @@ struct WinDesc *cw;
                                 (void) putchar('#'); /* count selected */
                         } else
                             (void) putchar(*cp);
+                    }
                     if (iflags.use_menu_color && menucolr) {
 #ifdef TEXTCOLOR
                         if (color != NO_COLOR)