1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-05 01:03:14 +02:00

irc: replace options irc.color.nick_prefix_{op|halfop|voice|user} by a single option irc.color.nick_prefixes (task #10888)

This commit is contained in:
Sebastien Helleu
2011-03-23 18:29:24 +01:00
parent b7b2cc8bd7
commit 80312dd56a
22 changed files with 327 additions and 294 deletions
+2 -3
View File
@@ -423,7 +423,7 @@ irc_bar_item_input_prompt (void *data, struct t_gui_bar_item *item,
struct t_irc_channel *channel;
struct t_irc_nick *ptr_nick;
char *buf, str_prefix[64];
int length, prefix_color;
int length;
/* make C compiler happy */
(void) data;
@@ -451,9 +451,8 @@ irc_bar_item_input_prompt (void *data, struct t_gui_bar_item *item,
{
if (ptr_nick->prefix[0] != ' ')
{
prefix_color = irc_nick_get_prefix_color (server, ptr_nick);
snprintf (str_prefix, sizeof (str_prefix), "%s%s",
weechat_color (weechat_config_string (weechat_config_get (irc_nick_get_prefix_color_name (prefix_color)))),
weechat_color (irc_nick_get_prefix_color_name (server, ptr_nick)),
ptr_nick->prefix);
}
}
+63 -31
View File
@@ -99,10 +99,7 @@ struct t_config_option *irc_config_look_topic_strip_colors;
struct t_config_option *irc_config_color_message_join;
struct t_config_option *irc_config_color_message_quit;
struct t_config_option *irc_config_color_nick_prefix_op;
struct t_config_option *irc_config_color_nick_prefix_halfop;
struct t_config_option *irc_config_color_nick_prefix_voice;
struct t_config_option *irc_config_color_nick_prefix_user;
struct t_config_option *irc_config_color_nick_prefixes;
struct t_config_option *irc_config_color_nick_prefix;
struct t_config_option *irc_config_color_nick_suffix;
struct t_config_option *irc_config_color_notice;
@@ -135,6 +132,7 @@ struct t_hook *irc_config_hook_config_nick_colors = NULL;
char **irc_config_nick_colors = NULL;
int irc_config_num_nick_colors = 0;
struct t_hashtable *irc_config_hashtable_nick_color_force = NULL;
struct t_hashtable *irc_config_hashtable_nick_prefixes = NULL;
int irc_config_write_temp_servers = 0;
@@ -586,18 +584,52 @@ irc_config_change_color_item_lag (void *data,
}
/*
* irc_config_change_color_nick_prefix: called when the color of a nick prefix
* is changed
* irc_config_change_color_nick_prefixes: called when the string with color of
* nick prefixes is changed
*/
void
irc_config_change_color_nick_prefix (void *data,
struct t_config_option *option)
irc_config_change_color_nick_prefixes (void *data,
struct t_config_option *option)
{
char **items, *pos;
int num_items, i;
/* make C compiler happy */
(void) data;
(void) option;
if (!irc_config_hashtable_nick_prefixes)
{
irc_config_hashtable_nick_prefixes = weechat_hashtable_new (8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
}
else
weechat_hashtable_remove_all (irc_config_hashtable_nick_prefixes);
items = weechat_string_split (weechat_config_string (irc_config_color_nick_prefixes),
";", 0, 0, &num_items);
if (items)
{
for (i = 0; i < num_items; i++)
{
pos = strchr (items[i], ':');
if (pos)
{
pos[0] = '\0';
weechat_hashtable_set (irc_config_hashtable_nick_prefixes,
items[i],
pos + 1);
}
}
weechat_string_free_split (items);
}
irc_nick_nicklist_set_prefix_color_all ();
weechat_bar_item_update ("input_prompt");
weechat_bar_item_update ("nicklist");
}
@@ -1777,6 +1809,11 @@ irc_config_init ()
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
irc_config_hashtable_nick_prefixes = weechat_hashtable_new (8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL,
NULL);
irc_config_file = weechat_config_new (IRC_CONFIG_NAME,
&irc_config_reload, NULL);
@@ -2105,30 +2142,17 @@ irc_config_init ()
N_("color for text in part/quit messages"),
NULL, -1, 0, "red", NULL, 0, NULL, NULL,
NULL, NULL, NULL, NULL);
irc_config_color_nick_prefix_op = weechat_config_new_option (
irc_config_color_nick_prefixes = weechat_config_new_option (
irc_config_file, ptr_section,
"nick_prefix_op", "color",
N_("color for prefix of nick which is op/admin/owner on channel"),
NULL, -1, 0, "lightgreen", NULL, 0, NULL, NULL,
&irc_config_change_color_nick_prefix, NULL, NULL, NULL);
irc_config_color_nick_prefix_halfop = weechat_config_new_option (
irc_config_file, ptr_section,
"nick_prefix_halfop", "color",
N_("color for prefix of nick which is halfop on channel"),
NULL, -1, 0, "lightmagenta", NULL, 0, NULL, NULL,
&irc_config_change_color_nick_prefix, NULL, NULL, NULL);
irc_config_color_nick_prefix_voice = weechat_config_new_option (
irc_config_file, ptr_section,
"nick_prefix_voice", "color",
N_("color for prefix of nick which has voice on channel"),
NULL, -1, 0, "yellow", NULL, 0, NULL, NULL,
&irc_config_change_color_nick_prefix, NULL, NULL, NULL);
irc_config_color_nick_prefix_user = weechat_config_new_option (
irc_config_file, ptr_section,
"nick_prefix_user", "color",
N_("color for prefix of nick which is user on channel"),
NULL, -1, 0, "blue", NULL, 0, NULL, NULL,
&irc_config_change_color_nick_prefix, NULL, NULL, NULL);
"nick_prefixes", "string",
N_("color for nick prefixes using mode char (o=op, h=halfop, v=voice, "
"..), format is: \"o:color1;h:color2;v:color3\" (if a mode is not "
"found, WeeChat will try with next modes received from server "
"(\"PREFIX\"); a special mode \"*\" can be used as default color "
"if no mode has been found in list)"),
NULL, 0, 0, "q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;"
"v:yellow;*:lightblue", NULL, 0, NULL, NULL,
&irc_config_change_color_nick_prefixes, NULL, NULL, NULL);
irc_config_color_nick_prefix = weechat_config_new_option (
irc_config_file, ptr_section,
"nick_prefix", "color",
@@ -2360,6 +2384,8 @@ irc_config_read ()
if (rc == WEECHAT_CONFIG_READ_OK)
{
irc_notify_new_for_all_servers ();
irc_config_change_look_nick_color_force (NULL, NULL);
irc_config_change_color_nick_prefixes (NULL, NULL);
irc_config_change_network_notify_check_ison (NULL, NULL);
irc_config_change_network_notify_check_whois (NULL, NULL);
}
@@ -2404,4 +2430,10 @@ irc_config_free ()
weechat_hashtable_free (irc_config_hashtable_nick_color_force);
irc_config_hashtable_nick_color_force = NULL;
}
if (irc_config_hashtable_nick_prefixes)
{
weechat_hashtable_free (irc_config_hashtable_nick_prefixes);
irc_config_hashtable_nick_prefixes = NULL;
}
}
+2 -4
View File
@@ -122,10 +122,7 @@ extern struct t_config_option *irc_config_look_topic_strip_colors;
extern struct t_config_option *irc_config_color_message_join;
extern struct t_config_option *irc_config_color_message_quit;
extern struct t_config_option *irc_config_color_nick_prefix_op;
extern struct t_config_option *irc_config_color_nick_prefix_halfop;
extern struct t_config_option *irc_config_color_nick_prefix_voice;
extern struct t_config_option *irc_config_color_nick_prefix_user;
extern struct t_config_option *irc_config_color_nick_prefixes;
extern struct t_config_option *irc_config_color_nick_prefix;
extern struct t_config_option *irc_config_color_nick_suffix;
extern struct t_config_option *irc_config_color_notice;
@@ -154,6 +151,7 @@ extern char **irc_config_nick_colors;
extern int irc_config_num_nick_colors;
extern struct t_hashtable *irc_config_hashtable_nick_color_force;
extern struct t_hashtable *irc_config_hashtable_nick_prefixes;
extern void irc_config_set_nick_colors ();
extern void irc_config_server_change_cb (void *data,
+68 -47
View File
@@ -384,52 +384,48 @@ irc_nick_get_nicklist_group (struct t_irc_server *server,
}
/*
* irc_nick_get_prefix_color: get prefix color index for a nick
*/
int
irc_nick_get_prefix_color (struct t_irc_server *server,
struct t_irc_nick *nick)
{
int index, prefix_color;
prefix_color = 0;
index = irc_server_get_prefix_char_index (server, nick->prefix[0]);
if (index >= 0)
{
if (index <= irc_server_get_prefix_mode_index (server, 'o'))
prefix_color = 1; /* color for op (or better than op) */
else if (index == irc_server_get_prefix_mode_index (server, 'h'))
prefix_color = 2; /* color for halh-op */
else if (index == irc_server_get_prefix_mode_index (server, 'v'))
prefix_color = 3; /* color for voice */
else if (index == irc_server_get_prefix_mode_index (server, 'u'))
prefix_color = 4; /* color for chan user */
}
return prefix_color;
}
/*
* irc_nick_get_prefix_color_name: return name of color with a prefix number
* irc_nick_get_prefix_color_name: return name of prefix color for a nick
*/
const char *
irc_nick_get_prefix_color_name (int prefix_color)
irc_nick_get_prefix_color_name (struct t_irc_server *server,
struct t_irc_nick *nick)
{
static char *color_for_prefix[] = {
"chat",
"irc.color.nick_prefix_op",
"irc.color.nick_prefix_halfop",
"irc.color.nick_prefix_voice",
"irc.color.nick_prefix_user",
};
static char *default_color = "chat";
const char *prefix_modes, *color;
char mode[2];
int i, index;
if ((prefix_color >= 0) && (prefix_color <= 4))
return color_for_prefix[prefix_color];
if (irc_config_hashtable_nick_prefixes)
{
index = irc_server_get_prefix_char_index (server, nick->prefix[0]);
if (index >= 0)
{
mode[0] = ' ';
mode[1] = '\0';
prefix_modes = irc_server_get_prefix_modes (server);
for (i = index; prefix_modes[i]; i++)
{
mode[0] = prefix_modes[i];
color = weechat_hashtable_get (irc_config_hashtable_nick_prefixes,
mode);
if (color)
return color;
}
/*
* no color found with mode (and following modes)?
* => fallback to "*"
*/
mode[0] = '*';
color = weechat_hashtable_get (irc_config_hashtable_nick_prefixes,
mode);
if (color)
return color;
}
}
/* no color by default (should not happen) */
return color_for_prefix[0];
/* no color by default */
return default_color;
}
/*
@@ -467,16 +463,14 @@ irc_nick_nicklist_add (struct t_irc_server *server,
struct t_irc_channel *channel,
struct t_irc_nick *nick)
{
int prefix_color;
struct t_gui_nick_group *ptr_group;
ptr_group = irc_nick_get_nicklist_group (server, channel->buffer, nick);
prefix_color = irc_nick_get_prefix_color (server, nick);
weechat_nicklist_add_nick (channel->buffer, ptr_group,
nick->name,
irc_nick_get_color_for_nicklist (server, nick),
nick->prefix,
irc_nick_get_prefix_color_name (prefix_color),
irc_nick_get_prefix_color_name (server, nick),
1);
}
@@ -516,6 +510,35 @@ irc_nick_nicklist_set (struct t_irc_channel *channel,
}
}
/*
* irc_nick_nicklist_set_prefix_color_all: set nick prefix colors in nicklist
* for all servers/channels
*/
void
irc_nick_nicklist_set_prefix_color_all ()
{
struct t_irc_server *ptr_server;
struct t_irc_channel *ptr_channel;
struct t_irc_nick *ptr_nick;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
for (ptr_channel = ptr_server->channels; ptr_channel;
ptr_channel = ptr_channel->next_channel)
{
for (ptr_nick = ptr_channel->nicks; ptr_nick;
ptr_nick = ptr_nick->next_nick)
{
irc_nick_nicklist_set (ptr_channel, ptr_nick, "prefix_color",
irc_nick_get_prefix_color_name (ptr_server,
ptr_nick));
}
}
}
}
/*
* irc_nick_nicklist_set_color_all: set nick colors in nicklist for all
* servers/channels
@@ -840,19 +863,17 @@ irc_nick_as_prefix (struct t_irc_server *server, struct t_irc_nick *nick,
static char result[256];
char prefix[2];
const char *str_prefix_color;
int prefix_color;
prefix[0] = (nick) ? nick->prefix[0] : '\0';
prefix[1] = '\0';
if (weechat_config_boolean (weechat_config_get ("weechat.look.nickmode")))
{
if (nick)
{
prefix_color = irc_nick_get_prefix_color (server, nick);
if ((prefix[0] == ' ')
&& !weechat_config_boolean (weechat_config_get ("weechat.look.nickmode_empty")))
prefix[0] = '\0';
str_prefix_color = weechat_color (weechat_config_string (weechat_config_get (irc_nick_get_prefix_color_name (prefix_color))));
str_prefix_color = weechat_color (irc_nick_get_prefix_color_name (server, nick));
}
else
{
+3 -3
View File
@@ -55,9 +55,9 @@ extern int irc_nick_is_op (struct t_irc_server *server,
extern int irc_nick_has_prefix_mode (struct t_irc_server *server,
struct t_irc_nick *nick,
char prefix_mode);
extern int irc_nick_get_prefix_color (struct t_irc_server *server,
struct t_irc_nick *nick);
extern const char *irc_nick_get_prefix_color_name (int prefix_color);
extern const char *irc_nick_get_prefix_color_name (struct t_irc_server *server,
struct t_irc_nick *nick);
extern void irc_nick_nicklist_set_prefix_color_all ();
extern void irc_nick_nicklist_set_color_all ();
extern struct t_irc_nick *irc_nick_new (struct t_irc_server *server,
struct t_irc_channel *channel,
+16 -7
View File
@@ -3549,7 +3549,7 @@ IRC_PROTOCOL_CALLBACK(366)
struct t_config_option *ptr_option;
int num_nicks, num_op, num_halfop, num_voice, num_normal, length, i;
char *string;
const char *prefix, *nickname;
const char *prefix, *prefix_color, *nickname;
/*
* 366 message looks like:
@@ -3599,12 +3599,21 @@ IRC_PROTOCOL_CALLBACK(366)
prefix = weechat_infolist_string (infolist, "prefix");
if (prefix[0] && (prefix[0] != ' '))
{
weechat_config_search_with_string (weechat_infolist_string (infolist,
"prefix_color"),
NULL, NULL, &ptr_option,
NULL);
if (ptr_option)
strcat (string, weechat_color (weechat_config_string (ptr_option)));
prefix_color = weechat_infolist_string (infolist,
"prefix_color");
if (strchr (prefix_color, '.'))
{
weechat_config_search_with_string (weechat_infolist_string (infolist,
"prefix_color"),
NULL, NULL, &ptr_option,
NULL);
if (ptr_option)
strcat (string, weechat_color (weechat_config_string (ptr_option)));
}
else
{
strcat (string, weechat_color (prefix_color));
}
strcat (string, prefix);
}
nickname = weechat_infolist_string (infolist, "name");