diff --git a/src/tox-weechat-completion.c b/src/tox-weechat-completion.c index 7aa5b34..657b618 100644 --- a/src/tox-weechat-completion.c +++ b/src/tox-weechat-completion.c @@ -1,4 +1,5 @@ #include +#include #include @@ -7,20 +8,34 @@ #include "tox-weechat-completion.h" +enum +{ + TOX_WEECHAT_ALL_IDENTITIES, + TOX_WEECHAT_CONNECTED_IDENTITIES, + TOX_WEECHAT_DISCONNECTED_IDENTITIES, +}; + int tox_weechat_completion_identity(void *data, const char *completion_item, struct t_gui_buffer *buffer, struct t_gui_completion *completion) { + int flag = (int)(intptr_t)data; + for (struct t_tox_weechat_identity *identity = tox_weechat_identities; identity; identity = identity->next_identity) { - weechat_hook_completion_list_add(completion, - identity->name, - 0, - WEECHAT_LIST_POS_SORT); + if (flag == TOX_WEECHAT_ALL_IDENTITIES + || (flag == TOX_WEECHAT_CONNECTED_IDENTITIES && identity->tox != NULL) + || (flag == TOX_WEECHAT_DISCONNECTED_IDENTITIES && identity->tox == NULL)) + { + weechat_hook_completion_list_add(completion, + identity->name, + 0, + WEECHAT_LIST_POS_SORT); + } } return WEECHAT_RC_OK; @@ -31,5 +46,14 @@ tox_weechat_completion_init() { weechat_hook_completion("tox_identities", "identity", - tox_weechat_completion_identity, NULL); + tox_weechat_completion_identity, + (void *)(intptr_t)TOX_WEECHAT_ALL_IDENTITIES); + weechat_hook_completion("tox_connected_identities", + "identity", + tox_weechat_completion_identity, + (void *)(intptr_t)TOX_WEECHAT_CONNECTED_IDENTITIES); + weechat_hook_completion("tox_disconnected_identities", + "identity", + tox_weechat_completion_identity, + (void *)(intptr_t)TOX_WEECHAT_DISCONNECTED_IDENTITIES); }