about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-08-14 22:06:27 +0100
committerJames Booth <boothj5@gmail.com>2012-08-14 22:06:27 +0100
commit9fd7b2b3c2a610433f4af688905d036990839589 (patch)
treefddc46da43084d526f7fc9df70168dca790c0def /src
parent4f4f780e60b8c08a13b9240129084cd697273a47 (diff)
downloadprofani-tty-9fd7b2b3c2a610433f4af688905d036990839589.tar.gz
Command help now looked up
No longer need to write help strings in windows.c
Usage and help are part of the command structure
Diffstat (limited to 'src')
-rw-r--r--src/command.c73
-rw-r--r--src/command.h9
-rw-r--r--src/windows.c48
3 files changed, 100 insertions, 30 deletions
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 <on/off>           : Enable/disable sound notification");
     cons_show("/notify <on/off>         : Enable/disable desktop notifications");
     cons_show("/flash <on/off>          : Enable/disable screen flash notification");
     cons_show("/showsplash <on/off>     : Enable/disable splash logo on startup");
     cons_show("/chlog <on/off>          : 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 <msg>              : Set status to away.");
     cons_show("/online <msg>            : Set status to online.");
     cons_show("/dnd <msg>               : Set status to dnd (do not disturb).");
     cons_show("/chat <msg>              : Set status to chat (available for chat).");
     cons_show("/xa <msg>                : Set status to xa (extended away).");
+*/
+
     cons_show("");
     cons_show("Navigation:");
     cons_show("");