core: add callback "nickcmp" for nick comparison in buffers

v2.8-utf8proc
Sebastien Helleu 2012-06-14 20:06:42 +02:00
parent b5082902b4
commit d66555f387
11 changed files with 91 additions and 3 deletions

View File

@ -1,12 +1,13 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
v0.3.9-dev, 2012-06-10
v0.3.9-dev, 2012-06-14
Version 0.3.9 (under dev!)
--------------------------
* core: add callback "nickcmp" in buffers
* core: add horizontal separator between windows, new options
weechat.look.window_separator_{horizontal|vertical}
* core: add options weechat.look.color_nick_offline and

View File

@ -252,6 +252,8 @@
'nicklist_max_length' (integer) +
'nicklist_display_groups' (integer) +
'nicklist_visible_count' (integer) +
'nickcmp_callback' (pointer) +
'nickcmp_callback_data' (pointer) +
'input' (integer) +
'input_callback' (pointer) +
'input_callback_data' (pointer) +

View File

@ -252,6 +252,8 @@
'nicklist_max_length' (integer) +
'nicklist_display_groups' (integer) +
'nicklist_visible_count' (integer) +
'nickcmp_callback' (pointer) +
'nickcmp_callback_data' (pointer) +
'input' (integer) +
'input_callback' (pointer) +
'input_callback_data' (pointer) +

View File

@ -9879,6 +9879,21 @@ Arguments:
** 'close_callback_data': set close callback data
** 'input_callback': set input callback function
** 'input_callback_data': set input callback data
** 'nickcmp_callback': set nick comparison callback function (this callback is
called when searching nick in nicklist) (_new in version 0.3.9_)
** 'nickcmp_callback_data': set nick comparison callback data
(_new in version 0.3.9_)
Prototypes for callbacks:
[source,C]
----------------------------------------
int close_callback (void *data, struct t_gui_buffer *buffer);
int input_callback (void *data, struct t_gui_buffer *buffer, const char *input_data);
int nickcmp_callback (void *data, struct t_gui_buffer *buffer, const char *nick1, const char *nick2);
----------------------------------------
C example:

View File

@ -252,6 +252,8 @@
'nicklist_max_length' (integer) +
'nicklist_display_groups' (integer) +
'nicklist_visible_count' (integer) +
'nickcmp_callback' (pointer) +
'nickcmp_callback_data' (pointer) +
'input' (integer) +
'input_callback' (pointer) +
'input_callback_data' (pointer) +

View File

@ -10053,6 +10053,22 @@ Paramètres :
entrée
** 'input_callback_data' : définit les données pour le "callback" des données
en entrée
** 'nickcmp_callback' : définit la fonction "callback" de comparaison de pseudos
(ce "callback" est appelé lors de la recherche d'un pseudo dans la liste des
pseudos) (_nouveau dans la version 0.3.9_)
** 'nickcmp_callback_data': définit les données pour le "callback" de
comparaison de pseudos (_nouveau dans la version 0.3.9_)
Prototypes pour les "callbacks" :
[source,C]
----------------------------------------
int close_callback (void *data, struct t_gui_buffer *buffer);
int input_callback (void *data, struct t_gui_buffer *buffer, const char *input_data);
int nickcmp_callback (void *data, struct t_gui_buffer *buffer, const char *nick1, const char *nick2);
----------------------------------------
Exemple en C :

View File

@ -252,6 +252,8 @@
'nicklist_max_length' (integer) +
'nicklist_display_groups' (integer) +
'nicklist_visible_count' (integer) +
'nickcmp_callback' (pointer) +
'nickcmp_callback_data' (pointer) +
'input' (integer) +
'input_callback' (pointer) +
'input_callback_data' (pointer) +

View File

