]> granicus.if.org Git - neomutt/commitdiff
Style Menu Options
authorryt <0x747972@gmail.com>
Fri, 22 Mar 2019 15:11:40 +0000 (15:11 +0000)
committerRichard Russon <rich@flatcap.org>
Fri, 29 Mar 2019 11:21:15 +0000 (11:21 +0000)
Closes: #1181
Co-authored-by: Mehdi Abaakouk <sileht@sileht.net>
Co-authored-by: Pietro Cerutti <gahr@gahr.ch>
color.c
curs_lib.c
doc/manual.xml.head
mutt_curses.h

diff --git a/color.c b/color.c
index 801485f6df6bea636a8d989ae8e9920543a41bcd..61d77c1c0181c6d9dd65131c6c398c6495aba552 100644 (file)
--- a/color.c
+++ b/color.c
@@ -135,6 +135,7 @@ static const struct Mapping Fields[] = {
   { "markers", MT_COLOR_MARKERS },
   { "message", MT_COLOR_MESSAGE },
   { "normal", MT_COLOR_NORMAL },
+  { "options", MT_COLOR_OPTIONS },
   { "progress", MT_COLOR_PROGRESS },
   { "prompt", MT_COLOR_PROMPT },
   { "quoted", MT_COLOR_QUOTED },
index 602a324ace4c010b702542ce4a2d0325c2534d16..fac1b8e4701958a982c0f0fcff07cdaeddf9da80 100644 (file)
@@ -795,7 +795,6 @@ int mutt_multi_choice(const char *prompt, const char *letters)
   int choice;
   bool redraw = true;
   int prompt_lines = 1;
-  char *p = NULL;
 
   while (true)
   {
@@ -821,9 +820,39 @@ int mutt_multi_choice(const char *prompt, const char *letters)
         mutt_menu_current_redraw();
       }
 
+      mutt_window_move(MuttMessageWindow, 0, 0);
+
+      if ((ColorDefs[MT_COLOR_OPTIONS] != 0) &&
+          (ColorDefs[MT_COLOR_OPTIONS] != ColorDefs[MT_COLOR_PROMPT]))
+      {
+        char *cur = NULL;
+
+        while ((cur = strchr(prompt, '(')))
+        {
+          // write the part between prompt and cur using MT_COLOR_PROMPT
+          SETCOLOR(MT_COLOR_PROMPT);
+          addnstr(prompt, cur - prompt);
+
+          if (isalnum(cur[1]) && cur[2] == ')')
+          {
+            // we have a single letter within parentheses
+            SETCOLOR(MT_COLOR_OPTIONS);
+            addch(cur[1]);
+            prompt = cur + 3;
+          }
+          else
+          {
+            // we have a parenthesis followed by something else
+            addch(cur[0]);
+            prompt = cur + 1;
+          }
+        }
+      }
+
       SETCOLOR(MT_COLOR_PROMPT);
-      mutt_window_mvaddstr(MuttMessageWindow, 0, 0, prompt);
+      addstr(prompt);
       NORMAL_COLOR;
+
       mutt_window_clrtoeol(MuttMessageWindow);
     }
 
@@ -842,7 +871,7 @@ int mutt_multi_choice(const char *prompt, const char *letters)
     }
     else
     {
-      p = strchr(letters, ch.ch);
+      char *p = strchr(letters, ch.ch);
       if (p)
       {
         choice = p - letters + 1;
index a4a3e9855fc11d567b5dfeb6fd13158a9472cc9e..486d0dc0a16aefc589509b7a70f1f4ba6ac30345 100644 (file)
@@ -4628,6 +4628,11 @@ folder-hook work "set sort=threads"
             normal
           </para>
         </listitem>
+        <listitem>
+          <para>
+            options (the key letters in multi-choice questions)
+          </para>
+        </listitem>
         <listitem>
           <para>
             <link linkend="progress">progress</link> (visual progress bar)
index 2650c1197920d861961970d1c259f3ac2fa385ad..5fa89010ae4c1c01d75a6b9fe7aad2575816f70a 100644 (file)
@@ -170,6 +170,7 @@ enum ColorId
   MT_COLOR_COMPOSE_SECURITY_SIGN,    ///< Mail will be signed
   MT_COLOR_COMPOSE_SECURITY_BOTH,    ///< Mail will be encrypted and signed
   MT_COLOR_COMPOSE_SECURITY_NONE,    ///< Mail will not be encrypted or signed
+  MT_COLOR_OPTIONS,                  ///< Options in prompt
   MT_COLOR_MAX,
 };