changeset 757:ae23c8826efb

Improve completion for the "/event" command
author Mikael Berthe <mikael@lilotux.net>
date Tue, 14 Mar 2006 12:43:23 +0100
parents 12dc6bdff8c1
children 402b0e288433
files mcabber/src/commands.c mcabber/src/compl.c mcabber/src/compl.h mcabber/src/events.c mcabber/src/events.h
diffstat 5 files changed, 30 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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;
 }
--- 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);
--- 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... */
--- 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__ */