diff --git a/src/plugins/irc/irc-buffer.c b/src/plugins/irc/irc-buffer.c index 37d731a35..0ee0b8932 100644 --- a/src/plugins/irc/irc-buffer.c +++ b/src/plugins/irc/irc-buffer.c @@ -160,6 +160,29 @@ irc_buffer_close_cb (void *data, struct t_gui_buffer *buffer) return WEECHAT_RC_OK; } +/* + * irc_buffer_nickcmp_cb: callback for comparing nick in nicklist + * (called when searching a nick in nicklist) + * Return (according to casemapping of irc server): + * 0 if nick1 == nick2 + * -1 if nick1 < nick2 + * +1 if nick1 > nick2 + */ + +int +irc_buffer_nickcmp_cb (void *data, + struct t_gui_buffer *buffer, + const char *nick1, + const char *nick2) +{ + IRC_BUFFER_GET_SERVER(buffer); + + /* make C compiler happy */ + (void) data; + + return irc_server_strcasecmp (ptr_server, nick1, nick2); +} + /* * irc_buffer_search_first_for_all_servers: search first server buffer that * will be used to merge all IRC diff --git a/src/plugins/irc/irc-buffer.h b/src/plugins/irc/irc-buffer.h index e7c6259bc..20aefcd80 100644 --- a/src/plugins/irc/irc-buffer.h +++ b/src/plugins/irc/irc-buffer.h @@ -53,6 +53,10 @@ extern void irc_buffer_get_server_and_channel (struct t_gui_buffer *buffer, struct t_irc_channel **channel); extern char *irc_buffer_build_name (const char *server, const char *channel); extern int irc_buffer_close_cb (void *data, struct t_gui_buffer *buffer); +extern int irc_buffer_nickcmp_cb (void *data, + struct t_gui_buffer *buffer, + const char *nick1, + const char *nick2); extern struct t_gui_buffer *irc_buffer_search_first_for_all_servers (); #endif /* __WEECHAT_IRC_BUFFER_H */ diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c index 626cd531c..ce2e33d5d 100644 --- a/src/plugins/irc/irc-channel.c +++ b/src/plugins/irc/irc-channel.c @@ -226,6 +226,8 @@ irc_channel_new (struct t_irc_server *server, int channel_type, { weechat_buffer_set (new_buffer, "nicklist", "1"); weechat_buffer_set (new_buffer, "nicklist_display_groups", "0"); + weechat_buffer_set_pointer (new_buffer, "nickcmp_callback", + &irc_buffer_nickcmp_cb); } /* set highlights settings on channel buffer */ diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c index a13da06b4..6af4f8b2b 100644 --- a/src/plugins/irc/irc-upgrade.c +++ b/src/plugins/irc/irc-upgrade.c @@ -240,6 +240,7 @@ irc_upgrade_set_buffer_callbacks () { struct t_infolist *infolist; struct t_gui_buffer *ptr_buffer; + const char *type; infolist = weechat_infolist_get ("buffer", NULL, NULL); if (infolist) @@ -251,6 +252,12 @@ irc_upgrade_set_buffer_callbacks () ptr_buffer = weechat_infolist_pointer (infolist, "pointer"); weechat_buffer_set_pointer (ptr_buffer, "close_callback", &irc_buffer_close_cb); weechat_buffer_set_pointer (ptr_buffer, "input_callback", &irc_input_data_cb); + type = weechat_buffer_get_string (ptr_buffer, "localvar_type"); + if (type && (strcmp (type, "channel") == 0)) + { + weechat_buffer_set_pointer (ptr_buffer, "nickcmp_callback", + &irc_buffer_nickcmp_cb); + } if (strcmp (weechat_infolist_string (infolist, "name"), IRC_RAW_BUFFER_NAME) == 0) {