diff --git a/src/gui/curses/gui-curses-window.c b/src/gui/curses/gui-curses-window.c index eae4612..fefc029 100644 --- a/src/gui/curses/gui-curses-window.c +++ b/src/gui/curses/gui-curses-window.c @@ -333,15 +333,15 @@ gui_window_set_custom_color_fg (WINDOW *window, int fg) { if (fg & GUI_COLOR_EXTENDED_BOLD_FLAG) gui_window_set_color_style (window, A_BOLD); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_BOLD); if (fg & GUI_COLOR_EXTENDED_REVERSE_FLAG) gui_window_set_color_style (window, A_REVERSE); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_REVERSE); if (fg & GUI_COLOR_EXTENDED_UNDERLINE_FLAG) gui_window_set_color_style (window, A_UNDERLINE); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_UNDERLINE); gui_window_set_color (window, fg & GUI_COLOR_EXTENDED_MASK, @@ -349,8 +349,11 @@ gui_window_set_custom_color_fg (WINDOW *window, int fg) } else if ((fg & GUI_COLOR_EXTENDED_MASK) < GUI_CURSES_NUM_WEECHAT_COLORS) { - gui_window_remove_color_style (window, - A_BOLD | A_REVERSE | A_UNDERLINE); + if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) + { + gui_window_remove_color_style (window, + A_BOLD | A_REVERSE | A_UNDERLINE); + } attributes = 0; if (fg & GUI_COLOR_EXTENDED_BOLD_FLAG) attributes |= A_BOLD; @@ -425,22 +428,25 @@ gui_window_set_custom_color_fg_bg (WINDOW *window, int fg, int bg) { if (fg & GUI_COLOR_EXTENDED_BOLD_FLAG) gui_window_set_color_style (window, A_BOLD); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_BOLD); if (fg & GUI_COLOR_EXTENDED_REVERSE_FLAG) gui_window_set_color_style (window, A_REVERSE); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_REVERSE); if (fg & GUI_COLOR_EXTENDED_UNDERLINE_FLAG) gui_window_set_color_style (window, A_UNDERLINE); - else + else if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) gui_window_remove_color_style (window, A_UNDERLINE); fg &= GUI_COLOR_EXTENDED_MASK; } else if ((fg & GUI_COLOR_EXTENDED_MASK) < GUI_CURSES_NUM_WEECHAT_COLORS) { - gui_window_remove_color_style (window, - A_BOLD | A_REVERSE | A_UNDERLINE); + if (!(fg & GUI_COLOR_EXTENDED_KEEPATTR_FLAG)) + { + gui_window_remove_color_style (window, + A_BOLD | A_REVERSE | A_UNDERLINE); + } attributes = 0; if (fg & GUI_COLOR_EXTENDED_BOLD_FLAG) attributes |= A_BOLD; diff --git a/src/gui/gui-color.c b/src/gui/gui-color.c index 1dcb4c8..06a3060 100644 --- a/src/gui/gui-color.c +++ b/src/gui/gui-color.c @@ -104,6 +104,9 @@ gui_color_attr_get_flag (char c) if (c == GUI_COLOR_EXTENDED_UNDERLINE_CHAR) return GUI_COLOR_EXTENDED_UNDERLINE_FLAG; + if (c == GUI_COLOR_EXTENDED_KEEPATTR_CHAR) + return GUI_COLOR_EXTENDED_KEEPATTR_FLAG; + return 0; } @@ -128,6 +131,8 @@ gui_color_attr_build_string (int color, char *str_attr) str_attr[i++] = GUI_COLOR_EXTENDED_ITALIC_CHAR; if (color & GUI_COLOR_EXTENDED_UNDERLINE_FLAG) str_attr[i++] = GUI_COLOR_EXTENDED_UNDERLINE_CHAR; + if (color & GUI_COLOR_EXTENDED_KEEPATTR_FLAG) + str_attr[i++] = GUI_COLOR_EXTENDED_KEEPATTR_CHAR; str_attr[i] = '\0'; } diff --git a/src/gui/gui-color.h b/src/gui/gui-color.h index b78cfe4..5b87e2a 100644 --- a/src/gui/gui-color.h +++ b/src/gui/gui-color.h @@ -98,6 +98,7 @@ enum t_gui_color_enum #define GUI_COLOR_EXTENDED_REVERSE_CHAR '!' #define GUI_COLOR_EXTENDED_ITALIC_CHAR '/' #define GUI_COLOR_EXTENDED_UNDERLINE_CHAR '_' +#define GUI_COLOR_EXTENDED_KEEPATTR_CHAR '|' /* color codes specific to bars */ #define GUI_COLOR_BAR_CHAR 'b' @@ -115,6 +116,7 @@ enum t_gui_color_enum #define GUI_COLOR_EXTENDED_REVERSE_FLAG 0x0400000 #define GUI_COLOR_EXTENDED_ITALIC_FLAG 0x0800000 #define GUI_COLOR_EXTENDED_UNDERLINE_FLAG 0x1000000 +#define GUI_COLOR_EXTENDED_KEEPATTR_FLAG 0x2000000 #define GUI_COLOR_EXTENDED_MASK 0x00FFFFF #define GUI_COLOR_EXTENDED_MAX 99999 diff --git a/src/plugins/irc/irc-color.c b/src/plugins/irc/irc-color.c index a80de57..798a8a3 100644 --- a/src/plugins/irc/irc-color.c +++ b/src/plugins/irc/irc-color.c @@ -176,7 +176,7 @@ irc_color_decode (const char *string, int keep_colors) } } snprintf (str_color, sizeof (str_color), - "%s%s%s", + "|%s%s%s", (fg >= 0) ? irc_color_to_weechat[fg] : "", (bg >= 0) ? "," : "", (bg >= 0) ? irc_color_to_weechat[bg] : "");