* please see the file GPL in the top level source directory.
*/
-#include <lib-lib/lib-lib.h>
-
-#include "curses.h"
-
+#include <lib-ui/lib-ui.h>
#include "pattern.h"
#include "mutt.h"
+#include "madtty.h"
/* globals */
int *ColorQuote;
struct color_list *next;
} COLOR_LIST;
-static COLOR_LIST *ColorList = NULL;
-static int UserColors = 0;
-
static struct mapping_t Colors[] = {
{"black", COLOR_BLACK},
{"blue", COLOR_BLUE},
{"red", COLOR_RED},
{"white", COLOR_WHITE},
{"yellow", COLOR_YELLOW},
-#if defined (HAVE_USE_DEFAULT_COLORS)
{"default", COLOR_DEFAULT},
-#endif
{0, 0}
};
return (p);
}
-static void mutt_free_color_line (COLOR_LINE ** l, int free_colors)
+static void mutt_free_color_line(COLOR_LINE ** l)
{
COLOR_LINE *tmp;
if (!l || !*l)
return;
-
tmp = *l;
- if (free_colors && tmp->fg != -1 && tmp->bg != -1)
- mutt_free_color (tmp->fg, tmp->bg);
-
/* we should really use the container type for regular expressions. */
-
regfree (&tmp->rx);
pattern_list_wipe(&tmp->color_pattern);
p_delete(&tmp->pattern);
/* special meaning: toggle the relevant attribute */
ColorDefs[MT_COLOR_BOLD] = 0;
ColorDefs[MT_COLOR_UNDERLINE] = 0;
-
- start_color ();
-}
-
-int mutt_alloc_color (int fg, int bg)
-{
- COLOR_LIST *p = ColorList;
- int i;
-
- /* check to see if this color is already allocated to save space */
- while (p) {
- if (p->fg == fg && p->bg == bg) {
- (p->count)++;
- return (COLOR_PAIR (p->index));
- }
- p = p->next;
- }
-
- /* check to see if there are colors left */
- if (++UserColors > COLOR_PAIRS)
- return (A_NORMAL);
-
- /* find the smallest available index (object) */
- i = 1;
- for (;;) {
- p = ColorList;
- while (p) {
- if (p->index == i)
- break;
- p = p->next;
- }
- if (p == NULL)
- break;
- i++;
- }
-
- p = p_new(COLOR_LIST, 1);
- p->next = ColorList;
- ColorList = p;
-
- p->index = i;
- p->count = 1;
- p->bg = bg;
- p->fg = fg;
-
-#if defined (HAVE_USE_DEFAULT_COLORS)
- if (fg == COLOR_DEFAULT)
- fg = -1;
- if (bg == COLOR_DEFAULT)
- bg = -1;
-#endif
-
- init_pair (i, fg, bg);
-
- return (COLOR_PAIR (p->index));
-}
-
-void mutt_free_color (int fg, int bg)
-{
- COLOR_LIST *p, *q;
-
- p = ColorList;
- while (p) {
- if (p->fg == fg && p->bg == bg) {
- (p->count)--;
- if (p->count > 0)
- return;
-
- UserColors--;
-
- if (p == ColorList) {
- ColorList = ColorList->next;
- p_delete(&p);
- return;
- }
- q = ColorList;
- while (q) {
- if (q->next == p) {
- q->next = p->next;
- p_delete(&p);
- return;
- }
- q = q->next;
- }
- /* can't get here */
- }
- p = p->next;
- }
}
static int
do_cache = 1;
last = tmp;
tmp = tmp->next;
- mutt_free_color_line (&last, parse_uncolor);
+ mutt_free_color_line(&last);
}
ColorIndexList = NULL;
}
last->next = tmp->next;
else
ColorIndexList = tmp->next;
- mutt_free_color_line (&tmp, parse_uncolor);
+ mutt_free_color_line(&tmp);
break;
}
}
if (tmp) {
if (fg != -1 && bg != -1) {
if (tmp->fg != fg || tmp->bg != bg) {
- mutt_free_color (tmp->fg, tmp->bg);
tmp->fg = fg;
tmp->bg = bg;
- attr |= mutt_alloc_color (fg, bg);
- }
- else
+ attr |= madtty_color_pair(fg, bg);
+ } else {
attr |= (tmp->pair & ~A_BOLD);
+ }
}
tmp->pair = attr;
} else {
mutt_check_simple (buf, sizeof (buf), NONULL (SimpleSearch));
if ((tmp->color_pattern =
mutt_pattern_comp (buf, M_FULL_MSG, err)) == NULL) {
- mutt_free_color_line (&tmp, 1);
+ mutt_free_color_line(&tmp);
return -1;
}
/* force re-caching of index colors */
REGCOMP (&tmp->rx, s,
(sensitive ? mutt_which_case (s) : REG_ICASE))) != 0) {
regerror (r, &tmp->rx, err->data, err->dsize);
- mutt_free_color_line (&tmp, 1);
+ mutt_free_color_line(&tmp);
return (-1);
}
tmp->next = *top;
if (fg != -1 && bg != -1) {
tmp->fg = fg;
tmp->bg = bg;
- attr |= mutt_alloc_color (fg, bg);
+ attr |= madtty_color_pair(fg, bg);
}
tmp->pair = attr;
*top = tmp;
static int fgbgattr_to_color (int fg, int bg, int attr)
{
if (fg != -1 && bg != -1)
- return attr | mutt_alloc_color (fg, bg);
+ return attr | madtty_color_pair(fg, bg);
else
return attr;
}
return 0;
-#ifdef HAVE_USE_DEFAULT_COLORS
if (!option (OPTNOCURSES) && has_colors ()
/* delay use_default_colors() until needed, since it initializes things */
&& (fg == COLOR_DEFAULT || bg == COLOR_DEFAULT)
m_strcpy(err->data, err->dsize, _("default colors not supported"));
return (-1);
}
-#endif /* HAVE_USE_DEFAULT_COLORS */
if (object == MT_COLOR_HEADER)
r = add_pattern (&ColorHdrList, buf->data, 0, fg, bg, attr, err, 0);
else
ColorDefs[object] = fgbgattr_to_color (fg, bg, attr);
-#ifdef HAVE_BKGDSET
if (object == MT_COLOR_NORMAL && !option (OPTNOCURSES) && has_colors ())
- BKGDSET (MT_COLOR_NORMAL);
-#endif
+ BKGDSET(main_w, MT_COLOR_NORMAL);
return (r);
}