From 0ed3b53bd2a160b81cf16d1b4915164138205eb2 Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 18 Feb 2016 21:53:20 +0000 Subject: [PATCH] Integrated plugins with /help command --- src/command/command.c | 5 ++++- src/command/commands.c | 42 +++++++++++++++++++++++++++++++---------- src/plugins/callbacks.c | 15 +++++++++++++++ src/plugins/plugins.h | 1 + src/ui/console.c | 1 + 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("");