about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-07-26 02:05:53 +0100
committerJames Booth <boothj5@gmail.com>2015-07-26 02:05:53 +0100
commit34537e2fb190505a7cf28ac5ca272f831c4b3b2e (patch)
tree7bec43e68e09655b0132257e00d702c44c9c2959 /src
parent36ebf0fc17f271e79445bfc320bef137bf3582bf (diff)
downloadprofani-tty-34537e2fb190505a7cf28ac5ca272f831c4b3b2e.tar.gz
Removed old command help
Diffstat (limited to 'src')
-rw-r--r--src/command/command.c162
-rw-r--r--src/command/commands.c484
-rw-r--r--src/command/commands.h164
-rw-r--r--src/ui/console.c12
-rw-r--r--src/ui/core.c15
-rw-r--r--src/ui/ui.h3
6 files changed, 414 insertions, 426 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 72b4a07a..e5cda05c 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -116,7 +116,7 @@ static struct cmd_t command_defs[] =
     // NEW STYLE
     { "/help",
         cmd_help, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/help [<area>|<command>]",
             NULL
@@ -135,7 +135,7 @@ static struct cmd_t command_defs[] =
 
     { "/about",
         cmd_about, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/about",
             NULL
@@ -149,7 +149,7 @@ static struct cmd_t command_defs[] =
 
     { "/connect",
         cmd_connect, parse_args, 0, 5, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/connect [<account>]",
             "/connect <account> [server <server>] [port <port>]",
@@ -174,7 +174,7 @@ static struct cmd_t command_defs[] =
 
     { "/disconnect",
         cmd_disconnect, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/disconnect",
             NULL
@@ -188,7 +188,7 @@ static struct cmd_t command_defs[] =
 
     { "/msg",
         cmd_msg, parse_args_with_freetext, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/msg <contact> [<message>]",
             "/msg <nick> [<message>]",
@@ -213,7 +213,7 @@ static struct cmd_t command_defs[] =
 
     { "/roster",
         cmd_roster, parse_args_with_freetext, 0, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/roster",
             "/roster online",
@@ -264,7 +264,7 @@ static struct cmd_t command_defs[] =
 
     { "/group",
         cmd_group, parse_args_with_freetext, 0, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/group",
             "/group show <group>",
@@ -289,7 +289,7 @@ static struct cmd_t command_defs[] =
 
     { "/info",
         cmd_info, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/info",
             "/info <contact>|<nick>",
@@ -310,7 +310,7 @@ static struct cmd_t command_defs[] =
 
     { "/caps",
         cmd_caps, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/caps",
             "/caps <fulljid>|<nick>",
@@ -331,7 +331,7 @@ static struct cmd_t command_defs[] =
 
     { "/software",
         cmd_software, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/software",
             "/software <fulljid>|<nick>",
@@ -353,7 +353,7 @@ static struct cmd_t command_defs[] =
 
     { "/status",
         cmd_status, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/status",
             "/status <contact>|<nick>",
@@ -373,7 +373,7 @@ static struct cmd_t command_defs[] =
 
     { "/resource",
         cmd_resource, parse_args, 1, 2, &cons_resource_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/resource set <resource>",
             "/resource off",
@@ -394,7 +394,7 @@ static struct cmd_t command_defs[] =
 
     { "/join",
         cmd_join, parse_args, 0, 5, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/join",
             "/join <room> [nick <nick>] [password <password>]",
@@ -421,7 +421,7 @@ static struct cmd_t command_defs[] =
 
     { "/leave",
         cmd_leave, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/leave",
             NULL
@@ -435,7 +435,7 @@ static struct cmd_t command_defs[] =
 
     { "/invite",
         cmd_invite, parse_args_with_freetext, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/invite <contact> [<message>]",
             NULL
@@ -451,7 +451,7 @@ static struct cmd_t command_defs[] =
 
     { "/invites",
         cmd_invites, parse_args_with_freetext, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/invites",
             NULL
@@ -465,7 +465,7 @@ static struct cmd_t command_defs[] =
 
     { "/decline",
         cmd_decline, parse_args_with_freetext, 1, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/decline <room>",
             NULL
@@ -480,7 +480,7 @@ static struct cmd_t command_defs[] =
 
     { "/room",
         cmd_room, parse_args, 1, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/room accept|destroy|config",
             NULL
@@ -497,7 +497,7 @@ static struct cmd_t command_defs[] =
 
     { "/kick",
         cmd_kick, parse_args_with_freetext, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/kick <nick> [<reason>]",
             NULL
@@ -513,7 +513,7 @@ static struct cmd_t command_defs[] =
 
     { "/ban",
         cmd_ban, parse_args_with_freetext, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/ban <jid> [<reason>]",
             NULL
@@ -529,7 +529,7 @@ static struct cmd_t command_defs[] =
 
     { "/subject",
         cmd_subject, parse_args_with_freetext, 0, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/subject set <subject>",
             "/subject clear",
@@ -546,7 +546,7 @@ static struct cmd_t command_defs[] =
 
     { "/affiliation",
         cmd_affiliation, parse_args_with_freetext, 1, 4, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/affiliation set <affiliation> <jid> [<reason>]",
             "/list [<affiliation>]",
@@ -564,7 +564,7 @@ static struct cmd_t command_defs[] =
 
     { "/role",
         cmd_role, parse_args_with_freetext, 1, 4, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/role set <role> <nick> [<reason>]",
             "/list [<role>]",
@@ -582,7 +582,7 @@ static struct cmd_t command_defs[] =
 
     { "/occupants",
         cmd_occupants, parse_args, 1, 3, cons_occupants_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/occupants show|hide [jid]",
             "/occupants default show|hide [jid]",
@@ -605,7 +605,7 @@ static struct cmd_t command_defs[] =
 
     { "/form",
         cmd_form, parse_args, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/form show",
             "/form submit",
@@ -626,7 +626,7 @@ static struct cmd_t command_defs[] =
 
     { "/rooms",
         cmd_rooms, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/rooms [<service>]",
             NULL
@@ -643,7 +643,7 @@ static struct cmd_t command_defs[] =
 
     { "/bookmark",
         cmd_bookmark, parse_args, 0, 8, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/bookmark",
             "/bookmark list",
@@ -671,7 +671,7 @@ static struct cmd_t command_defs[] =
 
     { "/disco",
         cmd_disco, parse_args, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/disco info [<jid>]",
             "/disco items [<jid>]",
@@ -693,7 +693,7 @@ static struct cmd_t command_defs[] =
 
     { "/nick",
         cmd_nick, parse_args_with_freetext, 1, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/nick <nickname>",
             NULL
@@ -708,7 +708,7 @@ static struct cmd_t command_defs[] =
 
     { "/win",
         cmd_win, parse_args, 1, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/win <num>",
             NULL
@@ -723,7 +723,7 @@ static struct cmd_t command_defs[] =
 
     { "/wins",
         cmd_wins, parse_args, 0, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/wins tidy",
             "/wins prune",
@@ -743,7 +743,7 @@ static struct cmd_t command_defs[] =
 
     { "/sub",
         cmd_sub, parse_args, 1, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/sub request [<jid>]",
             "/sub allow [<jid>]",
@@ -773,7 +773,7 @@ static struct cmd_t command_defs[] =
 
     { "/tiny",
         cmd_tiny, parse_args, 1, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/tiny <url>",
             NULL
@@ -789,7 +789,7 @@ static struct cmd_t command_defs[] =
 
     { "/who",
         cmd_who, parse_args, 0, 2, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/who",
             "/who online|offline|away|dnd|xa|chat|available|unavailable|any [<group>]",
@@ -820,7 +820,7 @@ static struct cmd_t command_defs[] =
 
     { "/close",
         cmd_close, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/close [<num>]",
             "/close all|read",
@@ -839,7 +839,7 @@ static struct cmd_t command_defs[] =
 
     { "/clear",
         cmd_clear, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/clear",
             NULL
@@ -853,7 +853,7 @@ static struct cmd_t command_defs[] =
 
     { "/quit",
         cmd_quit, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/quit",
             NULL
@@ -867,7 +867,7 @@ static struct cmd_t command_defs[] =
 
     { "/privileges",
         cmd_privileges, parse_args, 1, 1, &cons_privileges_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/privileges on|off",
             NULL
@@ -882,7 +882,7 @@ static struct cmd_t command_defs[] =
 
     { "/beep",
         cmd_beep, parse_args, 1, 1, &cons_beep_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/beep on|off",
             NULL
@@ -899,7 +899,7 @@ static struct cmd_t command_defs[] =
 
     { "/encwarn",
         cmd_encwarn, parse_args, 1, 1, &cons_encwarn_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/encwarn on|off",
             NULL
@@ -914,7 +914,7 @@ static struct cmd_t command_defs[] =
 
     { "/presence",
         cmd_presence, parse_args, 1, 1, &cons_presence_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/presence on|off",
             NULL
@@ -929,7 +929,7 @@ static struct cmd_t command_defs[] =
 
     { "/wrap",
         cmd_wrap, parse_args, 1, 1, &cons_wrap_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/wrap on|off",
             NULL
@@ -944,7 +944,7 @@ static struct cmd_t command_defs[] =
 
     { "/winstidy",
         cmd_winstidy, parse_args, 1, 1, &cons_winstidy_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/winstidy on|off",
             NULL
@@ -959,7 +959,7 @@ static struct cmd_t command_defs[] =
 
     { "/time",
         cmd_time, parse_args, 1, 3, &cons_time_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/time main set <format>",
             "/time main off",
@@ -987,7 +987,7 @@ static struct cmd_t command_defs[] =
 
     { "/inpblock",
         cmd_inpblock, parse_args, 2, 2, &cons_inpblock_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/inpblock timeout <millis>",
             "/inpblock dynamic on|off",
@@ -1004,7 +1004,7 @@ static struct cmd_t command_defs[] =
 
     { "/notify",
         cmd_notify, parse_args, 2, 3, &cons_notify_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/notify message on|off",
             "/notify message current on|off",
@@ -1047,7 +1047,7 @@ static struct cmd_t command_defs[] =
 
     { "/flash",
         cmd_flash, parse_args, 1, 1, &cons_flash_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/flash on|off",
             NULL
@@ -1063,7 +1063,7 @@ static struct cmd_t command_defs[] =
 
     { "/intype",
         cmd_intype, parse_args, 1, 1, &cons_intype_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/intype on|off",
             NULL
@@ -1079,7 +1079,7 @@ static struct cmd_t command_defs[] =
 
     { "/splash",
         cmd_splash, parse_args, 1, 1, &cons_splash_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/splash on|off",
             NULL
@@ -1094,7 +1094,7 @@ static struct cmd_t command_defs[] =
 
     { "/autoconnect",
         cmd_autoconnect, parse_args, 1, 2, &cons_autoconnect_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/autoconnect set <account>",
             "/autoconnect off",
@@ -1114,7 +1114,7 @@ static struct cmd_t command_defs[] =
 
     { "/vercheck",
         cmd_vercheck, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/vercheck on|off",
             NULL
@@ -1129,7 +1129,7 @@ static struct cmd_t command_defs[] =
 
     { "/titlebar",
         cmd_titlebar, parse_args, 2, 2, &cons_titlebar_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/titlebar show on|off",
             "/titlebar goodbye on|off",
@@ -1146,7 +1146,7 @@ static struct cmd_t command_defs[] =
 
     { "/alias",
         cmd_alias, parse_args_with_freetext, 1, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/alias list",
             "/alias add <name> <value>",
@@ -1170,7 +1170,7 @@ static struct cmd_t command_defs[] =
 
     { "/chlog",
         cmd_chlog, parse_args, 1, 1, &cons_chlog_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/chlog on|off",
             NULL
@@ -1188,7 +1188,7 @@ static struct cmd_t command_defs[] =
 
     { "/grlog",
         cmd_grlog, parse_args, 1, 1, &cons_grlog_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/grlog on|off",
             NULL
@@ -1204,7 +1204,7 @@ static struct cmd_t command_defs[] =
 
     { "/states",
         cmd_states, parse_args, 1, 1, &cons_states_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/states on|off",
             NULL
@@ -1219,7 +1219,7 @@ static struct cmd_t command_defs[] =
 
     { "/pgp",
         cmd_pgp, parse_args, 1, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/pgp libver",
             "/pgp keys",
@@ -1252,7 +1252,7 @@ static struct cmd_t command_defs[] =
 
     { "/otr",
         cmd_otr, parse_args, 1, 3, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/otr libver",
             "/otr gen",
@@ -1299,7 +1299,7 @@ static struct cmd_t command_defs[] =
 
     { "/outtype",
         cmd_outtype, parse_args, 1, 1, &cons_outtype_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/outtype on|off",
             NULL
@@ -1314,7 +1314,7 @@ static struct cmd_t command_defs[] =
 
     { "/gone",
         cmd_gone, parse_args, 1, 1, &cons_gone_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/gone <minutes>",
             NULL
@@ -1330,7 +1330,7 @@ static struct cmd_t command_defs[] =
 
     { "/history",
         cmd_history, parse_args, 1, 1, &cons_history_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/history on|off",
             NULL
@@ -1346,7 +1346,7 @@ static struct cmd_t command_defs[] =
 
     { "/log",
         cmd_log, parse_args, 1, 2, &cons_log_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/log where",
             "/log rotate on|off",
@@ -1367,7 +1367,7 @@ static struct cmd_t command_defs[] =
 
     { "/carbons",
         cmd_carbons, parse_args, 1, 1, &cons_carbons_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/carbons on|off",
             NULL
@@ -1383,7 +1383,7 @@ static struct cmd_t command_defs[] =
 
     { "/receipts",
         cmd_receipts, parse_args, 2, 2, &cons_receipts_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/receipts request on|off",
             "/receipts send on|off",
@@ -1400,7 +1400,7 @@ static struct cmd_t command_defs[] =
 
     { "/reconnect",
         cmd_reconnect, parse_args, 1, 1, &cons_reconnect_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/reconnect <seconds>",
             NULL
@@ -1415,7 +1415,7 @@ static struct cmd_t command_defs[] =
 
     { "/autoping",
         cmd_autoping, parse_args, 1, 1, &cons_autoping_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/autoping <seconds>",
             NULL
@@ -1430,7 +1430,7 @@ static struct cmd_t command_defs[] =
 
     { "/ping",
         cmd_ping, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/ping [<jid>]",
             NULL
@@ -1446,7 +1446,7 @@ static struct cmd_t command_defs[] =
 
     { "/autoaway",
         cmd_autoaway, parse_args_with_freetext, 2, 2, &cons_autoaway_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/autoaway mode idle|away|off",
             "/autoaway time <minutes>",
@@ -1474,7 +1474,7 @@ static struct cmd_t command_defs[] =
 
     { "/priority",
         cmd_priority, parse_args, 1, 1, &cons_priority_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/priority <priority>",
             NULL
@@ -1490,7 +1490,7 @@ static struct cmd_t command_defs[] =
 
     { "/account",
         cmd_account, parse_args, 0, 4, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/account",
             "/account list",
@@ -1567,7 +1567,7 @@ static struct cmd_t command_defs[] =
 
     { "/prefs",
         cmd_prefs, parse_args, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/prefs [ui|desktop|chat|log|conn|presence]",
             NULL
@@ -1588,7 +1588,7 @@ static struct cmd_t command_defs[] =
 
     { "/theme",
         cmd_theme, parse_args, 1, 2, &cons_theme_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/theme list",
             "/theme load <theme>",
@@ -1609,7 +1609,7 @@ static struct cmd_t command_defs[] =
 
     { "/statuses",
         cmd_statuses, parse_args, 2, 2, &cons_statuses_setting,
-        { NULL, NULL, { NULL },
+        {
         {
             "/statuses console|chat|muc all|online|none",
             NULL
@@ -1633,7 +1633,7 @@ static struct cmd_t command_defs[] =
 
     { "/xmlconsole",
         cmd_xmlconsole, parse_args, 0, 0, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/xmlconsole",
             NULL
@@ -1647,7 +1647,7 @@ static struct cmd_t command_defs[] =
 
     { "/away",
         cmd_away, parse_args_with_freetext, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/away [<message>]",
             NULL
@@ -1664,7 +1664,7 @@ static struct cmd_t command_defs[] =
 
     { "/chat",
         cmd_chat, parse_args_with_freetext, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/chat [<message>]",
             NULL
@@ -1681,7 +1681,7 @@ static struct cmd_t command_defs[] =
 
     { "/dnd",
         cmd_dnd, parse_args_with_freetext, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/dnd [<message>]",
             NULL
@@ -1698,7 +1698,7 @@ static struct cmd_t command_defs[] =
 
     { "/online",
         cmd_online, parse_args_with_freetext, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/online [<message>]",
             NULL
@@ -1715,7 +1715,7 @@ static struct cmd_t command_defs[] =
 
     { "/xa",
         cmd_xa, parse_args_with_freetext, 0, 1, NULL,
-        { NULL, NULL, { NULL },
+        {
         {
             "/xa [<message>]",
             NULL
@@ -2502,10 +2502,10 @@ _cmd_execute(ProfWin *window, const char * const command, const char * const inp
     if (cmd) {
         gchar **args = cmd->parser(inp, cmd->min_args, cmd->max_args, &result);
         if (result == FALSE) {
-            ui_invalid_command_usage(cmd->help.usage, cmd->setting_func);
+            ui_invalid_command_usage(cmd->cmd, cmd->setting_func);
             return TRUE;
         } else {
-            gboolean result = cmd->func(window, args, cmd->help);
+            gboolean result = cmd->func(window, args, command);
             g_strfreev(args);
             return result;
         }
diff --git a/src/command/commands.c b/src/command/commands.c
index f8979aec..6f12f502 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -73,11 +73,11 @@
 
 static void _update_presence(const resource_presence_t presence,
     const char * const show, gchar **args);
-static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
+static gboolean _cmd_set_boolean_preference(gchar *arg, const char * const command,
     const char * const display, preference_t pref);
 static void _cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filter_size);
-static void _who_room(ProfWin *window, gchar **args, struct cmd_help_t help);
-static void _who_roster(ProfWin *window, gchar **args, struct cmd_help_t help);
+static void _who_room(ProfWin *window, gchar **args, const char * const command);
+static void _who_roster(ProfWin *window, gchar **args, const char * const command);
 
 extern GHashTable *commands;
 
@@ -157,7 +157,7 @@ cmd_execute_alias(ProfWin *window, const char * const inp, gboolean *ran)
 }
 
 gboolean
-cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_connect(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     if ((conn_status != JABBER_DISCONNECTED) && (conn_status != JABBER_STARTED)) {
@@ -170,7 +170,7 @@ cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     GHashTable *options = parse_options(&args[args[0] ? 1 : 0], opt_keys, &parsed);
     if (!parsed) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         cons_show("");
         return TRUE;
     }
@@ -261,26 +261,26 @@ cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_account(ProfWin *window, gchar **args, const char * const command)
 {
-    char *command = args[0];
+    char *subcmd = args[0];
 
-    if (command == NULL) {
+    if (subcmd == NULL) {
         if (jabber_get_connection_status() != JABBER_CONNECTED) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             ProfAccount *account = accounts_get_account(jabber_get_account_name());
             cons_show_account(account);
             account_free(account);
         }
-    } else if (strcmp(command, "list") == 0) {
+    } else if (strcmp(subcmd, "list") == 0) {
         gchar **accounts = accounts_get_list();
         cons_show_account_list(accounts);
         g_strfreev(accounts);
-    } else if (strcmp(command, "show") == 0) {
+    } else if (strcmp(subcmd, "show") == 0) {
         char *account_name = args[1];
         if (account_name == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             ProfAccount *account = accounts_get_account(account_name);
             if (account == NULL) {
@@ -291,19 +291,19 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 account_free(account);
             }
         }
-    } else if (strcmp(command, "add") == 0) {
+    } else if (strcmp(subcmd, "add") == 0) {
         char *account_name = args[1];
         if (account_name == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             accounts_add(account_name, NULL, 0);
             cons_show("Account created.");
             cons_show("");
         }
-    } else if (strcmp(command, "remove") == 0) {
+    } else if (strcmp(subcmd, "remove") == 0) {
         char *account_name = args[1];
         if(!account_name) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             char *def = prefs_get_string(PREF_DEFAULT_ACCOUNT);
             if(accounts_remove(account_name)){
@@ -319,10 +319,10 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
             cons_show("");
             g_free(def);
         }
-    } else if (strcmp(command, "enable") == 0) {
+    } else if (strcmp(subcmd, "enable") == 0) {
         char *account_name = args[1];
         if (account_name == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             if (accounts_enable(account_name)) {
                 cons_show("Account enabled.");
@@ -332,10 +332,10 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 cons_show("");
             }
         }
-    } else if (strcmp(command, "disable") == 0) {
+    } else if (strcmp(subcmd, "disable") == 0) {
         char *account_name = args[1];
         if (account_name == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             if (accounts_disable(account_name)) {
                 cons_show("Account disabled.");
@@ -345,9 +345,9 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 cons_show("");
             }
         }
-    } else if (strcmp(command, "rename") == 0) {
+    } else if (strcmp(subcmd, "rename") == 0) {
         if (g_strv_length(args) != 3) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             char *account_name = args[1];
             char *new_name = args[2];
@@ -360,7 +360,7 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 cons_show("");
             }
         }
-    } else if (strcmp(command, "default") == 0) {
+    } else if (strcmp(subcmd, "default") == 0) {
         if(g_strv_length(args) == 1){
             char *def = prefs_get_string(PREF_DEFAULT_ACCOUNT);
 
@@ -375,7 +375,7 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 prefs_set_string(PREF_DEFAULT_ACCOUNT, NULL);
                 cons_show("Removed default account.");
             } else {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
             }
         } else if(g_strv_length(args) == 3) {
             if(strcmp(args[1], "set") == 0){
@@ -386,14 +386,14 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                     cons_show("Account %s does not exist.", args[2]);
                 }
             } else {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
             }
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         }
-    } else if (strcmp(command, "set") == 0) {
+    } else if (strcmp(subcmd, "set") == 0) {
         if (g_strv_length(args) != 4) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             char *account_name = args[1];
             char *property = args[2];
@@ -536,9 +536,9 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
                 }
             }
         }
-    } else if (strcmp(command, "clear") == 0) {
+    } else if (strcmp(subcmd, "clear") == 0) {
         if (g_strv_length(args) != 3) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             char *account_name = args[1];
             char *property = args[2];
@@ -578,6 +578,7 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
         }
     } else {
+        cons_bad_cmd_usage(command);
         cons_show("");
     }
 
@@ -585,7 +586,7 @@ cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_sub(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_sub(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -599,7 +600,7 @@ cmd_sub(ProfWin *window, gchar **args, struct cmd_help_t help)
     jid = args[1];
 
     if (subcmd == NULL) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -666,7 +667,7 @@ cmd_sub(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
         }
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
 
     jid_destroy(jidp);
@@ -675,7 +676,7 @@ cmd_sub(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_disconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_disconnect(ProfWin *window, gchar **args, const char * const command)
 {
     if (jabber_get_connection_status() == JABBER_CONNECTED) {
         char *jid = strdup(jabber_get_fulljid());
@@ -697,7 +698,7 @@ cmd_disconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_quit(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_quit(ProfWin *window, gchar **args, const char * const command)
 {
     log_info("Profanity is shutting down...");
     exit(0);
@@ -705,7 +706,7 @@ cmd_quit(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_wins(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_wins(ProfWin *window, gchar **args, const char * const command)
 {
     if (args[0] == NULL) {
         cons_show_wins();
@@ -719,7 +720,7 @@ cmd_wins(ProfWin *window, gchar **args, struct cmd_help_t help)
         ui_prune_wins();
     } else if (strcmp(args[0], "swap") == 0) {
         if ((args[1] == NULL) || (args[2] == NULL)) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             int source_win = atoi(args[1]);
             int target_win = atoi(args[2]);
@@ -744,9 +745,9 @@ cmd_wins(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_winstidy(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_winstidy(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help, "Wins Auto Tidy", PREF_WINS_AUTO_TIDY);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Wins Auto Tidy", PREF_WINS_AUTO_TIDY);
 
     if (result && g_strcmp0(args[0], "on") == 0) {
         ui_tidy_wins();
@@ -756,7 +757,7 @@ cmd_winstidy(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_win(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_win(ProfWin *window, gchar **args, const char * const command)
 {
     int num = atoi(args[0]);
 
@@ -771,7 +772,7 @@ cmd_win(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_help(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_help(ProfWin *window, gchar **args, const char * const command)
 {
     int num_args = g_strv_length(args);
     if (num_args == 0) {
@@ -874,17 +875,7 @@ cmd_help(ProfWin *window, gchar **args, struct cmd_help_t help)
 
         Command *command = g_hash_table_lookup(commands, cmd_with_slash);
         if (command) {
-            // old
-            if (command->help.usage) {
-                const gchar **help_text = command->help.long_help;
-                ProfWin *console = wins_get_console();
-                cons_show("");
-                ui_show_lines(console, help_text);
-
-            // new
-            } else {
-                cons_show_help(command);
-            }
+            cons_show_help(command);
         } else {
             cons_show("No such command.");
         }
@@ -895,14 +886,14 @@ cmd_help(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_about(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_about(ProfWin *window, gchar **args, const char * const command)
 {
     ui_about();
     return TRUE;
 }
 
 gboolean
-cmd_prefs(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_prefs(ProfWin *window, gchar **args, const char * const command)
 {
     if (args[0] == NULL) {
         cons_prefs();
@@ -940,14 +931,14 @@ cmd_prefs(ProfWin *window, gchar **args, struct cmd_help_t help)
         cons_show_pgp_prefs();
         cons_show("");
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
 
     return TRUE;
 }
 
 gboolean
-cmd_theme(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_theme(ProfWin *window, gchar **args, const char * const command)
 {
     // list themes
     if (g_strcmp0(args[0], "list") == 0) {
@@ -958,7 +949,7 @@ cmd_theme(ProfWin *window, gchar **args, struct cmd_help_t help)
     // load a theme
     } else if (g_strcmp0(args[0], "load") == 0) {
         if (args[1] == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else if (theme_load(args[1])) {
             ui_load_colours();
             prefs_set_string(PREF_THEME, args[1]);
@@ -982,14 +973,14 @@ cmd_theme(ProfWin *window, gchar **args, struct cmd_help_t help)
     } else if (g_strcmp0(args[0], "colours") == 0) {
         cons_theme_colours();
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
 
     return TRUE;
 }
 
 static void
-_who_room(ProfWin *window, gchar **args, struct cmd_help_t help)
+_who_room(ProfWin *window, gchar **args, const char * const command)
 {
     if ((g_strv_length(args) == 2) && args[1]) {
         cons_show("Argument group is not applicable to chat rooms.");
@@ -1013,7 +1004,7 @@ _who_room(ProfWin *window, gchar **args, struct cmd_help_t help)
             (g_strcmp0(args[0], "admin") != 0) &&
             (g_strcmp0(args[0], "member") != 0) &&
             (g_strcmp0(args[0], "outcast") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return;
     }
 
@@ -1119,7 +1110,7 @@ _who_room(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 static void
-_who_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
+_who_roster(ProfWin *window, gchar **args, const char * const command)
 {
     char *presence = args[0];
 
@@ -1134,7 +1125,7 @@ _who_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
             && (strcmp(presence, "xa") != 0)
             && (strcmp(presence, "dnd") != 0)
             && (strcmp(presence, "any") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return;
     }
 
@@ -1332,16 +1323,16 @@ _who_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_who(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_who(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
     } else if (window->type == WIN_MUC) {
-        _who_room(window, args, help);
+        _who_room(window, args, command);
     } else {
-        _who_roster(window, args, help);
+        _who_roster(window, args, command);
     }
 
     if (window->type != WIN_CONSOLE && window->type != WIN_MUC) {
@@ -1352,7 +1343,7 @@ cmd_who(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_msg(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_msg(ProfWin *window, gchar **args, const char * const command)
 {
     char *usr = args[0];
     char *msg = args[1];
@@ -1419,7 +1410,7 @@ cmd_msg(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_group(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -1450,7 +1441,7 @@ cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help)
     if (strcmp(args[0], "show") == 0) {
         char *group = args[1];
         if (group == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1465,7 +1456,7 @@ cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help)
         char *contact = args[2];
 
         if ((group == NULL) || (contact == NULL)) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1496,7 +1487,7 @@ cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help)
         char *contact = args[2];
 
         if ((group == NULL) || (contact == NULL)) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1521,12 +1512,12 @@ cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help)
         return TRUE;
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
     return TRUE;
 }
 
 gboolean
-cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_roster(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -1557,7 +1548,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
     // set roster size
     } else if (g_strcmp0(args[0], "size") == 0) {
         if (!args[1]) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
         int intval = 0;
@@ -1607,7 +1598,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     } else if (g_strcmp0(args[0], "hide") == 0) {
@@ -1640,7 +1631,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     // roster grouping
@@ -1667,7 +1658,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     // add contact
@@ -1678,7 +1669,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
         char *jid = args[1];
         if (jid == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             char *name = args[2];
             roster_send_add_new(jid, name);
@@ -1693,7 +1684,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
         char *jid = args[1];
         if (jid == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         } else {
             roster_send_remove(jid);
         }
@@ -1701,7 +1692,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     } else if (strcmp(args[0], "remove_all") == 0) {
         if (g_strcmp0(args[1], "contacts") != 0) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
         if (conn_status != JABBER_CONNECTED) {
@@ -1728,13 +1719,13 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
         char *jid = args[1];
         if (jid == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
         char *name = args[2];
         if (name == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1762,7 +1753,7 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
         char *jid = args[1];
         if (jid == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1782,31 +1773,31 @@ cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help)
 
         return TRUE;
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 }
 
 gboolean
-cmd_resource(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_resource(ProfWin *window, gchar **args, const char * const command)
 {
     char *cmd = args[0];
     char *setting = NULL;
     if (g_strcmp0(cmd, "message") == 0) {
         setting = args[1];
         if (!setting) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
-            return _cmd_set_boolean_preference(setting, help, "Message resource", PREF_RESOURCE_MESSAGE);
+            return _cmd_set_boolean_preference(setting, command, "Message resource", PREF_RESOURCE_MESSAGE);
         }
     } else if (g_strcmp0(cmd, "title") == 0) {
         setting = args[1];
         if (!setting) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
-            return _cmd_set_boolean_preference(setting, help, "Title resource", PREF_RESOURCE_TITLE);
+            return _cmd_set_boolean_preference(setting, command, "Title resource", PREF_RESOURCE_TITLE);
         }
     }
 
@@ -1819,7 +1810,7 @@ cmd_resource(ProfWin *window, gchar **args, struct cmd_help_t help)
     if (g_strcmp0(cmd, "set") == 0) {
         char *resource = args[1];
         if (!resource) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -1854,13 +1845,13 @@ cmd_resource(ProfWin *window, gchar **args, struct cmd_help_t help)
         chat_session_remove(chatwin->barejid);
         return TRUE;
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 }
 
 gboolean
-cmd_status(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_status(ProfWin *window, gchar **args, const char * const command)
 {
     char *usr = args[0];
 
@@ -1925,7 +1916,7 @@ cmd_status(ProfWin *window, gchar **args, struct cmd_help_t help)
                 }
                 cons_show_status(usr_jid);
             } else {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
             }
             break;
         default:
@@ -1936,7 +1927,7 @@ cmd_status(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_info(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_info(ProfWin *window, gchar **args, const char * const command)
 {
     char *usr = args[0];
 
@@ -2011,7 +2002,7 @@ cmd_info(ProfWin *window, gchar **args, struct cmd_help_t help)
                     cons_show("No such contact \"%s\" in roster.", usr);
                 }
             } else {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
             }
             break;
         default:
@@ -2022,7 +2013,7 @@ cmd_info(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_caps(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_caps(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     PContact pcontact = NULL;
@@ -2099,7 +2090,7 @@ cmd_caps(ProfWin *window, gchar **args, struct cmd_help_t help)
 
 
 gboolean
-cmd_software(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_software(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     Occupant *occupant = NULL;
@@ -2163,7 +2154,7 @@ cmd_software(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_join(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_join(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     if (conn_status != JABBER_CONNECTED) {
@@ -2225,7 +2216,7 @@ cmd_join(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     GHashTable *options = parse_options(&args[1], opt_keys, &parsed);
     if (!parsed) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         cons_show("");
         jid_destroy(room_arg);
         return TRUE;
@@ -2261,7 +2252,7 @@ cmd_join(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_invite(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_invite(ProfWin *window, gchar **args, const char * const command)
 {
     char *contact = args[0];
     char *reason = args[1];
@@ -2297,7 +2288,7 @@ cmd_invite(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_invites(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_invites(ProfWin *window, gchar **args, const char * const command)
 {
     GSList *invites = muc_invites();
     cons_show_room_invites(invites);
@@ -2306,7 +2297,7 @@ cmd_invites(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_decline(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_decline(ProfWin *window, gchar **args, const char * const command)
 {
     if (!muc_invites_contain(args[0])) {
         cons_show("No such invite exists.");
@@ -2537,7 +2528,7 @@ cmd_form_field(ProfWin *window, char *tag, gchar **args)
 }
 
 gboolean
-cmd_form(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_form(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2555,7 +2546,7 @@ cmd_form(ProfWin *window, gchar **args, struct cmd_help_t help)
             (g_strcmp0(args[0], "cancel") != 0) &&
             (g_strcmp0(args[0], "show") != 0) &&
             (g_strcmp0(args[0], "help") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2578,7 +2569,7 @@ cmd_form(ProfWin *window, gchar **args, struct cmd_help_t help)
             Command *command = g_hash_table_lookup(commands, "/form");
 
             if (command) {
-                help_text = command->help.long_help;
+                help_text = command->help.synopsis;
             }
 
             ui_show_lines((ProfWin*) confwin, help_text);
@@ -2611,7 +2602,7 @@ cmd_form(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_kick(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_kick(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2637,14 +2628,14 @@ cmd_kick(ProfWin *window, gchar **args, struct cmd_help_t help)
             win_vprint((ProfWin*) mucwin, '!', NULL, 0, 0, "", "Occupant does not exist: %s", nick);
         }
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
 
     return TRUE;
 }
 
 gboolean
-cmd_ban(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_ban(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2666,13 +2657,13 @@ cmd_ban(ProfWin *window, gchar **args, struct cmd_help_t help)
         char *reason = args[1];
         iq_room_affiliation_set(mucwin->roomjid, jid, "outcast", reason);
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
     return TRUE;
 }
 
 gboolean
-cmd_subject(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_subject(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2704,7 +2695,7 @@ cmd_subject(ProfWin *window, gchar **args, struct cmd_help_t help)
         if (args[1]) {
             message_send_groupchat_subject(mucwin->roomjid, args[1]);
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         }
         return TRUE;
     }
@@ -2714,12 +2705,12 @@ cmd_subject(ProfWin *window, gchar **args, struct cmd_help_t help)
         return TRUE;
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
     return TRUE;
 }
 
 gboolean
-cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_affiliation(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2735,7 +2726,7 @@ cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     char *cmd = args[0];
     if (cmd == NULL) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2746,7 +2737,7 @@ cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help)
             (g_strcmp0(affiliation, "member") != 0) &&
             (g_strcmp0(affiliation, "none") != 0) &&
             (g_strcmp0(affiliation, "outcast") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2769,13 +2760,13 @@ cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     if (g_strcmp0(cmd, "set") == 0) {
         if (!affiliation) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
         char *jid = args[2];
         if (jid == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
             char *reason = args[3];
@@ -2784,12 +2775,12 @@ cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
     return TRUE;
 }
 
 gboolean
-cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_role(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2805,7 +2796,7 @@ cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     char *cmd = args[0];
     if (cmd == NULL) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2815,7 +2806,7 @@ cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help)
             (g_strcmp0(role, "participant") != 0) &&
             (g_strcmp0(role, "moderator") != 0) &&
             (g_strcmp0(role, "none") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2837,13 +2828,13 @@ cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     if (g_strcmp0(cmd, "set") == 0) {
         if (!role) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
         char *nick = args[2];
         if (nick == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
             char *reason = args[3];
@@ -2852,12 +2843,12 @@ cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
     return TRUE;
 }
 
 gboolean
-cmd_room(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_room(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2874,7 +2865,7 @@ cmd_room(ProfWin *window, gchar **args, struct cmd_help_t help)
     if ((g_strcmp0(args[0], "accept") != 0) &&
             (g_strcmp0(args[0], "destroy") != 0) &&
             (g_strcmp0(args[0], "config") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -2920,7 +2911,7 @@ cmd_room(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_occupants(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_occupants(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -2931,7 +2922,7 @@ cmd_occupants(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     if (g_strcmp0(args[0], "size") == 0) {
         if (!args[1]) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
             int intval = 0;
@@ -2970,7 +2961,7 @@ cmd_occupants(ProfWin *window, gchar **args, struct cmd_help_t help)
             }
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     }
@@ -2998,14 +2989,14 @@ cmd_occupants(ProfWin *window, gchar **args, struct cmd_help_t help)
             ui_room_hide_occupants(mucwin->roomjid);
         }
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
 
     return TRUE;
 }
 
 gboolean
-cmd_rooms(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_rooms(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3026,7 +3017,7 @@ cmd_rooms(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_bookmark(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3052,7 +3043,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     } else {
         if (cmd == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -3062,7 +3053,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
         } else {
             char *jid = args[1];
             if (jid == NULL) {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
                 cons_show("");
                 return TRUE;
             }
@@ -3090,7 +3081,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
 
             GHashTable *options = parse_options(&args[2], opt_keys, &parsed);
             if (!parsed) {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
                 cons_show("");
                 return TRUE;
             }
@@ -3101,7 +3092,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
 
             if (autojoin) {
                 if ((strcmp(autojoin, "on") != 0) && (strcmp(autojoin, "off") != 0)) {
-                    cons_show("Usage: %s", help.usage);
+                    cons_bad_cmd_usage(command);
                     cons_show("");
                     return TRUE;
                 }
@@ -3126,7 +3117,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
                     cons_show("No bookmark exists for %s.", jid);
                 }
             } else {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
             }
 
             options_destroy(options);
@@ -3137,7 +3128,7 @@ cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_disco(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_disco(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3167,7 +3158,7 @@ cmd_disco(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_nick(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_nick(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3189,14 +3180,14 @@ cmd_nick(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_alias(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_alias(ProfWin *window, gchar **args, const char * const command)
 {
     char *subcmd = args[0];
 
     if (strcmp(subcmd, "add") == 0) {
         char *alias = args[1];
         if (alias == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
             char *alias_p = alias;
@@ -3211,7 +3202,7 @@ cmd_alias(ProfWin *window, gchar **args, struct cmd_help_t help)
 
             char *value = args[2];
             if (value == NULL) {
-                cons_show("Usage: %s", help.usage);
+                cons_bad_cmd_usage(command);
                 g_string_free(ac_value, TRUE);
                 return TRUE;
             } else if (cmd_exists(ac_value->str)) {
@@ -3230,7 +3221,7 @@ cmd_alias(ProfWin *window, gchar **args, struct cmd_help_t help)
     } else if (strcmp(subcmd, "remove") == 0) {
         char *alias = args[1];
         if (alias == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         } else {
             if (alias[0] == '/') {
@@ -3255,13 +3246,13 @@ cmd_alias(ProfWin *window, gchar **args, struct cmd_help_t help)
         prefs_free_aliases(aliases);
         return TRUE;
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 }
 
 gboolean
-cmd_tiny(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_tiny(ProfWin *window, gchar **args, const char * const command)
 {
     char *url = args[0];
 
@@ -3313,14 +3304,14 @@ cmd_tiny(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_clear(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_clear(ProfWin *window, gchar **args, const char * const command)
 {
     ui_clear_win(window);
     return TRUE;
 }
 
 gboolean
-cmd_close(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_close(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     int index = 0;
@@ -3392,7 +3383,7 @@ cmd_close(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_leave(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_leave(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
     int index = wins_get_current_num();
@@ -3415,9 +3406,9 @@ cmd_leave(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_privileges(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_privileges(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help, "MUC privileges", PREF_MUC_PRIVILEGES);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "MUC privileges", PREF_MUC_PRIVILEGES);
 
     ui_redraw_all_room_rosters();
 
@@ -3425,21 +3416,21 @@ cmd_privileges(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_beep(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_beep(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help, "Sound", PREF_BEEP);
+    return _cmd_set_boolean_preference(args[0], command, "Sound", PREF_BEEP);
 }
 
 gboolean
-cmd_presence(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_presence(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help, "Contact presence", PREF_PRESENCE);
+    return _cmd_set_boolean_preference(args[0], command, "Contact presence", PREF_PRESENCE);
 }
 
 gboolean
-cmd_wrap(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_wrap(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help, "Word wrap", PREF_WRAP);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Word wrap", PREF_WRAP);
 
     wins_resize_all();
 
@@ -3447,7 +3438,7 @@ cmd_wrap(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_time(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_time(ProfWin *window, gchar **args, const char * const command)
 {
     if (g_strcmp0(args[0], "statusbar") == 0) {
         if (args[1] == NULL) {
@@ -3464,7 +3455,7 @@ cmd_time(ProfWin *window, gchar **args, struct cmd_help_t help)
             ui_redraw();
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     } else if (g_strcmp0(args[0], "main") == 0) {
@@ -3482,19 +3473,19 @@ cmd_time(ProfWin *window, gchar **args, struct cmd_help_t help)
             wins_resize_all();
             return TRUE;
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 }
 
 gboolean
-cmd_states(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_states(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help, "Sending chat states",
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Sending chat states",
         PREF_STATES);
 
     // if disabled, disable outtype and gone
@@ -3507,26 +3498,26 @@ cmd_states(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_titlebar(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_titlebar(ProfWin *window, gchar **args, const char * const command)
 {
     if (g_strcmp0(args[0], "show") != 0 && g_strcmp0(args[0], "goodbye") != 0) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
     if (g_strcmp0(args[0], "show") == 0 && g_strcmp0(args[1], "off") == 0) {
         ui_clear_win_title();
     }
     if (g_strcmp0(args[0], "show") == 0) {
-        return _cmd_set_boolean_preference(args[1], help, "Titlebar show", PREF_TITLEBAR_SHOW);
+        return _cmd_set_boolean_preference(args[1], command, "Titlebar show", PREF_TITLEBAR_SHOW);
     } else {
-        return _cmd_set_boolean_preference(args[1], help, "Titlebar goodbye", PREF_TITLEBAR_GOODBYE);
+        return _cmd_set_boolean_preference(args[1], command, "Titlebar goodbye", PREF_TITLEBAR_GOODBYE);
     }
 }
 
 gboolean
-cmd_outtype(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_outtype(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help,
+    gboolean result = _cmd_set_boolean_preference(args[0], command,
         "Sending typing notifications", PREF_OUTTYPE);
 
     // if enabled, enable states
@@ -3538,7 +3529,7 @@ cmd_outtype(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_gone(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_gone(ProfWin *window, gchar **args, const char * const command)
 {
     char *value = args[0];
 
@@ -3562,7 +3553,7 @@ cmd_gone(ProfWin *window, gchar **args, struct cmd_help_t help)
 
 
 gboolean
-cmd_notify(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_notify(ProfWin *window, gchar **args, const char * const command)
 {
     char *kind = args[0];
 
@@ -3570,7 +3561,7 @@ cmd_notify(ProfWin *window, gchar **args, struct cmd_help_t help)
     if ((strcmp(kind, "message") != 0) && (strcmp(kind, "typing") != 0) &&
             (strcmp(kind, "remind") != 0) && (strcmp(kind, "invite") != 0) &&
             (strcmp(kind, "sub") != 0) && (strcmp(kind, "room") != 0)) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
 
     // set message setting
     } else if (strcmp(kind, "message") == 0) {
@@ -3705,14 +3696,14 @@ cmd_notify(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_inpblock(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_inpblock(ProfWin *window, gchar **args, const char * const command)
 {
     char *subcmd = args[0];
     char *value = args[1];
 
     if (g_strcmp0(subcmd, "timeout") == 0) {
         if (value == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -3733,7 +3724,7 @@ cmd_inpblock(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     if (g_strcmp0(subcmd, "dynamic") == 0) {
         if (value == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -3742,23 +3733,23 @@ cmd_inpblock(ProfWin *window, gchar **args, struct cmd_help_t help)
             return TRUE;
         }
 
-        return _cmd_set_boolean_preference(value, help, "Dynamic input blocking", PREF_INPBLOCK_DYNAMIC);
+        return _cmd_set_boolean_preference(value, command, "Dynamic input blocking", PREF_INPBLOCK_DYNAMIC);
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
 
     return TRUE;
 }
 
 gboolean
-cmd_log(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_log(ProfWin *window, gchar **args, const char * const command)
 {
     char *subcmd = args[0];
     char *value = args[1];
 
     if (strcmp(subcmd, "maxsize") == 0) {
         if (value == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -3777,18 +3768,18 @@ cmd_log(ProfWin *window, gchar **args, struct cmd_help_t help)
 
     if (strcmp(subcmd, "rotate") == 0) {
         if (value == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
-        return _cmd_set_boolean_preference(value, help, "Log rotate", PREF_LOG_ROTATE);
+        return _cmd_set_boolean_preference(value, command, "Log rotate", PREF_LOG_ROTATE);
     }
 
     if (strcmp(subcmd, "shared") == 0) {
         if (value == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
-        gboolean result = _cmd_set_boolean_preference(value, help, "Shared log", PREF_LOG_SHARED);
+        gboolean result = _cmd_set_boolean_preference(value, command, "Shared log", PREF_LOG_SHARED);
         log_reinit();
         return result;
     }
@@ -3799,7 +3790,7 @@ cmd_log(ProfWin *window, gchar **args, struct cmd_help_t help)
         return TRUE;
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
 
     /* TODO: make 'level' subcommand for debug level */
 
@@ -3807,7 +3798,7 @@ cmd_log(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_reconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_reconnect(ProfWin *window, gchar **args, const char * const command)
 {
     char *value = args[0];
 
@@ -3823,7 +3814,7 @@ cmd_reconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
     } else {
         cons_show(err_msg);
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         free(err_msg);
     }
 
@@ -3831,7 +3822,7 @@ cmd_reconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_autoping(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_autoping(ProfWin *window, gchar **args, const char * const command)
 {
     char *value = args[0];
 
@@ -3848,7 +3839,7 @@ cmd_autoping(ProfWin *window, gchar **args, struct cmd_help_t help)
         }
     } else {
         cons_show(err_msg);
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         free(err_msg);
     }
 
@@ -3856,7 +3847,7 @@ cmd_autoping(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_ping(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_ping(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3876,7 +3867,7 @@ cmd_ping(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_autoaway(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_autoaway(ProfWin *window, gchar **args, const char * const command)
 {
     char *setting = args[0];
     char *value = args[1];
@@ -3927,15 +3918,14 @@ cmd_autoaway(ProfWin *window, gchar **args, struct cmd_help_t help)
     }
 
     if (strcmp(setting, "check") == 0) {
-        return _cmd_set_boolean_preference(value, help, "Online check",
-            PREF_AUTOAWAY_CHECK);
+        return _cmd_set_boolean_preference(value, command, "Online check", PREF_AUTOAWAY_CHECK);
     }
 
     return TRUE;
 }
 
 gboolean
-cmd_priority(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_priority(ProfWin *window, gchar **args, const char * const command)
 {
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -3963,19 +3953,19 @@ cmd_priority(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_statuses(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_statuses(ProfWin *window, gchar **args, const char * const command)
 {
     if (strcmp(args[0], "console") != 0 &&
             strcmp(args[0], "chat") != 0 &&
             strcmp(args[0], "muc") != 0) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
     if (strcmp(args[1], "all") != 0 &&
             strcmp(args[1], "online") != 0 &&
             strcmp(args[1], "none") != 0) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -4016,7 +4006,7 @@ cmd_statuses(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_vercheck(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_vercheck(ProfWin *window, gchar **args, const char * const command)
 {
     int num_args = g_strv_length(args);
 
@@ -4024,13 +4014,12 @@ cmd_vercheck(ProfWin *window, gchar **args, struct cmd_help_t help)
         cons_check_version(TRUE);
         return TRUE;
     } else {
-        return _cmd_set_boolean_preference(args[0], help,
-            "Version checking", PREF_VERCHECK);
+        return _cmd_set_boolean_preference(args[0], command, "Version checking", PREF_VERCHECK);
     }
 }
 
 gboolean
-cmd_xmlconsole(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_xmlconsole(ProfWin *window, gchar **args, const char * const command)
 {
     if (!ui_xmlconsole_exists()) {
         ui_create_xmlconsole_win();
@@ -4042,28 +4031,25 @@ cmd_xmlconsole(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_flash(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_flash(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help,
-        "Screen flash", PREF_FLASH);
+    return _cmd_set_boolean_preference(args[0], command, "Screen flash", PREF_FLASH);
 }
 
 gboolean
-cmd_intype(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_intype(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help,
-        "Show contact typing", PREF_INTYPE);
+    return _cmd_set_boolean_preference(args[0], command, "Show contact typing", PREF_INTYPE);
 }
 
 gboolean
-cmd_splash(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_splash(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help,
-        "Splash screen", PREF_SPLASH);
+    return _cmd_set_boolean_preference(args[0], command, "Splash screen", PREF_SPLASH);
 }
 
 gboolean
-cmd_autoconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_autoconnect(ProfWin *window, gchar **args, const char * const command)
 {
     if (strcmp(args[0], "off") == 0) {
         prefs_set_string(PREF_CONNECT_ACCOUNT, NULL);
@@ -4072,16 +4058,15 @@ cmd_autoconnect(ProfWin *window, gchar **args, struct cmd_help_t help)
         prefs_set_string(PREF_CONNECT_ACCOUNT, args[1]);
         cons_show("Autoconnect account set to: %s.", args[1]);
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
     }
     return true;
 }
 
 gboolean
-cmd_chlog(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_chlog(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help,
-        "Chat logging", PREF_CHLOG);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Chat logging", PREF_CHLOG);
 
     // if set to off, disable history
     if (result == TRUE && (strcmp(args[0], "off") == 0)) {
@@ -4092,19 +4077,17 @@ cmd_chlog(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_grlog(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_grlog(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help,
-        "Groupchat logging", PREF_GRLOG);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Groupchat logging", PREF_GRLOG);
 
     return result;
 }
 
 gboolean
-cmd_history(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_history(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help,
-        "Chat history", PREF_HISTORY);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Chat history", PREF_HISTORY);
 
     // if set to on, set chlog
     if (result == TRUE && (strcmp(args[0], "on") == 0)) {
@@ -4115,10 +4098,9 @@ cmd_history(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_carbons(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_carbons(ProfWin *window, gchar **args, const char * const command)
 {
-    gboolean result = _cmd_set_boolean_preference(args[0], help,
-        "Message carbons preference", PREF_CARBONS);
+    gboolean result = _cmd_set_boolean_preference(args[0], command, "Message carbons preference", PREF_CARBONS);
 
     jabber_conn_status_t conn_status = jabber_get_connection_status();
 
@@ -4136,61 +4118,59 @@ cmd_carbons(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_receipts(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_receipts(ProfWin *window, gchar **args, const char * const command)
 {
     if (g_strcmp0(args[0], "send") == 0) {
-        return _cmd_set_boolean_preference(args[1], help,
-            "Send delivery receipts", PREF_RECEIPTS_SEND);
+        return _cmd_set_boolean_preference(args[1], command, "Send delivery receipts", PREF_RECEIPTS_SEND);
     } else if (g_strcmp0(args[0], "request") == 0) {
-        return _cmd_set_boolean_preference(args[1], help,
-            "Request delivery receipets", PREF_RECEIPTS_REQUEST);
+        return _cmd_set_boolean_preference(args[1], command, "Request delivery receipets", PREF_RECEIPTS_REQUEST);
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 }
 
 gboolean
-cmd_away(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_away(ProfWin *window, gchar **args, const char * const command)
 {
     _update_presence(RESOURCE_AWAY, "away", args);
     return TRUE;
 }
 
 gboolean
-cmd_online(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_online(ProfWin *window, gchar **args, const char * const command)
 {
     _update_presence(RESOURCE_ONLINE, "online", args);
     return TRUE;
 }
 
 gboolean
-cmd_dnd(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_dnd(ProfWin *window, gchar **args, const char * const command)
 {
     _update_presence(RESOURCE_DND, "dnd", args);
     return TRUE;
 }
 
 gboolean
-cmd_chat(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_chat(ProfWin *window, gchar **args, const char * const command)
 {
     _update_presence(RESOURCE_CHAT, "chat", args);
     return TRUE;
 }
 
 gboolean
-cmd_xa(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_xa(ProfWin *window, gchar **args, const char * const command)
 {
     _update_presence(RESOURCE_XA, "xa", args);
     return TRUE;
 }
 
 gboolean
-cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_pgp(ProfWin *window, gchar **args, const char * const command)
 {
 #ifdef HAVE_LIBGPGME
     if (args[0] == NULL) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -4212,7 +4192,7 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help)
                 cons_show("Chat logging is currently disabled, use '/chlog on' to enable.");
             }
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         }
         return TRUE;
     }
@@ -4246,13 +4226,13 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help)
 
         char *jid = args[1];
         if (!args[1]) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
         char *keyid = args[2];
         if (!args[2]) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -4388,7 +4368,7 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help)
         return TRUE;
     }
 
-    cons_show("Usage: %s", help.usage);
+    cons_bad_cmd_usage(command);
     return TRUE;
 #else
     cons_show("This version of Profanity has not been built with PGP support enabled");
@@ -4398,11 +4378,11 @@ cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_otr(ProfWin *window, gchar **args, const char * const command)
 {
 #ifdef HAVE_LIBOTR
     if (args[0] == NULL) {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 
@@ -4424,7 +4404,7 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
                 cons_show("Chat logging is currently disabled, use '/chlog on' to enable.");
             }
         } else {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
         }
         return TRUE;
 
@@ -4643,7 +4623,7 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
 
         char *secret = args[1];
         if (secret == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -4654,7 +4634,7 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
         char *question = args[1];
         char *answer = args[2];
         if (question == NULL || answer == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -4688,7 +4668,7 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
 
         char *answer = args[1];
         if (answer == NULL) {
-            cons_show("Usage: %s", help.usage);
+            cons_bad_cmd_usage(command);
             return TRUE;
         }
 
@@ -4696,7 +4676,7 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
         return TRUE;
 
     } else {
-        cons_show("Usage: %s", help.usage);
+        cons_bad_cmd_usage(command);
         return TRUE;
     }
 #else
@@ -4706,9 +4686,9 @@ cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help)
 }
 
 gboolean
-cmd_encwarn(ProfWin *window, gchar **args, struct cmd_help_t help)
+cmd_encwarn(ProfWin *window, gchar **args, const char * const command)
 {
-    return _cmd_set_boolean_preference(args[0], help, "Encryption warning message", PREF_ENC_WARN);
+    return _cmd_set_boolean_preference(args[0], command, "Encryption warning message", PREF_ENC_WARN);
 }
 
 // helper function for status change commands
@@ -4734,7 +4714,7 @@ _update_presence(const resource_presence_t resource_presence,
 
 // helper function for boolean preference commands
 static gboolean
-_cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
+_cmd_set_boolean_preference(gchar *arg, const char * const command,
     const char * const display, preference_t pref)
 {
     GString *enabled = g_string_new(display);
@@ -4744,9 +4724,7 @@ _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
     g_string_append(disabled, " disabled.");
 
     if (arg == NULL) {
-        char usage[strlen(help.usage) + 8];
-        sprintf(usage, "Usage: %s", help.usage);
-        cons_show(usage);
+        cons_bad_cmd_usage(command);
     } else if (strcmp(arg, "on") == 0) {
         cons_show(enabled->str);
         prefs_set_boolean(pref, TRUE);
@@ -4754,9 +4732,7 @@ _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
         cons_show(disabled->str);
         prefs_set_boolean(pref, FALSE);
     } else {
-        char usage[strlen(help.usage) + 8];
-        sprintf(usage, "Usage: %s", help.usage);
-        cons_show(usage);
+        cons_bad_cmd_usage(command);
     }
 
     g_string_free(enabled, TRUE);
diff --git a/src/command/commands.h b/src/command/commands.h
index bf0f94ae..70d5d5e0 100644
--- a/src/command/commands.h
+++ b/src/command/commands.h
@@ -39,10 +39,6 @@
 
 // Command help strings
 typedef struct cmd_help_t {
-    const gchar *usage;
-    const gchar *short_help;
-    const gchar *long_help[50];
-
     const gchar *synopsis[50];
     const gchar *desc;
     const gchar *args[50][2];
@@ -61,7 +57,7 @@ typedef struct cmd_help_t {
  */
 typedef struct cmd_t {
     gchar *cmd;
-    gboolean (*func)(ProfWin *window, gchar **args, struct cmd_help_t help);
+    gboolean (*func)(ProfWin *window, gchar **args, const char * const command);
     gchar** (*parser)(const char * const inp, int min, int max, gboolean *result);
     int min_args;
     int max_args;
@@ -72,85 +68,85 @@ typedef struct cmd_t {
 gboolean cmd_execute_alias(ProfWin *window, const char * const inp, gboolean *ran);
 gboolean cmd_execute_default(ProfWin *window, const char * inp);
 
-gboolean cmd_about(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_account(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_autoaway(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_autoconnect(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_autoping(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_away(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_beep(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_caps(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_chat(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_chlog(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_clear(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_close(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_connect(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_decline(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_disco(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_disconnect(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_dnd(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_flash(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_gone(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_grlog(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_group(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_help(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_history(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_carbons(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_receipts(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_info(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_intype(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_invite(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_invites(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_join(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_leave(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_log(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_msg(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_nick(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_notify(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_online(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_otr(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_pgp(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_outtype(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_prefs(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_priority(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_quit(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_reconnect(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_room(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_rooms(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_bookmark(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_roster(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_software(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_splash(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_states(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_status(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_statuses(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_sub(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_theme(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_tiny(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_titlebar(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_vercheck(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_who(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_win(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_wins(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_winstidy(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_xa(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_alias(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_xmlconsole(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_ping(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_form(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_occupants(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_kick(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_ban(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_subject(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_affiliation(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_role(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_privileges(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_presence(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_wrap(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_time(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_resource(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_inpblock(ProfWin *window, gchar **args, struct cmd_help_t help);
-gboolean cmd_encwarn(ProfWin *window, gchar **args, struct cmd_help_t help);
+gboolean cmd_about(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_account(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_autoaway(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_autoconnect(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_autoping(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_away(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_beep(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_caps(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_chat(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_chlog(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_clear(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_close(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_connect(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_decline(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_disco(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_disconnect(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_dnd(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_flash(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_gone(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_grlog(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_group(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_help(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_history(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_carbons(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_receipts(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_info(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_intype(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_invite(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_invites(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_join(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_leave(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_log(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_msg(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_nick(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_notify(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_online(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_otr(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_pgp(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_outtype(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_prefs(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_priority(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_quit(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_reconnect(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_room(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_rooms(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_bookmark(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_roster(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_software(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_splash(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_states(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_status(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_statuses(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_sub(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_theme(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_tiny(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_titlebar(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_vercheck(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_who(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_win(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_wins(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_winstidy(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_xa(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_alias(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_xmlconsole(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_ping(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_form(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_occupants(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_kick(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_ban(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_subject(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_affiliation(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_role(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_privileges(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_presence(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_wrap(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_time(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_resource(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_inpblock(ProfWin *window, gchar **args, const char * const command);
+gboolean cmd_encwarn(ProfWin *window, gchar **args, const char * const command);
 
 gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args);
 
diff --git a/src/ui/console.c b/src/ui/console.c
index 67c1da58..027f9e73 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -142,6 +142,18 @@ cons_show_help(Command *command)
 }
 
 void
+cons_bad_cmd_usage(const char * const cmd)
+{
+    GString *msg = g_string_new("");
+    g_string_printf(msg, "Invalid usage, see '/help %s' for details.", &cmd[1]);
+
+    cons_show("");
+    cons_show(msg->str);
+
+    g_string_free(msg, TRUE);
+}
+
+void
 cons_show_error(const char * const msg, ...)
 {
     ProfWin *console = wins_get_console();
diff --git a/src/ui/core.c b/src/ui/core.c
index 5f85a3cd..821de9fe 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -667,22 +667,25 @@ ui_handle_error(const char * const err_msg)
 }
 
 void
-ui_invalid_command_usage(const char * const usage, void (*setting_func)(void))
+ui_invalid_command_usage(const char * const cmd, void (*setting_func)(void))
 {
+    GString *msg = g_string_new("");
+    g_string_printf(msg, "Invalid usage, see '/help %s' for details.", &cmd[1]);
+
     if (setting_func) {
         cons_show("");
         (*setting_func)();
-        cons_show("Usage: %s", usage);
+        cons_show(msg->str);
     } else {
         cons_show("");
-        cons_show("Usage: %s", usage);
+        cons_show(msg->str);
         ProfWin *current = wins_get_current();
         if (current->type == WIN_CHAT) {
-            char usage_cpy[strlen(usage) + 8];
-            sprintf(usage_cpy, "Usage: %s", usage);
-            ui_current_print_line(usage_cpy);
+            ui_current_print_line(msg->str);
         }
     }
+
+    g_string_free(msg, TRUE);
 }
 
 void
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 58f1ee98..dba90d2b 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -228,7 +228,7 @@ void ui_input_clear(void);
 void ui_input_nonblocking(gboolean);
 void ui_write(char *line, int offset);
 
-void ui_invalid_command_usage(const char * const usage, void (*setting_func)(void));
+void ui_invalid_command_usage(const char * const cmd, void (*setting_func)(void));
 
 void ui_create_xmlconsole_win(void);
 gboolean ui_xmlconsole_exists(void);
@@ -243,6 +243,7 @@ void cons_show(const char * const msg, ...);
 void cons_about(void);
 void cons_help(void);
 void cons_show_help(Command *command);
+void cons_bad_cmd_usage(const char * const cmd);
 void cons_navigation_help(void);
 void cons_prefs(void);
 void cons_show_ui_prefs(void);