diff options
Diffstat (limited to 'src/plugins/irc')
-rw-r--r-- | src/plugins/irc/irc-color.c | 14 | ||||
-rw-r--r-- | src/plugins/irc/irc-color.h | 1 | ||||
-rw-r--r-- | src/plugins/irc/irc-input.c | 10 | ||||
-rw-r--r-- | src/plugins/irc/irc-protocol.c | 34 |
4 files changed, 48 insertions, 11 deletions
diff --git a/src/plugins/irc/irc-color.c b/src/plugins/irc/irc-color.c index 96e88986b..369324156 100644 --- a/src/plugins/irc/irc-color.c +++ b/src/plugins/irc/irc-color.c @@ -403,3 +403,17 @@ irc_color_modifier_cb (void *data, const char *modifier, /* unknown modifier */ return NULL; } + +/* + * irc_color_for_tags: return color name for tags (replace "," by ":") + * Note: result must be freed after use + */ + +char * +irc_color_for_tags (const char *color) +{ + if (!color) + return NULL; + + return weechat_string_replace (color, ",", ":"); +} diff --git a/src/plugins/irc/irc-color.h b/src/plugins/irc/irc-color.h index 14bdad9fc..1a9040133 100644 --- a/src/plugins/irc/irc-color.h +++ b/src/plugins/irc/irc-color.h @@ -96,5 +96,6 @@ extern char *irc_color_encode (const char *string, int keep_colors); extern char *irc_color_modifier_cb (void *data, const char *modifier, const char *modifier_data, const char *string); +extern char *irc_color_for_tags (const char *color); #endif /* __WEECHAT_IRC_COLOR_H */ diff --git a/src/plugins/irc/irc-input.c b/src/plugins/irc/irc-input.c index c8e74c916..1c745d756 100644 --- a/src/plugins/irc/irc-input.c +++ b/src/plugins/irc/irc-input.c @@ -45,7 +45,7 @@ void irc_input_user_message_display (struct t_gui_buffer *buffer, const char *text) { struct t_irc_nick *ptr_nick; - char *text_decoded; + char *text_decoded, str_tags[256], *str_color; text_decoded = irc_color_decode (text, weechat_config_boolean (irc_config_network_colors_send)); @@ -61,9 +61,15 @@ irc_input_user_message_display (struct t_gui_buffer *buffer, const char *text) ptr_server->nick); } + str_color = irc_color_for_tags (weechat_config_color (weechat_config_get ("weechat.color.chat_nick_self"))); + snprintf (str_tags, sizeof (str_tags), + "notify_none,no_highlight,prefix_nick_%s", + (str_color) ? str_color : "default"); + if (str_color) + free (str_color); weechat_printf_tags (buffer, irc_protocol_tags ("privmsg", - "notify_none,no_highlight", + str_tags, (ptr_nick) ? ptr_nick->name : ptr_server->nick), "%s%s", irc_nick_as_prefix (ptr_server, diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index f572b5b78..c117d90eb 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -1468,7 +1468,7 @@ IRC_PROTOCOL_CALLBACK(pong) IRC_PROTOCOL_CALLBACK(privmsg) { - char *pos_args, *pos_target; + char *pos_args, *pos_target, str_tags[256], *str_color; const char *remote_nick; int msg_op, msg_voice, is_channel, nick_is_me; struct t_irc_channel *ptr_channel; @@ -1559,10 +1559,14 @@ IRC_PROTOCOL_CALLBACK(privmsg) else { /* standard message (to "#channel") */ + str_color = irc_color_for_tags (irc_nick_find_color_name ((ptr_nick) ? ptr_nick->name : nick)); + snprintf (str_tags, sizeof (str_tags), + "notify_message,prefix_nick_%s", + (str_color) ? str_color : "default"); + if (str_color) + free (str_color); weechat_printf_tags (ptr_channel->buffer, - irc_protocol_tags (command, - "notify_message", - nick), + irc_protocol_tags (command, str_tags, nick), "%s%s", irc_nick_as_prefix (server, ptr_nick, (ptr_nick) ? NULL : nick, @@ -1615,12 +1619,24 @@ IRC_PROTOCOL_CALLBACK(privmsg) } irc_channel_set_topic (ptr_channel, address); + if (nick_is_me) + str_color = irc_color_for_tags (weechat_config_color (weechat_config_get ("weechat.color.chat_nick_self"))); + else + { + if (weechat_config_boolean (irc_config_look_color_pv_nick_like_channel)) + str_color = irc_color_for_tags (irc_nick_find_color_name (nick)); + else + str_color = irc_color_for_tags (weechat_config_color (weechat_config_get ("weechat.color.chat_nick_other"))); + } + snprintf (str_tags, sizeof (str_tags), + (nick_is_me) ? + "notify_none,no_highlight,prefix_nick_%s" : + "notify_private,prefix_nick_%s", + (str_color) ? str_color : "default"); + if (str_color) + free (str_color); weechat_printf_tags (ptr_channel->buffer, - irc_protocol_tags (command, - (nick_is_me) ? - "notify_none,no_highlight" : - "notify_private", - nick), + irc_protocol_tags (command, str_tags, nick), "%s%s", irc_nick_as_prefix (server, NULL, nick, (nick_is_me) ? |