# HG changeset patch # User Mikael Berthe # Date 1142336603 -3600 # Node ID ae23c8826efb8957abad8372a9e2eb01cfd9641b # Parent 12dc6bdff8c188af3b1ca9496aae711eae71f8e1 Improve completion for the "/event" command diff -r 12dc6bdff8c1 -r ae23c8826efb mcabber/src/commands.c --- a/mcabber/src/commands.c Tue Mar 14 12:22:35 2006 +0100 +++ b/mcabber/src/commands.c Tue Mar 14 12:43:23 2006 +0100 @@ -94,7 +94,7 @@ cmd_add("connect", "Connect to the server", 0, 0, &do_connect); cmd_add("del", "Delete the current buddy", 0, 0, &do_del); cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect); - cmd_add("event", "Process an event", 0, COMPL_EVENTS, &do_event); + cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event); cmd_add("group", "Change group display settings", COMPL_GROUP, 0, &do_group); //cmd_add("help", "Display some help", COMPL_CMD, 0, NULL); cmd_add("info", "Show basic info on current buddy", 0, 0, &do_info); diff -r 12dc6bdff8c1 -r ae23c8826efb mcabber/src/compl.c --- a/mcabber/src/compl.c Tue Mar 14 12:22:35 2006 +0100 +++ b/mcabber/src/compl.c Tue Mar 14 12:43:23 2006 +0100 @@ -33,6 +33,7 @@ #include "compl.h" #include "roster.h" +#include "events.h" // Completion structure typedef struct { @@ -220,6 +221,9 @@ if (cat_flags == COMPL_RESOURCE) { return buddy_getresources(NULL); } + if (cat_flags == COMPL_EVENTSID) { + return evs_geteventscomplist(); + } return NULL; } diff -r 12dc6bdff8c1 -r ae23c8826efb mcabber/src/compl.h --- a/mcabber/src/compl.h Tue Mar 14 12:22:35 2006 +0100 +++ b/mcabber/src/compl.h Tue Mar 14 12:43:23 2006 +0100 @@ -19,6 +19,7 @@ #define COMPL_AUTH (1<<14) #define COMPL_REQUEST (1<<15) #define COMPL_EVENTS (1<<16) +#define COMPL_EVENTSID (1<<17) void compl_add_category_word(guint, const char *command); void compl_del_category_word(guint categ, const char *word); diff -r 12dc6bdff8c1 -r ae23c8826efb mcabber/src/events.c --- a/mcabber/src/events.c Tue Mar 14 12:22:35 2006 +0100 +++ b/mcabber/src/events.c Tue Mar 14 12:43:23 2006 +0100 @@ -149,4 +149,22 @@ scr_LogPrint(LPRINT_LOGNORM, "End of events list."); } +// evs_geteventscomplist() +// Return a singly-linked-list of events ids, for the completion system. +// Note: the caller should free the list (and data) after use. +GSList *evs_geteventscomplist(void) +{ + GSList *evidlist = NULL, *p; + eviqs *i; + + for (p = evs_list; p; p = g_slist_next(p)) { + i = p->data; + evidlist = g_slist_append(evidlist, g_strdup(i->id)); + } + + // Last item is the "list" subcommand. + evidlist = g_slist_append(evidlist, g_strdup("list")); + return evidlist; +} + /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ diff -r 12dc6bdff8c1 -r ae23c8826efb mcabber/src/events.h --- a/mcabber/src/events.h Tue Mar 14 12:22:35 2006 +0100 +++ b/mcabber/src/events.h Tue Mar 14 12:43:23 2006 +0100 @@ -27,11 +27,12 @@ char *desc; } eviqs; -eviqs *evs_new(guint8 type, time_t timeout); -int evs_del(const char *evid); -int evs_callback(const char *evid, guint evcontext); -void evs_check_timeout(time_t now_t); -void evs_display_list(void); +eviqs *evs_new(guint8 type, time_t timeout); +int evs_del(const char *evid); +int evs_callback(const char *evid, guint evcontext); +void evs_check_timeout(time_t now_t); +void evs_display_list(void); +GSList *evs_geteventscomplist(void); #endif /* __EVENTS_H__ */