2 This is the indexcolor patch by Christian Aichinger <Greek0@gmx.net>.
4 This patch enables different colorings for different parts of the index
5 display. For example you can choose one color for the subject, another one for
6 the author, and a third one for the flags.
8 * Patch last synced with upstream:
10 - File: http://greek0.net/mutt.html
11 http://greek0.net/patches/mutt-1.5.12-indexcolor-3+cb.diff
15 - Remove trailing whitespace.
19 ===================================================================
20 --- mutt.orig/color.c 2007-02-15 21:26:09.140472816 +0100
21 +++ mutt/color.c 2007-02-15 21:26:47.860586464 +0100
22 @@ -35,6 +35,8 @@ int ColorDefs[MT_COLOR_MAX];
23 COLOR_LINE *ColorHdrList = NULL;
24 COLOR_LINE *ColorBodyList = NULL;
25 COLOR_LINE *ColorIndexList = NULL;
26 +COLOR_LINE *ColorIndexSubjectList = NULL;
27 +COLOR_LINE *ColorIndexAuthorList = NULL;
29 /* local to this file */
30 static int ColorQuoteSize;
31 @@ -93,6 +95,14 @@ static struct mapping_t Fields[] =
32 { "bold", MT_COLOR_BOLD },
33 { "underline", MT_COLOR_UNDERLINE },
34 { "index", MT_COLOR_INDEX },
35 + { "index_subject", MT_COLOR_INDEX_SUBJECT },
36 + { "index_author", MT_COLOR_INDEX_AUTHOR },
37 + { "index_collapsed", MT_COLOR_INDEX_COLLAPSED },
38 + { "index_date", MT_COLOR_INDEX_DATE },
39 + { "index_flags", MT_COLOR_INDEX_FLAGS },
40 + { "index_label", MT_COLOR_INDEX_LABEL },
41 + { "index_number", MT_COLOR_INDEX_NUMBER },
42 + { "index_size", MT_COLOR_INDEX_SIZE },
46 @@ -364,12 +374,55 @@ int mutt_parse_unmono (BUFFER *buf, BUFF
47 return _mutt_parse_uncolor(buf, s, data, err, 0);
51 +mutt_do_uncolor (BUFFER *buf, BUFFER *s, COLOR_LINE **ColorList,
52 + int *do_cache, int parse_uncolor)
54 + COLOR_LINE *tmp, *last = NULL;
58 + mutt_extract_token (buf, s, 0);
59 + if (!mutt_strcmp ("*", buf->data))
61 + for (tmp = *ColorList; tmp; )
67 + mutt_free_color_line(&last, parse_uncolor);
73 + for (last = NULL, tmp = *ColorList; tmp; last = tmp, tmp = tmp->next)
75 + if (!mutt_strcmp (buf->data, tmp->pattern))
79 + dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorList\n",
82 + last->next = tmp->next;
84 + *ColorList = tmp->next;
85 + mutt_free_color_line(&tmp, parse_uncolor);
91 + while (MoreArgs (s));
95 _mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err,
98 int object = 0, do_cache = 0;
99 - COLOR_LINE *tmp, *last = NULL;
101 mutt_extract_token (buf, s, 0);
103 @@ -379,6 +432,13 @@ _mutt_parse_uncolor (BUFFER *buf, BUFFER
107 + if (object > MT_COLOR_INDEX_AUTHOR) /* uncolor index column */
109 + ColorDefs[object] = 0;
110 + set_option (OPTFORCEREDRAWINDEX);
114 if (mutt_strncmp (buf->data, "index", 5) != 0)
116 snprintf (err->data, err->dsize,
117 @@ -416,44 +476,12 @@ _mutt_parse_uncolor (BUFFER *buf, BUFFER
124 - mutt_extract_token (buf, s, 0);
125 - if (!mutt_strcmp ("*", buf->data))
127 - for (tmp = ColorIndexList; tmp; )
133 - mutt_free_color_line(&last, parse_uncolor);
135 - ColorIndexList = NULL;
139 - for (last = NULL, tmp = ColorIndexList; tmp; last = tmp, tmp = tmp->next)
141 - if (!mutt_strcmp (buf->data, tmp->pattern))
145 - dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorIndexList\n",
148 - last->next = tmp->next;
150 - ColorIndexList = tmp->next;
151 - mutt_free_color_line(&tmp, parse_uncolor);
157 - while (MoreArgs (s));
159 + if (object == MT_COLOR_INDEX)
160 + mutt_do_uncolor(buf, s, &ColorIndexList, &do_cache, parse_uncolor);
161 + if (object == MT_COLOR_INDEX_SUBJECT)
162 + mutt_do_uncolor(buf, s, &ColorIndexSubjectList, &do_cache, parse_uncolor);
163 + if (object == MT_COLOR_INDEX_AUTHOR)
164 + mutt_do_uncolor(buf, s, &ColorIndexAuthorList, &do_cache, parse_uncolor);
166 if (do_cache && !option (OPTNOCURSES))
168 @@ -693,7 +721,7 @@ _mutt_parse_color (BUFFER *buf, BUFFER *
170 /* extract a regular expression if needed */
172 - if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX)
173 + if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX || object == MT_COLOR_INDEX_SUBJECT || object == MT_COLOR_INDEX_AUTHOR)
177 @@ -737,6 +765,18 @@ _mutt_parse_color (BUFFER *buf, BUFFER *
178 r = add_pattern (&ColorIndexList, buf->data, 1, fg, bg, attr, err, 1);
179 set_option (OPTFORCEREDRAWINDEX);
181 + else if (object == MT_COLOR_INDEX_SUBJECT)
183 + r = add_pattern (&ColorIndexSubjectList, buf->data,
184 + 1, fg, bg, attr, err, 1);
185 + set_option (OPTFORCEREDRAWINDEX);
187 + else if (object == MT_COLOR_INDEX_AUTHOR)
189 + r = add_pattern (&ColorIndexAuthorList, buf->data,
190 + 1, fg, bg, attr, err, 1);
191 + set_option (OPTFORCEREDRAWINDEX);
193 else if (object == MT_COLOR_QUOTED)
195 if (q_level >= ColorQuoteSize)
196 @@ -762,7 +802,11 @@ _mutt_parse_color (BUFFER *buf, BUFFER *
197 ColorQuote[q_level] = fgbgattr_to_color(fg, bg, attr);
201 ColorDefs[object] = fgbgattr_to_color(fg, bg, attr);
202 + if (object > MT_COLOR_INDEX_AUTHOR)
203 + set_option (OPTFORCEREDRAWINDEX);
208 Index: mutt/curs_lib.c
209 ===================================================================
210 --- mutt.orig/curs_lib.c 2007-02-15 21:26:09.183466280 +0100
211 +++ mutt/curs_lib.c 2007-02-15 21:26:15.898445448 +0100
212 @@ -648,6 +648,7 @@ void mutt_format_string (char *dest, siz
214 char scratch[MB_LEN_MAX];
215 mbstate_t mbstate1, mbstate2;
218 memset(&mbstate1, 0, sizeof (mbstate1));
219 memset(&mbstate2, 0, sizeof (mbstate2));
220 @@ -663,7 +664,15 @@ void mutt_format_string (char *dest, siz
221 k = (k == (size_t)(-1)) ? 1 : n;
222 wc = replacement_char ();
224 - if (arboreal && wc < M_TREE_MAX)
229 + else if (arboreal && wc == M_SPECIAL_INDEX) {
233 + else if (arboreal && wc < M_TREE_MAX)
237 Index: mutt/hdrline.c
238 ===================================================================
239 --- mutt.orig/hdrline.c 2007-02-15 21:26:09.226459744 +0100
240 +++ mutt/hdrline.c 2007-02-15 21:26:15.899445296 +0100
241 @@ -99,6 +99,34 @@ static int first_mailing_list (char *buf
245 +/* Takes the color to embed, the buffer to manipulate and the buffer length as
247 + * Returns the number of chars written. */
248 +static size_t add_index_color(char *buf, size_t buflen,
249 + format_flag flags, char color)
253 + /* only add color markers if we are operating on main index entries. */
254 + if (!(flags & M_FORMAT_INDEX))
257 + if (color == MT_COLOR_INDEX) { /* buf might be uninitialized other cases */
258 + len = mutt_strlen(buf);
266 + buf[0] = M_SPECIAL_INDEX;
273 static void make_from (ENVELOPE *hdr, char *buf, size_t len, int do_lists)
276 @@ -251,6 +279,7 @@ hdr_format_str (char *dest,
277 #define THREAD_NEW (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 1)
278 #define THREAD_OLD (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 2)
284 @@ -302,12 +331,17 @@ hdr_format_str (char *dest,
288 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SIZE);
289 mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length);
290 - mutt_format_s (dest, destlen, prefix, buf2);
291 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2);
292 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
296 - snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
297 + colorlen = add_index_color(fmt, sizeof(fmt), flags, MT_COLOR_INDEX_NUMBER);
298 + snprintf (fmt+colorlen, sizeof(fmt)-colorlen, "%%%sd", prefix);
299 + add_index_color(fmt+colorlen, sizeof(fmt)-colorlen, flags, MT_COLOR_INDEX);
301 snprintf (dest, destlen, fmt, hdr->msgno + 1);
304 @@ -406,7 +440,10 @@ hdr_format_str (char *dest,
306 setlocale (LC_TIME, "C");
308 - mutt_format_s (dest, destlen, prefix, buf2);
309 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_DATE);
310 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2);
311 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
313 if (len > 0 && op != 'd' && op != 'D') /* Skip ending op */
316 @@ -436,8 +473,10 @@ hdr_format_str (char *dest,
320 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_AUTHOR);
321 make_from (hdr->env, buf2, sizeof (buf2), 0);
322 - mutt_format_s (dest, destlen, prefix, buf2);
323 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2);
324 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
326 else if (mutt_addr_is_user (hdr->env->from))
328 @@ -463,7 +502,9 @@ hdr_format_str (char *dest,
331 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
332 - snprintf (dest, destlen, fmt, (int) hdr->lines);
333 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SIZE);
334 + snprintf (dest+colorlen, destlen-colorlen, fmt, (int) hdr->lines);
335 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
337 else if (hdr->lines <= 0)
339 @@ -472,8 +513,10 @@ hdr_format_str (char *dest,
343 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_AUTHOR);
344 make_from (hdr->env, buf2, sizeof (buf2), 1);
345 - mutt_format_s (dest, destlen, prefix, buf2);
346 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2);
347 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
349 else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) &&
350 !check_for_mailing_list (hdr->env->cc, NULL, NULL, 0))
351 @@ -528,10 +571,16 @@ hdr_format_str (char *dest,
352 snprintf (fmt, sizeof (fmt), "%%%sd", prefix);
355 - if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1)
356 - snprintf (dest, destlen, fmt, hdr->num_hidden);
357 - else if (is_index && threads)
358 - mutt_format_s (dest, destlen, prefix, " ");
359 + colorlen = add_index_color(dest, destlen, flags,
360 + MT_COLOR_INDEX_COLLAPSED);
361 + if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1) {
362 + snprintf (dest+colorlen, destlen-colorlen, fmt, hdr->num_hidden);
363 + add_index_color(dest, destlen-colorlen, flags, MT_COLOR_INDEX);
365 + else if (is_index && threads) {
366 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, " ");
367 + add_index_color(dest, destlen-colorlen, flags, MT_COLOR_INDEX);
372 @@ -548,15 +597,23 @@ hdr_format_str (char *dest,
374 if (flags & M_FORMAT_FORCESUBJ)
376 - mutt_format_s (dest, destlen, "", NONULL (hdr->env->subject));
377 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SUBJECT);
378 + mutt_format_s (dest+colorlen, destlen-colorlen, "",
379 + NONULL (hdr->env->subject));
380 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
382 snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, dest);
383 mutt_format_s_tree (dest, destlen, prefix, buf2);
386 mutt_format_s_tree (dest, destlen, prefix, hdr->tree);
389 - mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->subject));
391 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SUBJECT);
392 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix,
393 + NONULL (hdr->env->subject));
394 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
399 @@ -652,7 +709,9 @@ hdr_format_str (char *dest,
401 (hdr->flagged ? '!' :
402 (Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' ')));
403 - mutt_format_s (dest, destlen, prefix, buf2);
404 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_FLAGS);
405 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2);
406 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
410 @@ -672,7 +731,9 @@ hdr_format_str (char *dest,
412 optional = hdr->env->x_label ? 1 : 0;
414 - mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
415 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_LABEL);
416 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, NONULL (hdr->env->x_label));
417 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
421 @@ -698,10 +759,12 @@ hdr_format_str (char *dest,
425 + colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_LABEL);
427 - mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label));
428 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, NONULL (hdr->env->x_label));
430 - mutt_format_s (dest, destlen, prefix, "");
431 + mutt_format_s (dest+colorlen, destlen-colorlen, prefix, "");
432 + add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX);
437 ===================================================================
438 --- mutt.orig/menu.c 2007-02-15 21:26:09.270453056 +0100
439 +++ mutt/menu.c 2007-02-15 21:26:15.900445144 +0100
440 @@ -36,7 +36,30 @@ extern int Charset_is_utf8; /* FIXME: ba
442 extern size_t UngetCount;
444 -static void print_enriched_string (int attr, unsigned char *s, int do_color)
445 +static int get_color(int index, int type) {
447 + HEADER *hdr = Context->hdrs[index];
450 + case MT_COLOR_INDEX_SUBJECT:
451 + color = ColorIndexSubjectList;
453 + case MT_COLOR_INDEX_AUTHOR:
454 + color = ColorIndexAuthorList;
457 + return ColorDefs[type];
460 + for (; color; color = color->next)
461 + if (mutt_pattern_exec (color->color_pattern, M_MATCH_FULL_ADDRESS,
463 + return color->pair;
468 +static void print_enriched_string (int index, int attr, unsigned char *s, int do_color)
472 @@ -133,6 +156,18 @@ static void print_enriched_string (int a
474 if (do_color) attrset(attr);
476 + else if(*s == M_SPECIAL_INDEX)
480 + if (*s == MT_COLOR_INDEX)
483 + attron(get_color(index, *s));
488 else if ((k = mbrtowc (&wc, (char *)s, n, &mbstate)) > 0)
490 addnstr ((char *)s, k);
491 @@ -235,7 +270,7 @@ void menu_redraw_index (MUTTMENU *menu)
495 - print_enriched_string (menu->color(i), (unsigned char *) buf, 1);
496 + print_enriched_string (i, menu->color(i), (unsigned char *) buf, 1);
497 SETCOLOR (MT_COLOR_NORMAL);
500 @@ -249,7 +284,7 @@ void menu_redraw_index (MUTTMENU *menu)
503 CLEARLINE (i - menu->top + menu->offset);
504 - print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current);
505 + print_enriched_string (i, menu->color(i), (unsigned char *) buf, i != menu->current);
506 SETCOLOR (MT_COLOR_NORMAL);
507 BKGDSET (MT_COLOR_NORMAL);
509 @@ -286,7 +321,7 @@ void menu_redraw_motion (MUTTMENU *menu)
510 menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
511 menu_pad_string (buf, sizeof (buf));
512 move (menu->oldcurrent + menu->offset - menu->top, 3);
513 - print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
514 + print_enriched_string (menu->oldcurrent, menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
515 SETCOLOR (MT_COLOR_NORMAL);
518 @@ -304,7 +339,7 @@ void menu_redraw_motion (MUTTMENU *menu)
520 menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
521 menu_pad_string (buf, sizeof (buf));
522 - print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
523 + print_enriched_string (menu->oldcurrent, menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
525 /* now draw the new one to reflect the change */
526 menu_make_entry (buf, sizeof (buf), menu, menu->current);
527 @@ -313,7 +348,7 @@ void menu_redraw_motion (MUTTMENU *menu)
528 ADDCOLOR (MT_COLOR_INDICATOR);
529 BKGDSET (MT_COLOR_INDICATOR);
530 CLEARLINE (menu->current - menu->top + menu->offset);
531 - print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
532 + print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 0);
533 SETCOLOR (MT_COLOR_NORMAL);
534 BKGDSET (MT_COLOR_NORMAL);
536 @@ -339,7 +374,7 @@ void menu_redraw_current (MUTTMENU *menu
539 menu_pad_string (buf, sizeof (buf));
540 - print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 1);
541 + print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 1);
542 SETCOLOR (MT_COLOR_NORMAL);
545 @@ -348,7 +383,7 @@ void menu_redraw_current (MUTTMENU *menu
546 ADDCOLOR (MT_COLOR_INDICATOR);
547 BKGDSET (MT_COLOR_INDICATOR);
549 - print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
550 + print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 0);
551 SETCOLOR (MT_COLOR_NORMAL);
552 BKGDSET (MT_COLOR_NORMAL);
554 Index: mutt/mutt_curses.h
555 ===================================================================
556 --- mutt.orig/mutt_curses.h 2007-02-15 21:26:09.314446368 +0100
557 +++ mutt/mutt_curses.h 2007-02-15 21:26:15.900445144 +0100
558 @@ -126,6 +126,16 @@ enum
562 + /* please no non-MT_COLOR_INDEX objects after this point */
563 + MT_COLOR_INDEX_SUBJECT,
564 + MT_COLOR_INDEX_AUTHOR,
565 + /* below only index coloring stuff that doesn't have a colorline! */
566 + MT_COLOR_INDEX_COLLAPSED,
567 + MT_COLOR_INDEX_DATE,
568 + MT_COLOR_INDEX_FLAGS,
569 + MT_COLOR_INDEX_LABEL,
570 + MT_COLOR_INDEX_NUMBER,
571 + MT_COLOR_INDEX_SIZE,
575 @@ -165,6 +175,8 @@ extern int ColorDefs[];
576 extern COLOR_LINE *ColorHdrList;
577 extern COLOR_LINE *ColorBodyList;
578 extern COLOR_LINE *ColorIndexList;
579 +extern COLOR_LINE *ColorIndexSubjectList;
580 +extern COLOR_LINE *ColorIndexAuthorList;
582 void ci_init_color (void);
583 void ci_start_color (void);
585 ===================================================================
586 --- mutt.orig/mutt.h 2007-02-15 21:26:09.358439680 +0100
587 +++ mutt/mutt.h 2007-02-15 21:26:15.901444992 +0100
588 @@ -176,6 +176,8 @@ typedef enum
589 #define M_TREE_MISSING 13
590 #define M_TREE_MAX 14
592 +#define M_SPECIAL_INDEX M_TREE_MAX
594 #define M_THREAD_COLLAPSE (1<<0)
595 #define M_THREAD_UNCOLLAPSE (1<<1)
596 #define M_THREAD_GET_HIDDEN (1<<2)
598 ===================================================================
599 --- mutt/PATCHES.orig 2007-02-15 21:26:15.901444992 +0100
600 +++ mutt/PATCHES 2007-02-15 21:26:15.901444992 +0100
602 +patch-1.5.13.greek0.indexcolor-3+cb
603 Index: mutt/doc/manual.xml.head
604 ===================================================================
605 --- mutt.orig/doc/manual.xml.head 2007-02-15 21:26:09.446426304 +0100
606 +++ mutt/doc/manual.xml.head 2007-02-15 21:26:15.903444688 +0100
607 @@ -1837,8 +1837,8 @@ silently truncated at the screen width,
610 Usage: <literal>color</literal> <emphasis>object</emphasis> <emphasis>foreground</emphasis> <emphasis>background</emphasis> [ <emphasis>regexp</emphasis> ]
611 -Usage: <literal>color</literal> index <emphasis>foreground</emphasis> <emphasis>background</emphasis> <emphasis>pattern</emphasis>
612 -Usage: <literal>uncolor</literal> index <emphasis>pattern</emphasis> [ <emphasis>pattern</emphasis> ... ]
613 +Usage: <literal>color</literal> <emphasis>index-object</emphasis> <emphasis>foreground</emphasis> <emphasis>background</emphasis> <emphasis>pattern</emphasis>
614 + Usage: <literal>uncolor</literal> <emphasis>index-object</emphasis> <emphasis>pattern</emphasis> [ <emphasis>pattern</emphasis> ... ]
618 @@ -1901,6 +1901,54 @@ index (match <emphasis>pattern</emphasis
622 +index_author (color of the author name in the index, uses <emphasis>pattern</emphasis>)
628 +index_collapsed (the number of messages in a collapsed thread in the index)
634 +index_date (color of the date field in the index)
640 +index_flags (color of the message flags in the index)
646 +index_label (color of the message label in the index)
652 +index_number (color of the message number in the index)
658 +index_size (color of the message size and line number in the index)
664 +index_subject (color of the subject in the index, uses <emphasis>pattern</emphasis>)
670 indicator (arrow or bar used to indicate the current item in a menu)