--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmd-del-id Mon Apr 05 03:35:55 2010 +0300
@@ -0,0 +1,93 @@
+diff -r 35bc83be45cc mcabber/mcabber/commands.c
+--- a/mcabber/mcabber/commands.c Sun Apr 04 01:31:28 2010 +0300
++++ b/mcabber/mcabber/commands.c Mon Apr 05 03:34:53 2010 +0300
+@@ -100,26 +100,25 @@
+
+ static void do_module(char *arg);
+
+-gpointer cmd_del(const char *name)
++gpointer cmd_del(gpointer id)
+ {
+ GSList *sl_cmd;
+- for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next) {
+- cmd *command = (cmd *) sl_cmd->data;
+- if (!strcmp (command->name, name)) {
++ for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
++ if (sl_cmd -> data == id) {
++ cmd *command = (cmd *) sl_cmd->data;
+ gpointer userdata = command->userdata;
+ Commands = g_slist_delete_link(Commands, sl_cmd);
+ compl_del_category_word(COMPL_CMD, command->name);
+ g_free(command);
+ return userdata;
+ }
+- }
+ return NULL;
+ }
+
+ // cmd_add()
+ // Adds a command to the commands list and to the CMD completion list
+-void cmd_add(const char *name, const char *help, guint flags_row1,
+- guint flags_row2, void (*f)(char*), gpointer userdata)
++gpointer cmd_add(const char *name, const char *help, guint flags_row1,
++ guint flags_row2, void (*f)(char*), gpointer userdata)
+ #define cmd_add(A, B, C, D, E) cmd_add (A, B, C, D, E, NULL);
+ #else
+ static void cmd_add(const char *name, const char *help,
+@@ -138,6 +137,9 @@
+ Commands = g_slist_prepend(Commands, n_cmd);
+ // Add to completion CMD category
+ compl_add_category_word(COMPL_CMD, name);
++#ifdef MODULES_ENABLE
++ return n_cmd;
++#endif
+ }
+
+ // cmd_init()
+diff -r 35bc83be45cc mcabber/mcabber/commands.h
+--- a/mcabber/mcabber/commands.h Sun Apr 04 01:31:28 2010 +0300
++++ b/mcabber/mcabber/commands.h Mon Apr 05 03:34:53 2010 +0300
+@@ -23,8 +23,8 @@
+ char *expandalias(const char *line);
+ #ifdef MODULES_ENABLE
+ void cmd_deinit(void);
+-gpointer cmd_del(const char *name);
+-void cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata);
++gpointer cmd_del(gpointer id);
++gpointer cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata);
+ #endif
+
+ void cmd_room_whois(gpointer bud, char *nick_locale, guint interactive);
+diff -r 35bc83be45cc mcabber/modules/beep/beep.c
+--- a/mcabber/modules/beep/beep.c Sun Apr 04 01:31:28 2010 +0300
++++ b/mcabber/modules/beep/beep.c Mon Apr 05 03:34:53 2010 +0300
+@@ -46,8 +46,9 @@
+ .next = NULL,
+ };
+
+-static guint beep_cid = 0; /* Command completion category id */
+-static guint beep_hid = 0; /* Hook handler id */
++static guint beep_cid = 0; /* Command completion category id */
++static gpointer beep_cmid = 0; /* Command id */
++static guint beep_hid = 0; /* Hook handler id */
+
+ /* Event handler */
+ static guint beep_hh(const gchar *hookname, hk_arg_t *args, gpointer userdata)
+@@ -94,7 +95,7 @@
+ compl_add_category_word(beep_cid, "disable");
+ }
+ /* Add command */
+- cmd_add("beep", "", beep_cid, 0, do_beep, NULL);
++ beep_cmid = cmd_add("beep", "", beep_cid, 0, do_beep, NULL);
+ /* Add handler
+ * We are only interested in incoming message events
+ */
+@@ -108,7 +109,7 @@
+ /* Unregister event handler */
+ hk_del_handler(HOOK_POST_MESSAGE_IN, beep_hid);
+ /* Unregister command */
+- cmd_del("beep");
++ cmd_del(beep_cmid);
+ /* Give back completion handle */
+ if (beep_cid)
+ compl_del_category(beep_cid);