summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--src/plugins/irc/irc-channel.c2
-rw-r--r--src/plugins/irc/irc-color.h3
-rw-r--r--src/plugins/irc/irc-nick.c24
-rw-r--r--src/plugins/irc/irc-nick.h2
-rw-r--r--src/plugins/irc/irc-protocol.c40
6 files changed, 49 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index a2d95797e..146d2784e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,8 @@ Version 0.3.8 (under dev!)
weechat.look.paste_bracketed (task #11316)
* core: fix display of wide chars on last column of chat area (patch #7733)
* api: add list "gui_buffer_last_displayed" in hdata "buffer"
+* irc: compute hash to find nick color for nick in server message when nick
+ is not in nicklist
* irc: add support of "external" SASL mechanism (task #11864)
* irc: close server buffer when server is deleted
* irc: add search for lower case nicks in option irc.look.nick_color_force
diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c
index 6b9906707..4b8dc06fd 100644
--- a/src/plugins/irc/irc-channel.c
+++ b/src/plugins/irc/irc-channel.c
@@ -778,7 +778,7 @@ irc_channel_display_nick_back_in_pv (struct t_irc_server *server,
weechat_printf (ptr_channel->buffer,
_("%s%s%s %s(%s%s%s)%s is back on server"),
weechat_prefix ("join"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(nick),
+ irc_nick_color_for_server_message (nick, nickname),
(nick) ? nick->name : nickname,
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_CHAT_HOST,
diff --git a/src/plugins/irc/irc-color.h b/src/plugins/irc/irc-color.h
index 5821a3a72..14bdad9fc 100644
--- a/src/plugins/irc/irc-color.h
+++ b/src/plugins/irc/irc-color.h
@@ -89,9 +89,6 @@
#define IRC_COLOR_ITEM_CHANNEL_MODES weechat_color(weechat_config_string(irc_config_color_item_channel_modes))
#define IRC_COLOR_ITEM_LAG_COUNTING weechat_color(weechat_config_string(irc_config_color_item_lag_counting))
#define IRC_COLOR_ITEM_LAG_FINISHED weechat_color(weechat_config_string(irc_config_color_item_lag_finished))
-#define IRC_COLOR_NICK_IN_SERVER_MESSAGE(nick) \
- ((nick && weechat_config_boolean(irc_config_look_color_nicks_in_server_messages)) ? \
- nick->color : IRC_COLOR_CHAT_NICK)
extern char *irc_color_decode (const char *string, int keep_colors);
extern char *irc_color_decode_for_user_entry (const char *string);
diff --git a/src/plugins/irc/irc-nick.c b/src/plugins/irc/irc-nick.c
index fbcb944fe..98f3b80d1 100644
--- a/src/plugins/irc/irc-nick.c
+++ b/src/plugins/irc/irc-nick.c
@@ -134,6 +134,8 @@ irc_nick_strdup_for_color (const char *nickname)
/*
* irc_nick_hash_color: hash a nickname to find color
+ * return a number which is the index of color in the
+ * nicks colors of option weechat.color.chat_nick_colors
*/
int
@@ -162,6 +164,7 @@ irc_nick_hash_color (const char *nickname)
/*
* irc_nick_get_forced_color: get forced color for a nick
* (NULL if no color is forced for nick)
+ * return name of color (example: "green")
*/
const char *
@@ -193,6 +196,7 @@ irc_nick_get_forced_color (const char *nickname)
/*
* irc_nick_find_color: find a color code for a nick
* (according to nick letters)
+ * return a WeeChat color code
*/
const char *
@@ -231,6 +235,7 @@ irc_nick_find_color (const char *nickname)
/*
* irc_nick_find_color_name: find a color name for a nick
* (according to nick letters)
+ * return name of color (example: "green")
*/
const char *
@@ -932,6 +937,25 @@ irc_nick_as_prefix (struct t_irc_server *server, struct t_irc_nick *nick,
}
/*
+ * irc_nick_color_for_server_message: return WeeChat color code for a nick
+ * (used in a server message)
+ */
+
+const char *
+irc_nick_color_for_server_message (struct t_irc_nick *nick,
+ const char *nickname)
+{
+ if (weechat_config_boolean(irc_config_look_color_nicks_in_server_messages))
+ {
+ if (nick)
+ return nick->color;
+ if (nickname)
+ return irc_nick_find_color (nickname);
+ }
+ return IRC_COLOR_CHAT_NICK;
+}
+
+/*
* irc_nick_color_for_pv: return string with color of nick for private
*/
diff --git a/src/plugins/irc/irc-nick.h b/src/plugins/irc/irc-nick.h
index 554b15554..132f5182d 100644
--- a/src/plugins/irc/irc-nick.h
+++ b/src/plugins/irc/irc-nick.h
@@ -89,6 +89,8 @@ extern char *irc_nick_as_prefix (struct t_irc_server *server,
struct t_irc_nick *nick,
const char *nickname,
const char *force_color);
+extern const char *irc_nick_color_for_server_message (struct t_irc_nick *nick,
+ const char *nickname);
extern const char * irc_nick_color_for_pv (struct t_irc_channel *channel,
const char *nickname);
extern struct t_hdata *irc_nick_hdata_nick_cb (void *data,
diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c
index 60762ad0f..2ecdd046d 100644
--- a/src/plugins/irc/irc-protocol.c
+++ b/src/plugins/irc/irc-protocol.c
@@ -586,7 +586,7 @@ IRC_PROTOCOL_CALLBACK(join)
nick),
_("%s%s%s%s%s%s%s%s%s%s has joined %s%s%s"),
weechat_prefix ("join"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_CHAT_DELIMITERS,
(display_host) ? " (" : "",
@@ -643,10 +643,10 @@ IRC_PROTOCOL_CALLBACK(kick)
irc_protocol_tags (command, NULL, NULL),
_("%s%s%s%s has kicked %s%s%s %s(%s%s%s)"),
weechat_prefix ("quit"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_MESSAGE_QUIT,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick_kicked),
+ irc_nick_color_for_server_message (ptr_nick_kicked, argv[3]),
argv[3],
IRC_COLOR_MESSAGE_QUIT,
IRC_COLOR_CHAT_DELIMITERS,
@@ -662,10 +662,10 @@ IRC_PROTOCOL_CALLBACK(kick)
irc_protocol_tags (command, NULL, NULL),
_("%s%s%s%s has kicked %s%s%s"),
weechat_prefix ("quit"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_MESSAGE_QUIT,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick_kicked),
+ irc_nick_color_for_server_message (ptr_nick_kicked, argv[3]),
argv[3],
IRC_COLOR_MESSAGE_QUIT);
}
@@ -744,7 +744,7 @@ IRC_PROTOCOL_CALLBACK(kill)
_("%s%sYou were killed by %s%s%s %s(%s%s%s)"),
weechat_prefix ("quit"),
IRC_COLOR_MESSAGE_QUIT,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_MESSAGE_QUIT,
IRC_COLOR_CHAT_DELIMITERS,
@@ -761,7 +761,7 @@ IRC_PROTOCOL_CALLBACK(kill)
_("%s%sYou were killed by %s%s%s"),
weechat_prefix ("quit"),
IRC_COLOR_MESSAGE_QUIT,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_MESSAGE_QUIT);
}
@@ -862,7 +862,7 @@ IRC_PROTOCOL_CALLBACK(mode)
pos_modes,
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick);
}
else
@@ -990,7 +990,7 @@ IRC_PROTOCOL_CALLBACK(nick)
old_color : IRC_COLOR_CHAT_NICK,
nick,
IRC_COLOR_RESET,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, new_nick),
new_nick,
IRC_COLOR_RESET);
}
@@ -1094,7 +1094,7 @@ IRC_PROTOCOL_CALLBACK(notice)
_("Notice"),
(notice_op) ? "Op" : ((notice_voice) ? "Voice" : ""),
IRC_COLOR_CHAT_DELIMITERS,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
(nick && nick[0]) ? nick : "?",
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
@@ -1295,7 +1295,7 @@ IRC_PROTOCOL_CALLBACK(part)
_("%s%s%s%s%s%s%s%s%s%s has left %s%s%s "
"%s(%s%s%s)"),
weechat_prefix ("quit"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_CHAT_DELIMITERS,
(display_host) ? " (" : "",
@@ -1328,7 +1328,7 @@ IRC_PROTOCOL_CALLBACK(part)
_("%s%s%s%s%s%s%s%s%s%s has left "
"%s%s%s"),
weechat_prefix ("quit"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_CHAT_DELIMITERS,
(display_host) ? " (" : "",
@@ -1635,7 +1635,7 @@ IRC_PROTOCOL_CALLBACK(quit)
"%s(%s%s%s)"),
weechat_prefix ("quit"),
(ptr_channel->type == IRC_CHANNEL_TYPE_PRIVATE) ?
- irc_nick_color_for_pv (ptr_channel, nick) : IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_pv (ptr_channel, nick) : irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_CHAT_DELIMITERS,
(display_host) ? " (" : "",
@@ -1665,7 +1665,7 @@ IRC_PROTOCOL_CALLBACK(quit)
_("%s%s%s%s%s%s%s%s%s%s has quit"),
weechat_prefix ("quit"),
(ptr_channel->type == IRC_CHANNEL_TYPE_PRIVATE) ?
- irc_nick_color_for_pv (ptr_channel, nick) : IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_pv (ptr_channel, nick) : irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_CHAT_DELIMITERS,
(display_host) ? " (" : "",
@@ -1799,7 +1799,7 @@ IRC_PROTOCOL_CALLBACK(topic)
_("%s%s%s%s has changed topic for %s%s%s "
"from \"%s%s%s\" to \"%s%s%s\""),
weechat_prefix ("network"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_RESET,
IRC_COLOR_CHAT_CHANNEL,
@@ -1823,7 +1823,7 @@ IRC_PROTOCOL_CALLBACK(topic)
_("%s%s%s%s has changed topic for %s%s%s "
"to \"%s%s%s\""),
weechat_prefix ("network"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_RESET,
IRC_COLOR_CHAT_CHANNEL,
@@ -1850,7 +1850,7 @@ IRC_PROTOCOL_CALLBACK(topic)
_("%s%s%s%s has unset topic for %s%s%s "
"(old topic: \"%s%s%s\")"),
weechat_prefix ("network"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_RESET,
IRC_COLOR_CHAT_CHANNEL,
@@ -1870,7 +1870,7 @@ IRC_PROTOCOL_CALLBACK(topic)
irc_protocol_tags (command, NULL, NULL),
_("%s%s%s%s has unset topic for %s%s%s"),
weechat_prefix ("network"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, nick),
nick,
IRC_COLOR_RESET,
IRC_COLOR_CHAT_CHANNEL,
@@ -3064,7 +3064,7 @@ IRC_PROTOCOL_CALLBACK(333)
/* TRANSLATORS: "%s" after "on" is a date */
_("%sTopic set by %s%s%s%s%s%s%s%s%s on %s"),
weechat_prefix ("network"),
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, topic_nick),
topic_nick,
IRC_COLOR_CHAT_DELIMITERS,
(topic_address && topic_address[0]) ? " (" : "",
@@ -3101,7 +3101,7 @@ IRC_PROTOCOL_CALLBACK(333)
IRC_COLOR_CHAT_CHANNEL,
argv[3],
IRC_COLOR_RESET,
- IRC_COLOR_NICK_IN_SERVER_MESSAGE(ptr_nick),
+ irc_nick_color_for_server_message (ptr_nick, topic_nick),
topic_nick,
IRC_COLOR_CHAT_DELIMITERS,
(topic_address && topic_address[0]) ? " (" : "",