mirror of
https://github.com/irssi/irssi.git
synced 2024-11-03 04:27:19 -05:00
Highlight colors can now have background color set with fg,bg. Works
with activity list too, useful for example blinking. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1249 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
1117638b52
commit
c1c7674ae2
@ -10,6 +10,6 @@ char *name;
|
|||||||
|
|
||||||
time_t createtime;
|
time_t createtime;
|
||||||
int data_level;
|
int data_level;
|
||||||
int hilight_color;
|
int hilight_color, hilight_bg_color;
|
||||||
|
|
||||||
#undef STRUCT_SERVER_REC
|
#undef STRUCT_SERVER_REC
|
||||||
|
@ -42,7 +42,7 @@ typedef struct {
|
|||||||
int histlines;
|
int histlines;
|
||||||
|
|
||||||
int data_level; /* current data level */
|
int data_level; /* current data level */
|
||||||
int hilight_color; /* current hilight color */
|
int hilight_color, hilight_bg_color; /* current hilight color */
|
||||||
|
|
||||||
time_t last_timestamp; /* When was last timestamp printed */
|
time_t last_timestamp; /* When was last timestamp printed */
|
||||||
time_t last_line; /* When was last line printed */
|
time_t last_line; /* When was last line printed */
|
||||||
|
@ -213,6 +213,7 @@ void format_create_dest(TEXT_DEST_REC *dest,
|
|||||||
|
|
||||||
dest->hilight_priority = 0;
|
dest->hilight_priority = 0;
|
||||||
dest->hilight_color = 0;
|
dest->hilight_color = 0;
|
||||||
|
dest->hilight_bg_color = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *format_get_text_args(TEXT_DEST_REC *dest,
|
static char *format_get_text_args(TEXT_DEST_REC *dest,
|
||||||
|
@ -38,7 +38,7 @@ typedef struct {
|
|||||||
int level;
|
int level;
|
||||||
|
|
||||||
int hilight_priority;
|
int hilight_priority;
|
||||||
int hilight_color;
|
int hilight_color, hilight_bg_color;
|
||||||
} TEXT_DEST_REC;
|
} TEXT_DEST_REC;
|
||||||
|
|
||||||
int format_find_tag(const char *module, const char *tag);
|
int format_find_tag(const char *module, const char *tag);
|
||||||
|
@ -291,11 +291,32 @@ HILIGHT_REC *hilight_match(SERVER_REC *server, const char *channel,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_colors(const char *color, int *fg, int *bg)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
if (!is_numeric(color, ','))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
*fg = atoi(color);
|
||||||
|
*bg = -1;
|
||||||
|
|
||||||
|
p = strchr(color, ',');
|
||||||
|
if (p != NULL) {
|
||||||
|
p++;
|
||||||
|
if (!is_numeric(p, '\0'))
|
||||||
|
return FALSE;
|
||||||
|
*bg = atoi(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
char *hilight_get_color(HILIGHT_REC *rec, int activity)
|
char *hilight_get_color(HILIGHT_REC *rec, int activity)
|
||||||
{
|
{
|
||||||
const char *color;
|
const char *color;
|
||||||
char number[MAX_INT_STRLEN];
|
char number[MAX_INT_STRLEN];
|
||||||
int colornum;
|
int colornum, fg, bg;
|
||||||
|
|
||||||
g_return_val_if_fail(rec != NULL, NULL);
|
g_return_val_if_fail(rec != NULL, NULL);
|
||||||
|
|
||||||
@ -315,15 +336,16 @@ char *hilight_get_color(HILIGHT_REC *rec, int activity)
|
|||||||
color = number;
|
color = number;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_numeric(color, 0))
|
if (get_colors(color, &fg, &bg)) {
|
||||||
return g_strdup_printf("\003%02d", atoi(color));
|
return bg == -1 ? g_strdup_printf("\003%02d", fg) :
|
||||||
|
g_strdup_printf("\003%d,%02d", fg, bg);
|
||||||
|
}
|
||||||
return g_strdup(color);
|
return g_strdup(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
|
static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
|
||||||
{
|
{
|
||||||
char *color;
|
char *color, *bgcolor;
|
||||||
|
|
||||||
dest->level |= MSGLEVEL_HILIGHT;
|
dest->level |= MSGLEVEL_HILIGHT;
|
||||||
|
|
||||||
@ -331,8 +353,14 @@ static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
|
|||||||
dest->hilight_priority = rec->priority;
|
dest->hilight_priority = rec->priority;
|
||||||
|
|
||||||
color = hilight_get_color(rec, TRUE);
|
color = hilight_get_color(rec, TRUE);
|
||||||
if (*color == 3)
|
if (*color == 3) {
|
||||||
dest->hilight_color = atoi(color+1);
|
dest->hilight_color = atoi(color+1);
|
||||||
|
bgcolor = color+1;
|
||||||
|
while (*bgcolor != ',' && *bgcolor != '\0')
|
||||||
|
bgcolor++;
|
||||||
|
dest->hilight_bg_color = *bgcolor != ',' ? -1 :
|
||||||
|
atoi(bgcolor+1);
|
||||||
|
}
|
||||||
g_free(color);
|
g_free(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,8 @@
|
|||||||
static char **hide_targets;
|
static char **hide_targets;
|
||||||
static int hide_level, msg_level, hilight_level;
|
static int hide_level, msg_level, hilight_level;
|
||||||
|
|
||||||
static void window_activity(WINDOW_REC *window,
|
static void window_activity(WINDOW_REC *window, int data_level,
|
||||||
int data_level, int hilight_color)
|
int hilight_color, int hilight_bg_color)
|
||||||
{
|
{
|
||||||
int old_data_level;
|
int old_data_level;
|
||||||
|
|
||||||
@ -44,6 +44,7 @@ static void window_activity(WINDOW_REC *window,
|
|||||||
if (data_level == 0 || window->data_level < data_level) {
|
if (data_level == 0 || window->data_level < data_level) {
|
||||||
window->data_level = data_level;
|
window->data_level = data_level;
|
||||||
window->hilight_color = hilight_color;
|
window->hilight_color = hilight_color;
|
||||||
|
window->hilight_bg_color = hilight_bg_color;
|
||||||
signal_emit("window hilight", 1, window);
|
signal_emit("window hilight", 1, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,8 +52,8 @@ static void window_activity(WINDOW_REC *window,
|
|||||||
GINT_TO_POINTER(old_data_level));
|
GINT_TO_POINTER(old_data_level));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void window_item_activity(WI_ITEM_REC *item,
|
static void window_item_activity(WI_ITEM_REC *item, int data_level,
|
||||||
int data_level, int hilight_color)
|
int hilight_color, int hilight_bg_color)
|
||||||
{
|
{
|
||||||
int old_data_level;
|
int old_data_level;
|
||||||
|
|
||||||
@ -60,6 +61,7 @@ static void window_item_activity(WI_ITEM_REC *item,
|
|||||||
if (data_level == 0 || item->data_level < data_level) {
|
if (data_level == 0 || item->data_level < data_level) {
|
||||||
item->data_level = data_level;
|
item->data_level = data_level;
|
||||||
item->hilight_color = hilight_color;
|
item->hilight_color = hilight_color;
|
||||||
|
item->hilight_bg_color = hilight_bg_color;
|
||||||
signal_emit("window item hilight", 1, item);
|
signal_emit("window item hilight", 1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,10 +96,12 @@ static void sig_hilight_text(TEXT_DEST_REC *dest, const char *msg)
|
|||||||
item = window_item_find(dest->server, dest->target);
|
item = window_item_find(dest->server, dest->target);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
window_item_activity(item, data_level,
|
window_item_activity(item, data_level,
|
||||||
dest->hilight_color);
|
dest->hilight_color,
|
||||||
|
dest->hilight_bg_color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
window_activity(dest->window, data_level, dest->hilight_color);
|
window_activity(dest->window, data_level,
|
||||||
|
dest->hilight_color, dest->hilight_bg_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sig_dehilight_window(WINDOW_REC *window)
|
static void sig_dehilight_window(WINDOW_REC *window)
|
||||||
@ -107,9 +111,9 @@ static void sig_dehilight_window(WINDOW_REC *window)
|
|||||||
g_return_if_fail(window != NULL);
|
g_return_if_fail(window != NULL);
|
||||||
|
|
||||||
if (window->data_level != 0) {
|
if (window->data_level != 0) {
|
||||||
window_activity(window, 0, 0);
|
window_activity(window, 0, 0, 0);
|
||||||
for (tmp = window->items; tmp != NULL; tmp = tmp->next)
|
for (tmp = window->items; tmp != NULL; tmp = tmp->next)
|
||||||
window_item_activity(tmp->data, 0, 0);
|
window_item_activity(tmp->data, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,9 +353,14 @@ static void draw_activity(gchar *title, gboolean act, gboolean det, int size)
|
|||||||
set_color(stdscr, sbar_color_bold);
|
set_color(stdscr, sbar_color_bold);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (window->hilight_color > 0)
|
if (window->hilight_color > 0) {
|
||||||
set_color(stdscr, sbar_color_background | mirc_colors[window->hilight_color%16]);
|
int bg;
|
||||||
else
|
|
||||||
|
bg = window->hilight_bg_color == -1 ?
|
||||||
|
sbar_color_background :
|
||||||
|
(window->hilight_bg_color << 4);
|
||||||
|
set_color(stdscr, bg | mirc_colors[window->hilight_color%16]);
|
||||||
|
} else
|
||||||
set_color(stdscr, sbar_color_act_highlight);
|
set_color(stdscr, sbar_color_act_highlight);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user