about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c5
-rw-r--r--src/command/commands.c42
-rw-r--r--src/plugins/callbacks.c15
-rw-r--r--src/plugins/plugins.h1
-rw-r--r--src/ui/console.c1
5 files changed, 53 insertions, 11 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 3defbfee..82f6a4b0 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -127,6 +127,7 @@ GHashTable *commands = NULL;
 #define CMD_TAG_CONNECTION  "connection"
 #define CMD_TAG_DISCOVERY   "discovery"
 #define CMD_TAG_UI          "ui"
+#define CMD_TAG_PLUGINS     "plugins"
 
 #define CMD_NOTAGS          { { NULL },
 #define CMD_TAGS(...)       { { __VA_ARGS__, NULL },
@@ -2065,6 +2066,7 @@ cmd_init(void)
     autocomplete_add(help_commands_ac, "discovery");
     autocomplete_add(help_commands_ac, "connection");
     autocomplete_add(help_commands_ac, "ui");
+    autocomplete_add(help_commands_ac, "plugins");
 
     prefs_ac = autocomplete_new();
     autocomplete_add(prefs_ac, "ui");
@@ -2899,7 +2901,8 @@ cmd_valid_tag(const char *const str)
         (g_strcmp0(str, CMD_TAG_ROSTER) == 0) ||
         (g_strcmp0(str, CMD_TAG_DISCOVERY) == 0) ||
         (g_strcmp0(str, CMD_TAG_CONNECTION) == 0) ||
-        (g_strcmp0(str, CMD_TAG_UI) == 0));
+        (g_strcmp0(str, CMD_TAG_UI) == 0) ||
+        (g_strcmp0(str, CMD_TAG_PLUGINS) == 0));
 }
 
 gboolean
diff --git a/src/command/commands.c b/src/command/commands.c
index 9f9c099d..79b4def9 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1293,19 +1293,41 @@ _cmd_help_cmd_list(const char *const tag)
     }
 
     GList *ordered_commands = NULL;
-    GHashTableIter iter;
-    gpointer key;
-    gpointer value;
 
-    g_hash_table_iter_init(&iter, commands);
-    while (g_hash_table_iter_next(&iter, &key, &value)) {
-        Command *pcmd = (Command *)value;
-        if (tag) {
-            if (cmd_has_tag(pcmd, tag)) {
+    if (g_strcmp0(tag, "plugins") == 0) {
+        GList *plugins_cmds = plugins_get_command_names();
+        GList *curr = plugins_cmds;
+        while (curr) {
+            ordered_commands = g_list_insert_sorted(ordered_commands, curr->data, (GCompareFunc)g_strcmp0);
+            curr = g_list_next(curr);
+        }
+        g_list_free(plugins_cmds);
+    } else {
+        GHashTableIter iter;
+        gpointer key;
+        gpointer value;
+
+        g_hash_table_iter_init(&iter, commands);
+        while (g_hash_table_iter_next(&iter, &key, &value)) {
+            Command *pcmd = (Command *)value;
+            if (tag) {
+                if (cmd_has_tag(pcmd, tag)) {
+                    ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0);
+                }
+            } else {
                 ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0);
             }
-        } else {
-            ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0);
+        }
+
+        // add plugins if showing all commands
+        if (!tag) {
+            GList *plugins_cmds = plugins_get_command_names();
+            GList *curr = plugins_cmds;
+            while (curr) {
+                ordered_commands = g_list_insert_sorted(ordered_commands, curr->data, (GCompareFunc)g_strcmp0);
+                curr = g_list_next(curr);
+            }
+            g_list_free(plugins_cmds);
         }
     }
 
diff --git a/src/plugins/callbacks.c b/src/plugins/callbacks.c
index 7951904d..a3cbfc1d 100644
--- a/src/plugins/callbacks.c
+++ b/src/plugins/callbacks.c
@@ -143,3 +143,18 @@ plugins_run_timed(void)
     }
     return;
 }
+
+GList*
+plugins_get_command_names(void)
+{
+    GList *result = NULL;
+
+    GSList *curr = p_commands;
+    while (curr) {
+        PluginCommand *command = curr->data;
+        result = g_list_append(result, (char*)command->command_name);
+        curr = g_slist_next(curr);
+    }
+
+    return result;
+}
diff --git a/src/plugins/plugins.h b/src/plugins/plugins.h
index 5c513597..9a3e8e74 100644
--- a/src/plugins/plugins.h
+++ b/src/plugins/plugins.h
@@ -101,6 +101,7 @@ void  plugins_post_priv_message_send(const char * const jid, const char * const
 
 gboolean plugins_run_command(const char * const cmd);
 void plugins_run_timed(void);
+GList* plugins_get_command_names(void);
 gchar * plugins_get_dir(void);
 CommandHelp* plugins_get_help(const char *const cmd);
 
diff --git a/src/ui/console.c b/src/ui/console.c
index d58c699e..0ec1281e 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -2050,6 +2050,7 @@ cons_help(void)
     cons_show_padded(pad, "/help commands discovery  : List service discovery commands.");
     cons_show_padded(pad, "/help commands connection : List commands related to managing your connection.");
     cons_show_padded(pad, "/help commands ui         : List commands for manipulating the user interface.");
+    cons_show_padded(pad, "/help commands plugins    : List plugin commands.");
     cons_show_padded(pad, "/help [command]           : Detailed help on a specific command.");
     cons_show_padded(pad, "/help navigation          : How to navigate around Profanity.");
     cons_show("");