@ -9958,6 +9958,24 @@ Argomenti:
** 'close_callback_data': set close callback data
** 'input_callback': set input callback function
** 'input_callback_data': set input callback data
// TRANSLATION MISSING
** 'nickcmp_callback': set nick comparison callback function (this callback is
called when searching nick in nicklist) (_novità nella versione 0.3.9_)
// TRANSLATION MISSING
** 'nickcmp_callback_data': set nick comparison callback data
(_novità nella versione 0.3.9_)
// TRANSLATION MISSING
Prototypes for callbacks:
[source,C]
----------------------------------------
int close_callback (void *data, struct t_gui_buffer *buffer);
int input_callback (void *data, struct t_gui_buffer *buffer, const char *input_data);
int nickcmp_callback (void *data, struct t_gui_buffer *buffer, const char *nick1, const char *nick2);
----------------------------------------
Esempio in C:

View File

@ -494,6 +494,8 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
new_buffer->nicklist_max_length = 0;
new_buffer->nicklist_display_groups = 1;
new_buffer->nicklist_visible_count = 0;
new_buffer->nickcmp_callback = NULL;
new_buffer->nickcmp_callback_data = NULL;
gui_nicklist_add_group (new_buffer, NULL, "root", NULL, 0);
/* input */
@ -1678,6 +1680,14 @@ gui_buffer_set_pointer (struct t_gui_buffer *buffer, const char *property,
{
buffer->close_callback_data = pointer;
}
else if (string_strcasecmp (property, "nickcmp_callback") == 0)
{
buffer->nickcmp_callback = pointer;
}
else if (string_strcasecmp (property, "nickcmp_callback_data") == 0)
{
buffer->nickcmp_callback_data = pointer;
}
else if (string_strcasecmp (property, "input_callback") == 0)
{
buffer->input_callback = pointer;
@ -3114,6 +3124,8 @@ gui_buffer_hdata_buffer_cb (void *data, const char *hdata_name)
HDATA_VAR(struct t_gui_buffer, nicklist_max_length, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, nicklist_display_groups, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, nicklist_visible_count, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, nickcmp_callback, POINTER, NULL);
HDATA_VAR(struct t_gui_buffer, nickcmp_callback_data, POINTER, NULL);
HDATA_VAR(struct t_gui_buffer, input, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, input_callback, POINTER, NULL);
HDATA_VAR(struct t_gui_buffer, input_callback_data, POINTER, NULL);
@ -3464,6 +3476,8 @@ gui_buffer_print_log ()
log_printf (" nicklist_max_length . . : %d", ptr_buffer->nicklist_max_length);
log_printf (" nicklist_display_groups : %d", ptr_buffer->nicklist_display_groups);
log_printf (" nicklist_visible_count. : %d", ptr_buffer->nicklist_visible_count);
log_printf (" nickcmp_callback. . . . : 0x%lx", ptr_buffer->nickcmp_callback);
log_printf (" nickcmp_callback_data . : 0x%lx", ptr_buffer->nickcmp_callback_data);
log_printf (" input . . . . . . . . . : %d", ptr_buffer->input);
log_printf (" input_callback. . . . . : 0x%lx", ptr_buffer->input_callback);
log_printf (" input_callback_data . . : 0x%lx", ptr_buffer->input_callback_data);

View File

@ -114,6 +114,11 @@ struct t_gui_buffer
int nicklist_max_length; /* max length for a nick */
int nicklist_display_groups; /* display groups ? */
int nicklist_visible_count; /* number of nicks/groups to display */
int (*nickcmp_callback)(void *data, /* called to compare nicks (search */
struct t_gui_buffer *buffer, /* in nicklist) */
const char *nick1,
const char *nick2);
void *nickcmp_callback_data; /* data for callback */
/* inupt */
int input; /* = 1 if input is enabled */

View File

@ -345,8 +345,19 @@ gui_nicklist_search_nick (struct t_gui_buffer *buffer,
for (ptr_nick = (from_group) ? from_group->nicks : buffer->nicklist_root->nicks;
ptr_nick; ptr_nick = ptr_nick->next_nick)
{
if (strcmp (ptr_nick->name, name) == 0)
return ptr_nick;
if (buffer->nickcmp_callback)
{
if ((buffer->nickcmp_callback) (buffer->nickcmp_callback_data,
buffer,
ptr_nick->name,
name) == 0)
return ptr_nick;
}
else
{
if (strcmp (ptr_nick->name, name) == 0)
return ptr_nick;
}
}
/* search nick in child groups */