diff --git a/src/command.c b/src/command.c index e8b1a606..7825a77a 100644 --- a/src/command.c +++ b/src/command.c @@ -36,12 +36,6 @@ #include "prof_autocomplete.h" #include "tinyurl.h" -// command help strings -struct cmd_help_t { - const gchar *usage; - const gchar *short_help; -}; - /* command structure * cmd - The actual string of the command * func - The function to execute for the command @@ -84,17 +78,17 @@ static gboolean _cmd_default(const char * const inp); // The commands static struct cmd_t main_commands[] = { - { "/close", - _cmd_close, - { NULL, "Close current chat window." } }, - + { "/help", + _cmd_help, + { "/help", "This help." } }, + { "/connect", _cmd_connect, { "/connect user@host", "Login to jabber." } }, { "/prefs", _cmd_prefs, - { NULL, "Show current preferences." } }, + { "/prefs", "Show current preferences." } }, { "/msg", _cmd_msg, @@ -104,21 +98,21 @@ static struct cmd_t main_commands[] = _cmd_tiny, { "/tiny url", "Send url as tinyurl in current chat." } }, - { "/quit", - _cmd_quit, - { NULL, "Quit Profanity." } }, - { "/ros", _cmd_ros, - { NULL, "List all contacts." } }, + { "/ros", "List all contacts." } }, { "/who", _cmd_who, - { NULL, "Find out who is online." } }, + { "/who", "Find out who is online." } }, - { "/help", - _cmd_help, - { NULL, "This help." } } + { "/close", + _cmd_close, + { "/close", "Close current chat window." } }, + + { "/quit", + _cmd_quit, + { "/quit", "Quit Profanity." } } }; static struct cmd_t setting_commands[] = @@ -232,6 +226,45 @@ reset_command_completer(void) p_autocomplete_reset(commands_ac); } +GSList * +cmd_get_help_list_basic(void) +{ + GSList *result = NULL; + + unsigned int i; + for (i = 0; i < ARRAY_SIZE(main_commands); i++) { + result = g_slist_append(result, &((main_commands+i)->help)); + } + + return result; +} + +GSList * +cmd_get_help_list_settings(void) +{ + GSList *result = NULL; + + unsigned int i; + for (i = 0; i < ARRAY_SIZE(setting_commands); i++) { + result = g_slist_append(result, &((setting_commands+i)->help)); + } + + return result; +} + +GSList * +cmd_get_help_list_status(void) +{ + GSList *result = NULL; + + unsigned int i; + for (i = 0; i < ARRAY_SIZE(status_commands); i++) { + result = g_slist_append(result, &((status_commands+i)->help)); + } + + return result; +} + static gboolean _handle_command(const char * const command, const char * const inp) { diff --git a/src/command.h b/src/command.h index f2eef494..a18de2fc 100644 --- a/src/command.h +++ b/src/command.h @@ -23,9 +23,18 @@ #ifndef COMMAND_H #define COMMAND_H +// command help strings +struct cmd_help_t { + const gchar *usage; + const gchar *short_help; +}; + void command_init(void); gboolean process_input(char *inp); char * cmd_complete(char *inp); void reset_command_completer(void); +GSList * cmd_get_help_list_basic(void); +GSList * cmd_get_help_list_settings(void); +GSList * cmd_get_help_list_status(void); #endif diff --git a/src/windows.c b/src/windows.c index 6fc62ebe..27693b7c 100644 --- a/src/windows.c +++ b/src/windows.c @@ -33,6 +33,7 @@ #include "ui.h" #include "util.h" #include "contact.h" +#include "command.h" #include "preferences.h" #include "tinyurl.h" @@ -380,31 +381,58 @@ cons_help(void) cons_show(""); cons_show("Basic Commands:"); cons_show(""); - cons_show("/help : This help."); - cons_show("/prefs : Show current UI preferences."); - cons_show("/connect user@host : Login to jabber."); - cons_show("/msg user@host mesg : Send mesg to user."); - cons_show("/tiny url : Send url as tinyurl in current chat."); - cons_show("/close : Close a chat window."); - cons_show("/who : Find out who is online."); - cons_show("/ros : List all contacts."); - cons_show("/quit : Quit Profanity."); + + GSList *basic_helpers = cmd_get_help_list_basic(); + while (basic_helpers != NULL) { + struct cmd_help_t *help = (struct cmd_help_t *)basic_helpers->data; + char line[25 + 2 + strlen(help->short_help)]; + sprintf(line, "%-25s: %s", help->usage, help->short_help); + cons_show(line); + basic_helpers = g_slist_next(basic_helpers); + } + cons_show(""); cons_show("Settings:"); cons_show(""); + + GSList *settings_helpers = cmd_get_help_list_settings(); + while (settings_helpers != NULL) { + struct cmd_help_t *help = (struct cmd_help_t *)settings_helpers->data; + char line[25 + 2 + strlen(help->short_help)]; + sprintf(line, "%-25s: %s", help->usage, help->short_help); + cons_show(line); + settings_helpers = g_slist_next(settings_helpers); + } + +/* cons_show("/beep : Enable/disable sound notification"); cons_show("/notify : Enable/disable desktop notifications"); cons_show("/flash : Enable/disable screen flash notification"); cons_show("/showsplash : Enable/disable splash logo on startup"); cons_show("/chlog : Enable/disable chat logging"); +*/ + cons_show(""); - cons_show("Status changes (msg is optional):"); + cons_show("Status changes:"); cons_show(""); + + GSList *status_helpers = cmd_get_help_list_status(); + while (status_helpers != NULL) { + struct cmd_help_t *help = (struct cmd_help_t *)status_helpers->data; + char line[25 + 2 + strlen(help->short_help)]; + sprintf(line, "%-25s: %s", help->usage, help->short_help); + cons_show(line); + status_helpers = g_slist_next(status_helpers); + } + +/* cons_show("/away : Set status to away."); cons_show("/online : Set status to online."); cons_show("/dnd : Set status to dnd (do not disturb)."); cons_show("/chat : Set status to chat (available for chat)."); cons_show("/xa : Set status to xa (extended away)."); +*/ + cons_show(""); cons_show("Navigation:"); cons_show("");