1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-29 14:26:39 +02:00

Add IRC option to use same nick color in channel and private (on by default) (task #9870)

This commit is contained in:
Sebastien Helleu
2009-11-19 14:48:36 +01:00
parent 3c7c99b1b5
commit 018973370d
20 changed files with 237 additions and 329 deletions
+6
View File
@@ -243,6 +243,7 @@ irc_channel_new (struct t_irc_server *server, int channel_type,
new_channel->cycle = 0;
new_channel->display_creation_date = 0;
new_channel->nick_completion_reset = 0;
new_channel->pv_remote_nick_color = NULL;
new_channel->nicks_count = 0;
new_channel->nicks = NULL;
new_channel->last_nick = NULL;
@@ -652,6 +653,8 @@ irc_channel_free (struct t_irc_server *server, struct t_irc_channel *channel)
irc_nick_free_all (channel);
if (channel->away_message)
free (channel->away_message);
if (channel->pv_remote_nick_color)
free (channel->pv_remote_nick_color);
if (channel->nicks_speaking[0])
weechat_list_free (channel->nicks_speaking[0]);
if (channel->nicks_speaking[1])
@@ -722,6 +725,8 @@ irc_channel_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "key", channel->key))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "pv_remote_nick_color", channel->pv_remote_nick_color))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "nicks_count", channel->nicks_count))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "checking_away", channel->checking_away))
@@ -799,6 +804,7 @@ irc_channel_print_log (struct t_irc_channel *channel)
weechat_log_printf (" cycle. . . . . . . . . . : %d", channel->cycle);
weechat_log_printf (" display_creation_date. . : %d", channel->display_creation_date);
weechat_log_printf (" nick_completion_reset. . : %d", channel->nick_completion_reset);
weechat_log_printf (" pv_remote_nick_color . . : '%s'", channel->pv_remote_nick_color);
weechat_log_printf (" nicks_count. . . . . . . : %d", channel->nicks_count);
weechat_log_printf (" nicks. . . . . . . . . . : 0x%lx", channel->nicks);
weechat_log_printf (" last_nick. . . . . . . . : 0x%lx", channel->last_nick);
+1
View File
@@ -53,6 +53,7 @@ struct t_irc_channel
int display_creation_date; /* 1 for displaying creation date */
int nick_completion_reset; /* 1 for resetting nick completion */
/* there was some join/part on chan */
char *pv_remote_nick_color; /* color for remote nick in pv */
int nicks_count; /* # nicks on channel (0 if pv) */
struct t_irc_nick *nicks; /* nicks on the channel */
struct t_irc_nick *last_nick; /* last nick on the channel */
+8 -1
View File
@@ -45,6 +45,7 @@ struct t_config_section *irc_config_section_server = NULL;
/* IRC config, look section */
struct t_config_option *irc_config_look_color_nicks_in_server_messages;
struct t_config_option *irc_config_look_color_pv_nick_like_channel;
struct t_config_option *irc_config_look_server_buffer;
struct t_config_option *irc_config_look_open_channel_near_server;
struct t_config_option *irc_config_look_open_pv_near_server;
@@ -150,7 +151,7 @@ irc_config_change_look_color_nicks_number (void *data, const char *option,
for (ptr_nick = ptr_channel->nicks; ptr_nick;
ptr_nick = ptr_nick->next_nick)
{
ptr_nick->color = irc_nick_find_color (ptr_nick);
ptr_nick->color = irc_nick_find_color (ptr_nick->name);
}
}
}
@@ -1227,6 +1228,12 @@ irc_config_init ()
N_("use nick color in messages from server"),
NULL, 0, 0, "on", NULL, 0, NULL, NULL,
NULL, NULL, NULL, NULL);
irc_config_look_color_pv_nick_like_channel = weechat_config_new_option (
irc_config_file, ptr_section,
"color_pv_nick_like_channel", "boolean",
N_("use same nick color for channel and private"),
NULL, 0, 0, "on", NULL, 0, NULL, NULL,
NULL, NULL, NULL, NULL);
irc_config_look_server_buffer = weechat_config_new_option (
irc_config_file, ptr_section,
"server_buffer", "integer",
+1
View File
@@ -62,6 +62,7 @@ extern struct t_config_section *irc_config_section_server_default;
extern struct t_config_section *irc_config_section_server;
extern struct t_config_option *irc_config_look_color_nicks_in_server_messages;
extern struct t_config_option *irc_config_look_color_pv_nick_like_channel;
extern struct t_config_option *irc_config_look_server_buffer;
extern struct t_config_option *irc_config_look_open_channel_near_server;
extern struct t_config_option *irc_config_look_open_pv_near_server;
+1 -1
View File
@@ -883,7 +883,7 @@ irc_ctcp_recv (struct t_irc_server *server, const char *command,
"%s%s%s%s%s%s",
weechat_prefix ("action"),
(nick_is_me) ?
IRC_COLOR_CHAT_NICK_SELF : IRC_COLOR_CHAT_NICK_OTHER,
IRC_COLOR_CHAT_NICK_SELF : irc_nick_color_for_pv (ptr_channel, nick),
nick,
(pos_args) ? IRC_COLOR_CHAT : "",
(pos_args) ? " " : "",
+26 -8
View File
@@ -61,15 +61,15 @@ irc_nick_valid (struct t_irc_channel *channel, struct t_irc_nick *nick)
*/
const char *
irc_nick_find_color (struct t_irc_nick *nick)
irc_nick_find_color (const char *nickname)
{
int i, color;
char color_name[64];
color = 0;
for (i = strlen (nick->name) - 1; i >= 0; i--)
for (i = strlen (nickname) - 1; i >= 0; i--)
{
color += (int)(nick->name[i]);
color += (int)(nickname[i]);
}
color = (color %
weechat_config_integer (weechat_config_get ("weechat.look.color_nicks_number")));
@@ -179,7 +179,7 @@ irc_nick_get_gui_infos (struct t_irc_nick *nick,
struct t_irc_nick *
irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
const char *nick_name, int is_chanowner, int is_chanadmin,
const char *nickname, int is_chanowner, int is_chanadmin,
int is_chanadmin2, int is_op, int is_halfop, int has_voice,
int is_chanuser, int is_away)
{
@@ -189,7 +189,7 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
struct t_gui_nick_group *ptr_group;
/* nick already exists on this channel? */
ptr_nick = irc_nick_search (channel, nick_name);
ptr_nick = irc_nick_search (channel, nickname);
if (ptr_nick)
{
/* remove old nick from nicklist */
@@ -232,7 +232,7 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
return NULL;
/* initialize new nick */
new_nick->name = strdup (nick_name);
new_nick->name = strdup (nickname);
new_nick->host = NULL;
new_nick->flags = 0;
IRC_NICK_SET_FLAG(new_nick, is_chanowner, IRC_NICK_CHANOWNER);
@@ -246,7 +246,7 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel,
if (weechat_strcasecmp (new_nick->name, server->nick) == 0)
new_nick->color = IRC_COLOR_CHAT_NICK_SELF;
else
new_nick->color = irc_nick_find_color (new_nick);
new_nick->color = irc_nick_find_color (new_nick->name);
/* add nick to end of list */
new_nick->prev_nick = channel->last_nick;
@@ -311,7 +311,7 @@ irc_nick_change (struct t_irc_server *server, struct t_irc_channel *channel,
if (nick_is_me)
nick->color = IRC_COLOR_CHAT_NICK_SELF;
else
nick->color = irc_nick_find_color (nick);
nick->color = irc_nick_find_color (nick->name);
/* add nick in nicklist */
prefix[0] = ' ';
@@ -579,6 +579,24 @@ irc_nick_as_prefix (struct t_irc_nick *nick, const char *nickname,
return result;
}
/*
* irc_nick_color_for_pv: return string with color of nick for private
*/
const char *
irc_nick_color_for_pv (struct t_irc_channel *channel, const char *nickname)
{
if (weechat_config_boolean (irc_config_look_color_pv_nick_like_channel))
{
if (!channel->pv_remote_nick_color)
channel->pv_remote_nick_color = strdup (irc_nick_find_color (nickname));
if (channel->pv_remote_nick_color)
return channel->pv_remote_nick_color;
}
return IRC_COLOR_CHAT_NICK_OTHER;
}
/*
* irc_nick_add_to_infolist: add a nick in an infolist
* return 1 if ok, 0 if error
+4 -2
View File
@@ -61,10 +61,10 @@ struct t_irc_nick
extern int irc_nick_valid (struct t_irc_channel *channel,
struct t_irc_nick *nick);
extern const char *irc_nick_find_color (struct t_irc_nick *nick);
extern const char *irc_nick_find_color (const char *nickname);
extern struct t_irc_nick *irc_nick_new (struct t_irc_server *server,
struct t_irc_channel *channel,
const char *nick_name,
const char *nickname,
int is_chanowner,
int is_chanadmin,
int is_chanadmin2,
@@ -90,6 +90,8 @@ extern void irc_nick_set_away (struct t_irc_channel *channel,
struct t_irc_nick *nick, int is_away);
extern char *irc_nick_as_prefix (struct t_irc_nick *nick, const char *nickname,
const char *force_color);
extern const char * irc_nick_color_for_pv (struct t_irc_channel *channel,
const char *nickname);
extern int irc_nick_add_to_infolist (struct t_infolist *infolist,
struct t_irc_nick *nick);
extern void irc_nick_print_log (struct t_irc_nick *nick);
+34 -146
View File
@@ -665,6 +665,11 @@ irc_protocol_cmd_nick (struct t_irc_server *server, const char *command,
{
free (ptr_channel->name);
ptr_channel->name = strdup (new_nick);
if (ptr_channel->pv_remote_nick_color)
{
free (ptr_channel->pv_remote_nick_color);
ptr_channel->pv_remote_nick_color = NULL;
}
buffer_name = irc_buffer_build_name (server->name, ptr_channel->name);
weechat_buffer_set (ptr_channel->buffer, "name", buffer_name);
weechat_buffer_set (ptr_channel->buffer, "short_name", ptr_channel->name);
@@ -1081,7 +1086,7 @@ int
irc_protocol_cmd_privmsg (struct t_irc_server *server, const char *command,
int argc, char **argv, char **argv_eol)
{
char *pos_args, *pos_end_01, *pos, *pos_message;
char *pos_args;
const char *remote_nick;
int nick_is_me;
struct t_irc_channel *ptr_channel;
@@ -1180,157 +1185,40 @@ irc_protocol_cmd_privmsg (struct t_irc_server *server, const char *command,
ptr_channel = irc_channel_search (server, remote_nick);
if (strncmp (pos_args, "\01ACTION ", 8) == 0)
if (!irc_ignore_check (server, ptr_channel, remote_nick, host))
{
if (!irc_ignore_check (server, ptr_channel, remote_nick, host))
if (!ptr_channel)
{
ptr_channel = irc_channel_new (server,
IRC_CHANNEL_TYPE_PRIVATE,
remote_nick, 0, 0);
if (!ptr_channel)
{
ptr_channel = irc_channel_new (server,
IRC_CHANNEL_TYPE_PRIVATE,
remote_nick, 0, 0);
if (!ptr_channel)
{
weechat_printf (server->buffer,
_("%s%s: cannot create new "
"private buffer \"%s\""),
weechat_prefix ("error"),
IRC_PLUGIN_NAME, remote_nick);
return WEECHAT_RC_ERROR;
}
}
if (!ptr_channel->topic)
irc_channel_set_topic (ptr_channel, address);
pos_args += 8;
pos_end_01 = strrchr (pos_args, '\01');
if (pos_end_01)
pos_end_01[0] = '\0';
weechat_printf_tags (ptr_channel->buffer,
irc_protocol_tags (command,
(nick_is_me) ?
"irc_action,notify_private,no_highlight" :
"irc_action,notify_private"),
"%s%s%s %s%s",
weechat_prefix ("action"),
(nick_is_me) ?
IRC_COLOR_CHAT_NICK_SELF : IRC_COLOR_CHAT_NICK_OTHER,
nick,
IRC_COLOR_CHAT,
pos_args);
weechat_hook_signal_send ("irc_pv",
WEECHAT_HOOK_SIGNAL_STRING,
argv_eol[0]);
if (pos_end_01)
pos_end_01[0] = '\01';
}
}
else
{
/* unknown CTCP ? */
pos_end_01 = strrchr (pos_args + 1, '\01');
if ((pos_args[0] == '\01')
&& pos_end_01 && (pos_end_01[1] == '\0'))
{
if (!irc_ignore_check (server, ptr_channel, remote_nick, host))
{
pos_args++;
pos_end_01[0] = '\0';
pos = strchr (pos_args, ' ');
if (pos)
{
pos[0] = '\0';
pos_message = pos + 1;
while (pos_message[0] == ' ')
{
pos_message++;
}
if (!pos_message[0])
pos_message = NULL;
}
else
pos_message = NULL;
if (pos_message)
{
weechat_printf_tags (server->buffer,
irc_protocol_tags (command, "irc_ctcp"),
_("%sUnknown CTCP %s%s%s "
"received from %s%s%s: %s"),
weechat_prefix ("network"),
IRC_COLOR_CHAT_CHANNEL,
pos_args,
IRC_COLOR_CHAT,
IRC_COLOR_CHAT_NICK,
nick,
IRC_COLOR_CHAT,
pos_message);
}
else
{
weechat_printf_tags (server->buffer,
irc_protocol_tags (command, "irc_ctcp"),
_("%sUnknown CTCP %s%s%s "
"received from %s%s%s"),
weechat_prefix ("network"),
IRC_COLOR_CHAT_CHANNEL,
pos_args,
IRC_COLOR_CHAT,
IRC_COLOR_CHAT_NICK,
nick,
IRC_COLOR_CHAT);
}
if (pos_end_01)
pos_end_01[0] = '\01';
if (pos)
pos[0] = ' ';
weechat_hook_signal_send ("irc_ctcp",
WEECHAT_HOOK_SIGNAL_STRING,
argv_eol[0]);
}
}
else
{
/* private message */
if (!irc_ignore_check (server, ptr_channel, remote_nick, host))
{
if (!ptr_channel)
{
ptr_channel = irc_channel_new (server,
IRC_CHANNEL_TYPE_PRIVATE,
remote_nick, 0, 0);
if (!ptr_channel)
{
weechat_printf (server->buffer,
_("%s%s: cannot create new "
"private buffer \"%s\""),
weechat_prefix ("error"),
IRC_PLUGIN_NAME, remote_nick);
return WEECHAT_RC_ERROR;
}
}
irc_channel_set_topic (ptr_channel, address);
weechat_printf_tags (ptr_channel->buffer,
irc_protocol_tags (command,
(nick_is_me) ?
"notify_private,no_highlight" :
"notify_private"),
"%s%s",
irc_nick_as_prefix (NULL,
nick,
(nick_is_me) ?
IRC_COLOR_CHAT_NICK_SELF : IRC_COLOR_CHAT_NICK_OTHER),
pos_args);
weechat_hook_signal_send ("irc_pv",
WEECHAT_HOOK_SIGNAL_STRING,
argv_eol[0]);
weechat_printf (server->buffer,
_("%s%s: cannot create new "
"private buffer \"%s\""),
weechat_prefix ("error"),
IRC_PLUGIN_NAME, remote_nick);
return WEECHAT_RC_ERROR;
}
}
irc_channel_set_topic (ptr_channel, address);
weechat_printf_tags (ptr_channel->buffer,
irc_protocol_tags (command,
(nick_is_me) ?
"notify_private,no_highlight" :
"notify_private"),
"%s%s",
irc_nick_as_prefix (NULL,
nick,
(nick_is_me) ?
IRC_COLOR_CHAT_NICK_SELF : irc_nick_color_for_pv (ptr_channel, nick)),
pos_args);
weechat_hook_signal_send ("irc_pv",
WEECHAT_HOOK_SIGNAL_STRING,
argv_eol[0]);
}
}