mirror of
https://github.com/weechat/weechat.git
synced 2026-07-08 18:53:12 +02:00
api: add optional list of colors in infos "nick_color" and "nick_color_name" (closes #1565)
This commit is contained in:
+75
-66
@@ -242,97 +242,106 @@ gui_nick_strdup_for_color (const char *nickname)
|
||||
}
|
||||
|
||||
/*
|
||||
* Finds a color code for a nick (according to nick letters).
|
||||
* Finds a color name for a nick (according to nick letters).
|
||||
*
|
||||
* Returns a WeeChat color code (that can be used for display).
|
||||
* If colors is NULL (most common case), the color returned is either a forced
|
||||
* color (from option "weechat.look.nick_color_force") or a color from option
|
||||
* "weechat.color.chat_nick_colors".
|
||||
*
|
||||
* If colors is set and not empty, a color from this list is returned
|
||||
* (format of argument: comma-separated list of colors, a background is
|
||||
* allowed with format "fg:bg", for example: "blue,yellow:red" for blue and
|
||||
* yellow on red).
|
||||
*
|
||||
* Returns the name of a color (for example: "green").
|
||||
*
|
||||
* Note: result must be freed after use.
|
||||
*/
|
||||
|
||||
const char *
|
||||
gui_nick_find_color (const char *nickname)
|
||||
char *
|
||||
gui_nick_find_color_name (const char *nickname, const char *colors)
|
||||
{
|
||||
int color;
|
||||
char *nickname2;
|
||||
const char *forced_color, *str_color;
|
||||
int color, num_colors;
|
||||
char *nickname2, **list_colors, *result;
|
||||
const char *forced_color, *ptr_result;
|
||||
static char *default_color = "default";
|
||||
|
||||
list_colors = NULL;
|
||||
num_colors = 0;
|
||||
nickname2 = NULL;
|
||||
ptr_result = NULL;
|
||||
|
||||
if (!nickname || !nickname[0])
|
||||
return gui_color_get_custom ("default");
|
||||
goto end;
|
||||
|
||||
if (!config_nick_colors)
|
||||
config_set_nick_colors ();
|
||||
|
||||
if (config_num_nick_colors == 0)
|
||||
return gui_color_get_custom ("default");
|
||||
if (colors && colors[0])
|
||||
{
|
||||
list_colors = string_split (colors, ",", NULL, 0, 0, &num_colors);
|
||||
if (!list_colors || (num_colors == 0))
|
||||
goto end;
|
||||
}
|
||||
|
||||
nickname2 = gui_nick_strdup_for_color (nickname);
|
||||
|
||||
/* look if color is forced */
|
||||
forced_color = gui_nick_get_forced_color (
|
||||
(nickname2) ? nickname2 : nickname);
|
||||
if (forced_color)
|
||||
if (!list_colors)
|
||||
{
|
||||
forced_color = gui_color_get_custom (forced_color);
|
||||
if (forced_color && forced_color[0])
|
||||
/* look if color is forced for the nick */
|
||||
forced_color = gui_nick_get_forced_color (
|
||||
(nickname2) ? nickname2 : nickname);
|
||||
if (forced_color)
|
||||
{
|
||||
if (nickname2)
|
||||
free (nickname2);
|
||||
return forced_color;
|
||||
ptr_result = forced_color;
|
||||
goto end;
|
||||
}
|
||||
/* ensure nick colors are properly set */
|
||||
if (!config_nick_colors)
|
||||
config_set_nick_colors ();
|
||||
if (config_num_nick_colors == 0)
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* hash nickname to get color */
|
||||
color = gui_nick_hash_color ((nickname2) ? nickname2 : nickname,
|
||||
config_num_nick_colors);
|
||||
color = gui_nick_hash_color (
|
||||
(nickname2) ? nickname2 : nickname,
|
||||
(list_colors) ? num_colors : config_num_nick_colors);
|
||||
ptr_result = (list_colors) ?
|
||||
list_colors[color] : config_nick_colors[color];
|
||||
|
||||
end:
|
||||
result = strdup ((ptr_result) ? ptr_result : default_color);
|
||||
if (list_colors)
|
||||
string_free_split (list_colors);
|
||||
if (nickname2)
|
||||
free (nickname2);
|
||||
|
||||
/* return color */
|
||||
str_color = gui_color_get_custom (config_nick_colors[color]);
|
||||
return (str_color[0]) ? str_color : gui_color_get_custom ("default");
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Finds a color name for a nick (according to nick letters).
|
||||
* Finds a color code for a nick (according to nick letters).
|
||||
*
|
||||
* Returns the name of a color (for example: "green").
|
||||
* If colors is NULL (most common case), the color returned is either a forced
|
||||
* color (from option "weechat.look.nick_color_force") or a color from option
|
||||
* "weechat.color.chat_nick_colors".
|
||||
*
|
||||
* If colors is set and not empty, a color from this list is returned
|
||||
* (format of argument: comma-separated list of colors, a background is
|
||||
* allowed with format "fg:bg", for example: "blue,yellow:red" for blue and
|
||||
* yellow on red).
|
||||
*
|
||||
* Returns a WeeChat color code (that can be used for display).
|
||||
*
|
||||
* Note: result must be freed after use.
|
||||
*/
|
||||
|
||||
const char *
|
||||
gui_nick_find_color_name (const char *nickname)
|
||||
char *
|
||||
gui_nick_find_color (const char *nickname, const char *colors)
|
||||
{
|
||||
int color;
|
||||
char *nickname2;
|
||||
const char *forced_color;
|
||||
static char *default_color = "default";
|
||||
char *color;
|
||||
const char *ptr_result;
|
||||
|
||||
if (!nickname || !nickname[0])
|
||||
return default_color;
|
||||
|
||||
if (!config_nick_colors)
|
||||
config_set_nick_colors ();
|
||||
|
||||
if (config_num_nick_colors == 0)
|
||||
return default_color;
|
||||
|
||||
nickname2 = gui_nick_strdup_for_color (nickname);
|
||||
|
||||
/* look if color is forced */
|
||||
forced_color = gui_nick_get_forced_color (
|
||||
(nickname2) ? nickname2 : nickname);
|
||||
if (forced_color)
|
||||
{
|
||||
if (nickname2)
|
||||
free (nickname2);
|
||||
return forced_color;
|
||||
}
|
||||
|
||||
/* hash nickname to get color */
|
||||
color = gui_nick_hash_color ((nickname2) ? nickname2 : nickname,
|
||||
config_num_nick_colors);
|
||||
|
||||
if (nickname2)
|
||||
free (nickname2);
|
||||
|
||||
/* return color name */
|
||||
return config_nick_colors[color];
|
||||
color = gui_nick_find_color_name (nickname, colors);
|
||||
ptr_result = gui_color_get_custom (color);
|
||||
if (color)
|
||||
free (color);
|
||||
return (ptr_result) ? strdup (ptr_result) : NULL;
|
||||
}
|
||||
|
||||
+4
-2
@@ -20,7 +20,9 @@
|
||||
#ifndef WEECHAT_GUI_NICK_H
|
||||
#define WEECHAT_GUI_NICK_H
|
||||
|
||||
extern const char *gui_nick_find_color (const char *nickname);
|
||||
extern const char *gui_nick_find_color_name (const char *nickname);
|
||||
extern char *gui_nick_find_color_name (const char *nickname,
|
||||
const char *colors);
|
||||
extern char *gui_nick_find_color (const char *nickname,
|
||||
const char *colors);
|
||||
|
||||
#endif /* WEECHAT_GUI_NICK_H */
|
||||
|
||||
@@ -665,15 +665,24 @@ plugin_api_info_nick_color_cb (const void *pointer, void *data,
|
||||
const char *info_name,
|
||||
const char *arguments)
|
||||
{
|
||||
const char *ptr_color;
|
||||
char **items, *result;
|
||||
int num_items;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) pointer;
|
||||
(void) data;
|
||||
(void) info_name;
|
||||
|
||||
ptr_color = gui_nick_find_color (arguments);
|
||||
return (ptr_color) ? strdup (ptr_color) : NULL;
|
||||
items = string_split (arguments, ";", NULL, 0, 2, &num_items);
|
||||
|
||||
result = gui_nick_find_color (
|
||||
(num_items >= 1) ? items[0] : NULL,
|
||||
(num_items >= 2) ? items[1] : NULL);
|
||||
|
||||
if (items)
|
||||
string_free_split (items);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -685,15 +694,24 @@ plugin_api_info_nick_color_name_cb (const void *pointer, void *data,
|
||||
const char *info_name,
|
||||
const char *arguments)
|
||||
{
|
||||
const char *ptr_color;
|
||||
char **items, *result;
|
||||
int num_items;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) pointer;
|
||||
(void) data;
|
||||
(void) info_name;
|
||||
|
||||
ptr_color = gui_nick_find_color_name (arguments);
|
||||
return (ptr_color) ? strdup (ptr_color) : NULL;
|
||||
items = string_split (arguments, ";", NULL, 0, 2, &num_items);
|
||||
|
||||
result = gui_nick_find_color_name (
|
||||
(num_items >= 1) ? items[0] : NULL,
|
||||
(num_items >= 2) ? items[1] : NULL);
|
||||
|
||||
if (items)
|
||||
string_free_split (items);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1835,11 +1853,19 @@ plugin_api_info_init ()
|
||||
&plugin_api_info_color_rgb2term_cb, NULL, NULL);
|
||||
hook_info (NULL, "nick_color",
|
||||
N_("get nick color code"),
|
||||
N_("nickname"),
|
||||
N_("nickname;colors (colors is an optional comma-separated "
|
||||
"list of colors to use; background is allowed for a color "
|
||||
"with format text:background; if colors is present, WeeChat "
|
||||
"options with nick colors and forced nick colors are "
|
||||
"ignored)"),
|
||||
&plugin_api_info_nick_color_cb, NULL, NULL);
|
||||
hook_info (NULL, "nick_color_name",
|
||||
N_("get nick color name"),
|
||||
N_("nickname"),
|
||||
N_("nickname;colors (colors is an optional comma-separated "
|
||||
"list of colors to use; background is allowed for a color "
|
||||
"with format text:background; if colors is present, WeeChat "
|
||||
"options with nick colors and forced nick colors are "
|
||||
"ignored)"),
|
||||
&plugin_api_info_nick_color_name_cb, NULL, NULL);
|
||||
hook_info (NULL, "uptime",
|
||||
N_("WeeChat uptime (format: \"days:hh:mm:ss\")"),
|
||||
|
||||
@@ -67,7 +67,7 @@ struct timeval;
|
||||
* please change the date with current one; for a second change at same
|
||||
* date, increment the 01, otherwise please keep 01.
|
||||
*/
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20200823-01"
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20201004-01"
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
#define WEECHAT_PLUGIN_NAME(__name) \
|
||||
|
||||
Reference in New Issue
Block a user