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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user