diff options
author | James Booth <boothj5@gmail.com> | 2015-07-27 01:06:10 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-07-27 01:06:10 +0100 |
commit | eb550eedb39fccd845aab82c8ebb8f7af76be180 (patch) | |
tree | a3cd2b715a6f9ac043c345880208ad02e4fde980 /src/command | |
parent | 8119025120b0b511aea8bc3f477d2aff835bd24b (diff) | |
download | profani-tty-eb550eedb39fccd845aab82c8ebb8f7af76be180.tar.gz |
Added tags to command definitions
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/command.c | 223 | ||||
-rw-r--r-- | src/command/command.h | 3 | ||||
-rw-r--r-- | src/command/commands.c | 224 | ||||
-rw-r--r-- | src/command/commands.h | 1 |
4 files changed, 361 insertions, 90 deletions
diff --git a/src/command/command.c b/src/command/command.c index 87784780..64cca07f 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -104,11 +104,22 @@ static char * _receipts_autocomplete(ProfWin *window, const char * const input); GHashTable *commands = NULL; -#define CMD_SYN(...) { { __VA_ARGS__, NULL }, +#define CMD_TAG_BASIC "basic" +#define CMD_TAG_CHATTING "chatting" +#define CMD_TAG_GROUPCHAT "groupchat" +#define CMD_TAG_PRESENCES "presences" +#define CMD_TAG_CONTACTS "contacts" +#define CMD_TAG_SERVICE "service" +#define CMD_TAG_SETTINGS "settings" +#define CMD_TAG_UI "ui" + +#define CMD_NOTAGS { { NULL }, +#define CMD_TAGS(...) { { __VA_ARGS__, NULL }, +#define CMD_SYN(...) { __VA_ARGS__, NULL }, #define CMD_DESC(desc) desc, -#define CMD_NOARGS { { NULL, NULL } }, +#define CMD_NOARGS { { NULL, NULL } }, #define CMD_ARGS(...) { __VA_ARGS__, { NULL, NULL } }, -#define CMD_NOEXAMPLES { NULL } } +#define CMD_NOEXAMPLES { NULL } } #define CMD_EXAMPLES(...) { __VA_ARGS__, NULL } } /* @@ -118,6 +129,7 @@ static struct cmd_t command_defs[] = { { "/help", cmd_help, parse_args, 0, 1, NULL, + CMD_NOTAGS CMD_SYN( "/help [<area>|<command>]") CMD_DESC( @@ -133,6 +145,7 @@ static struct cmd_t command_defs[] = { "/about", cmd_about, parse_args, 0, 0, NULL, + CMD_NOTAGS CMD_SYN( "/about") CMD_DESC( @@ -143,6 +156,8 @@ static struct cmd_t command_defs[] = { "/connect", cmd_connect, parse_args, 0, 5, NULL, + CMD_TAGS( + CMD_TAG_BASIC) CMD_SYN( "/connect [<account>]", "/connect <account> [server <server>] [port <port>]") @@ -164,6 +179,8 @@ static struct cmd_t command_defs[] = { "/disconnect", cmd_disconnect, parse_args, 0, 0, NULL, + CMD_TAGS( + CMD_TAG_BASIC) CMD_SYN( "/disconnect") CMD_DESC( @@ -174,6 +191,10 @@ static struct cmd_t command_defs[] = { "/msg", cmd_msg, parse_args_with_freetext, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_CHATTING, + CMD_TAG_GROUPCHAT) CMD_SYN( "/msg <contact> [<message>]", "/msg <nick> [<message>]") @@ -195,6 +216,9 @@ static struct cmd_t command_defs[] = { "/roster", cmd_roster, parse_args_with_freetext, 0, 3, NULL, + CMD_TAGS( + CMD_TAG_CONTACTS, + CMD_TAG_UI) CMD_SYN( "/roster", "/roster online", @@ -242,9 +266,12 @@ static struct cmd_t command_defs[] = { "/group", cmd_group, parse_args_with_freetext, 0, 3, NULL, + CMD_TAGS( + CMD_TAG_CONTACTS) CMD_SYN( "/group", "/group show <group>", + "/group add <group> <contat>" "/group remove <group> <contact>") CMD_DESC( "View, add to, and remove from roster groups. " @@ -263,6 +290,7 @@ static struct cmd_t command_defs[] = { "/info", cmd_info, parse_args, 0, 1, NULL, + CMD_NOTAGS CMD_SYN( "/info", "/info <contact>|<nick>") @@ -280,6 +308,8 @@ static struct cmd_t command_defs[] = { "/caps", cmd_caps, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_SERVICE) CMD_SYN( "/caps", "/caps <fulljid>|<nick>") @@ -297,6 +327,8 @@ static struct cmd_t command_defs[] = { "/software", cmd_software, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_SERVICE) CMD_SYN( "/software", "/software <fulljid>|<nick>") @@ -315,6 +347,7 @@ static struct cmd_t command_defs[] = { "/status", cmd_status, parse_args, 0, 1, NULL, + CMD_NOTAGS CMD_SYN( "/status", "/status <contact>|<nick>") @@ -331,6 +364,8 @@ static struct cmd_t command_defs[] = { "/resource", cmd_resource, parse_args, 1, 2, &cons_resource_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/resource set <resource>", "/resource off", @@ -348,6 +383,9 @@ static struct cmd_t command_defs[] = { "/join", cmd_join, parse_args, 0, 5, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_GROUPCHAT) CMD_SYN( "/join", "/join <room> [nick <nick>] [password <password>]") @@ -371,6 +409,9 @@ static struct cmd_t command_defs[] = { "/leave", cmd_leave, parse_args, 0, 0, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_GROUPCHAT) CMD_SYN( "/leave") CMD_DESC( @@ -381,6 +422,8 @@ static struct cmd_t command_defs[] = { "/invite", cmd_invite, parse_args_with_freetext, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/invite <contact> [<message>]") CMD_DESC( @@ -393,6 +436,8 @@ static struct cmd_t command_defs[] = { "/invites", cmd_invites, parse_args_with_freetext, 0, 0, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/invites") CMD_DESC( @@ -403,6 +448,8 @@ static struct cmd_t command_defs[] = { "/decline", cmd_decline, parse_args_with_freetext, 1, 1, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/decline <room>") CMD_DESC( @@ -414,6 +461,8 @@ static struct cmd_t command_defs[] = { "/room", cmd_room, parse_args, 1, 1, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/room accept|destroy|config") CMD_DESC( @@ -427,6 +476,8 @@ static struct cmd_t command_defs[] = { "/kick", cmd_kick, parse_args_with_freetext, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/kick <nick> [<reason>]") CMD_DESC( @@ -439,6 +490,8 @@ static struct cmd_t command_defs[] = { "/ban", cmd_ban, parse_args_with_freetext, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/ban <jid> [<reason>]") CMD_DESC( @@ -451,6 +504,8 @@ static struct cmd_t command_defs[] = { "/subject", cmd_subject, parse_args_with_freetext, 0, 2, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/subject set <subject>", "/subject clear") @@ -464,6 +519,8 @@ static struct cmd_t command_defs[] = { "/affiliation", cmd_affiliation, parse_args_with_freetext, 1, 4, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/affiliation set <affiliation> <jid> [<reason>]", "/list [<affiliation>]") @@ -478,6 +535,8 @@ static struct cmd_t command_defs[] = { "/role", cmd_role, parse_args_with_freetext, 1, 4, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/role set <role> <nick> [<reason>]", "/list [<role>]") @@ -492,6 +551,8 @@ static struct cmd_t command_defs[] = { "/occupants", cmd_occupants, parse_args, 1, 3, cons_occupants_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/occupants show|hide [jid]", "/occupants default show|hide [jid]", @@ -511,6 +572,8 @@ static struct cmd_t command_defs[] = { "/form", cmd_form, parse_args, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/form show", "/form submit", @@ -528,6 +591,8 @@ static struct cmd_t command_defs[] = { "/rooms", cmd_rooms, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/rooms [<service>]") CMD_DESC( @@ -541,6 +606,8 @@ static struct cmd_t command_defs[] = { "/bookmark", cmd_bookmark, parse_args, 0, 8, NULL, + CMD_TAGS( + CMD_TAG_GROUPCHAT) CMD_SYN( "/bookmark", "/bookmark list", @@ -565,6 +632,8 @@ static struct cmd_t command_defs[] = { "/disco", cmd_disco, parse_args, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_SERVICE) CMD_SYN( "/disco info [<jid>]", "/disco items [<jid>]") @@ -583,6 +652,9 @@ static struct cmd_t command_defs[] = { "/nick", cmd_nick, parse_args_with_freetext, 1, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_GROUPCHAT) CMD_SYN( "/nick <nickname>") CMD_DESC( @@ -594,6 +666,9 @@ static struct cmd_t command_defs[] = { "/win", cmd_win, parse_args, 1, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_UI) CMD_SYN( "/win <num>") CMD_DESC( @@ -605,6 +680,9 @@ static struct cmd_t command_defs[] = { "/wins", cmd_wins, parse_args, 0, 3, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_UI) CMD_SYN( "/wins tidy", "/wins prune", @@ -621,6 +699,9 @@ static struct cmd_t command_defs[] = { "/sub", cmd_sub, parse_args, 1, 2, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_CONTACTS) CMD_SYN( "/sub request [<jid>]", "/sub allow [<jid>]", @@ -647,6 +728,8 @@ static struct cmd_t command_defs[] = { "/tiny", cmd_tiny, parse_args, 1, 1, NULL, + CMD_TAGS( + CMD_TAG_CHATTING) CMD_SYN( "/tiny <url>") CMD_DESC( @@ -659,6 +742,9 @@ static struct cmd_t command_defs[] = { "/who", cmd_who, parse_args, 0, 2, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_CONTACTS) CMD_SYN( "/who", "/who online|offline|away|dnd|xa|chat|available|unavailable|any [<group>]", @@ -686,6 +772,9 @@ static struct cmd_t command_defs[] = { "/close", cmd_close, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_CHATTING) CMD_SYN( "/close [<num>]", "/close all|read") @@ -701,6 +790,7 @@ static struct cmd_t command_defs[] = { "/clear", cmd_clear, parse_args, 0, 0, NULL, + CMD_NOTAGS CMD_SYN( "/clear") CMD_DESC( @@ -711,6 +801,8 @@ static struct cmd_t command_defs[] = { "/quit", cmd_quit, parse_args, 0, 0, NULL, + CMD_TAGS( + CMD_TAG_BASIC) CMD_SYN( "/quit") CMD_DESC( @@ -721,6 +813,8 @@ static struct cmd_t command_defs[] = { "/privileges", cmd_privileges, parse_args, 1, 1, &cons_privileges_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/privileges on|off") CMD_DESC( @@ -732,6 +826,8 @@ static struct cmd_t command_defs[] = { "/beep", cmd_beep, parse_args, 1, 1, &cons_beep_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/beep on|off") CMD_DESC( @@ -745,6 +841,9 @@ static struct cmd_t command_defs[] = { "/encwarn", cmd_encwarn, parse_args, 1, 1, &cons_encwarn_setting, + CMD_TAGS( + CMD_TAG_CHATTING, + CMD_TAG_UI) CMD_SYN( "/encwarn on|off") CMD_DESC( @@ -756,6 +855,8 @@ static struct cmd_t command_defs[] = { "/presence", cmd_presence, parse_args, 1, 1, &cons_presence_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/presence on|off") CMD_DESC( @@ -767,6 +868,8 @@ static struct cmd_t command_defs[] = { "/wrap", cmd_wrap, parse_args, 1, 1, &cons_wrap_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/wrap on|off") CMD_DESC( @@ -778,6 +881,8 @@ static struct cmd_t command_defs[] = { "/winstidy", cmd_winstidy, parse_args, 1, 1, &cons_winstidy_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/winstidy on|off") CMD_DESC( @@ -789,6 +894,8 @@ static struct cmd_t command_defs[] = { "/time", cmd_time, parse_args, 1, 3, &cons_time_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/time main set <format>", "/time main off", @@ -813,6 +920,8 @@ static struct cmd_t command_defs[] = { "/inpblock", cmd_inpblock, parse_args, 2, 2, &cons_inpblock_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/inpblock timeout <millis>", "/inpblock dynamic on|off") @@ -826,6 +935,8 @@ static struct cmd_t command_defs[] = { "/notify", cmd_notify, parse_args, 2, 3, &cons_notify_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/notify message on|off", "/notify message current on|off", @@ -865,6 +976,8 @@ static struct cmd_t command_defs[] = { "/flash", cmd_flash, parse_args, 1, 1, &cons_flash_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/flash on|off") CMD_DESC( @@ -877,6 +990,8 @@ static struct cmd_t command_defs[] = { "/intype", cmd_intype, parse_args, 1, 1, &cons_intype_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/intype on|off") CMD_DESC( @@ -888,6 +1003,8 @@ static struct cmd_t command_defs[] = { "/splash", cmd_splash, parse_args, 1, 1, &cons_splash_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/splash on|off") CMD_DESC( @@ -899,6 +1016,8 @@ static struct cmd_t command_defs[] = { "/autoconnect", cmd_autoconnect, parse_args, 1, 2, &cons_autoconnect_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/autoconnect set <account>", "/autoconnect off") @@ -915,6 +1034,9 @@ static struct cmd_t command_defs[] = { "/vercheck", cmd_vercheck, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_SETTINGS, + CMD_TAG_UI) CMD_SYN( "/vercheck on|off") CMD_DESC( @@ -926,6 +1048,8 @@ static struct cmd_t command_defs[] = { "/titlebar", cmd_titlebar, parse_args, 2, 2, &cons_titlebar_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/titlebar show on|off", "/titlebar goodbye on|off") @@ -939,6 +1063,8 @@ static struct cmd_t command_defs[] = { "/alias", cmd_alias, parse_args_with_freetext, 1, 3, NULL, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/alias list", "/alias add <name> <value>", @@ -959,6 +1085,9 @@ static struct cmd_t command_defs[] = { "/chlog", cmd_chlog, parse_args, 1, 1, &cons_chlog_setting, + CMD_TAGS( + CMD_TAG_CHATTING, + CMD_TAG_SETTINGS) CMD_SYN( "/chlog on|off") CMD_DESC( @@ -973,6 +1102,9 @@ static struct cmd_t command_defs[] = { "/grlog", cmd_grlog, parse_args, 1, 1, &cons_grlog_setting, + CMD_TAGS( + CMD_TAG_GROUPCHAT, + CMD_TAG_SETTINGS) CMD_SYN( "/grlog on|off") CMD_DESC( @@ -985,6 +1117,8 @@ static struct cmd_t command_defs[] = { "/states", cmd_states, parse_args, 1, 1, &cons_states_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/states on|off") CMD_DESC( @@ -996,6 +1130,8 @@ static struct cmd_t command_defs[] = { "/pgp", cmd_pgp, parse_args, 1, 3, NULL, + CMD_TAGS( + CMD_TAG_CHATTING) CMD_SYN( "/pgp libver", "/pgp keys", @@ -1025,6 +1161,8 @@ static struct cmd_t command_defs[] = { "/otr", cmd_otr, parse_args, 1, 3, NULL, + CMD_TAGS( + CMD_TAG_CHATTING) CMD_SYN( "/otr libver", "/otr gen", @@ -1068,6 +1206,8 @@ static struct cmd_t command_defs[] = { "/outtype", cmd_outtype, parse_args, 1, 1, &cons_outtype_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/outtype on|off") CMD_DESC( @@ -1079,6 +1219,8 @@ static struct cmd_t command_defs[] = { "/gone", cmd_gone, parse_args, 1, 1, &cons_gone_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/gone <minutes>") CMD_DESC( @@ -1091,6 +1233,10 @@ static struct cmd_t command_defs[] = { "/history", cmd_history, parse_args, 1, 1, &cons_history_setting, + CMD_TAGS( + CMD_TAG_CHATTING, + CMD_TAG_SETTINGS, + CMD_TAG_UI) CMD_SYN( "/history on|off") CMD_DESC( @@ -1103,6 +1249,8 @@ static struct cmd_t command_defs[] = { "/log", cmd_log, parse_args, 1, 2, &cons_log_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/log where", "/log rotate on|off", @@ -1120,6 +1268,9 @@ static struct cmd_t command_defs[] = { "/carbons", cmd_carbons, parse_args, 1, 1, &cons_carbons_setting, + CMD_TAGS( + CMD_TAG_CHATTING, + CMD_TAG_SETTINGS) CMD_SYN( "/carbons on|off") CMD_DESC( @@ -1132,6 +1283,9 @@ static struct cmd_t command_defs[] = { "/receipts", cmd_receipts, parse_args, 2, 2, &cons_receipts_setting, + CMD_TAGS( + CMD_TAG_CHATTING, + CMD_TAG_SETTINGS) CMD_SYN( "/receipts request on|off", "/receipts send on|off") @@ -1145,6 +1299,8 @@ static struct cmd_t command_defs[] = { "/reconnect", cmd_reconnect, parse_args, 1, 1, &cons_reconnect_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/reconnect <seconds>") CMD_DESC( @@ -1156,6 +1312,8 @@ static struct cmd_t command_defs[] = { "/autoping", cmd_autoping, parse_args, 1, 1, &cons_autoping_setting, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/autoping <seconds>") CMD_DESC( @@ -1167,6 +1325,7 @@ static struct cmd_t command_defs[] = { "/ping", cmd_ping, parse_args, 0, 1, NULL, + CMD_NOTAGS CMD_SYN( "/ping [<jid>]") CMD_DESC( @@ -1179,6 +1338,9 @@ static struct cmd_t command_defs[] = { "/autoaway", cmd_autoaway, parse_args_with_freetext, 2, 2, &cons_autoaway_setting, + CMD_TAGS( + CMD_TAG_PRESENCES, + CMD_TAG_SETTINGS) CMD_SYN( "/autoaway mode idle|away|off", "/autoaway time <minutes>", @@ -1203,6 +1365,8 @@ static struct cmd_t command_defs[] = { "/priority", cmd_priority, parse_args, 1, 1, &cons_priority_setting, + CMD_TAGS( + CMD_TAG_PRESENCES) CMD_SYN( "/priority <priority>") CMD_DESC( @@ -1215,6 +1379,8 @@ static struct cmd_t command_defs[] = { "/account", cmd_account, parse_args, 0, 4, NULL, + CMD_TAGS( + CMD_TAG_SETTINGS) CMD_SYN( "/account", "/account list", @@ -1288,6 +1454,9 @@ static struct cmd_t command_defs[] = { "/prefs", cmd_prefs, parse_args, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_SETTINGS, + CMD_TAG_UI) CMD_SYN( "/prefs [ui|desktop|chat|log|conn|presence]") CMD_DESC( @@ -1305,6 +1474,8 @@ static struct cmd_t command_defs[] = { "/theme", cmd_theme, parse_args, 1, 2, &cons_theme_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/theme list", "/theme load <theme>", @@ -1322,6 +1493,8 @@ static struct cmd_t command_defs[] = { "/statuses", cmd_statuses, parse_args, 2, 2, &cons_statuses_setting, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/statuses console|chat|muc all|online|none") CMD_DESC( @@ -1342,6 +1515,8 @@ static struct cmd_t command_defs[] = { "/xmlconsole", cmd_xmlconsole, parse_args, 0, 0, NULL, + CMD_TAGS( + CMD_TAG_UI) CMD_SYN( "/xmlconsole") CMD_DESC( @@ -1352,6 +1527,9 @@ static struct cmd_t command_defs[] = { "/away", cmd_away, parse_args_with_freetext, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_PRESENCES) CMD_SYN( "/away [<message>]") CMD_DESC( @@ -1365,6 +1543,9 @@ static struct cmd_t command_defs[] = { "/chat", cmd_chat, parse_args_with_freetext, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_PRESENCES) CMD_SYN( "/chat [<message>]") CMD_DESC( @@ -1378,6 +1559,9 @@ static struct cmd_t command_defs[] = { "/dnd", cmd_dnd, parse_args_with_freetext, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_PRESENCES) CMD_SYN( "/dnd [<message>]") CMD_DESC( @@ -1391,6 +1575,9 @@ static struct cmd_t command_defs[] = { "/online", cmd_online, parse_args_with_freetext, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_PRESENCES) CMD_SYN( "/online [<message>]") CMD_DESC( @@ -1404,6 +1591,9 @@ static struct cmd_t command_defs[] = { "/xa", cmd_xa, parse_args_with_freetext, 0, 1, NULL, + CMD_TAGS( + CMD_TAG_BASIC, + CMD_TAG_PRESENCES) CMD_SYN( "/xa [<message>]") CMD_DESC( @@ -1494,6 +1684,7 @@ cmd_init(void) autocomplete_add(help_ac, "contacts"); autocomplete_add(help_ac, "service"); autocomplete_add(help_ac, "settings"); + autocomplete_add(help_ac, "ui"); autocomplete_add(help_ac, "navigation"); // load command defs into hash table @@ -2120,6 +2311,32 @@ cmd_reset_autocomplete(ProfWin *window) bookmark_autocomplete_reset(); } +gboolean +cmd_is_tag(const char * const str) +{ + return ((g_strcmp0(str, CMD_TAG_BASIC) == 0) || + (g_strcmp0(str, CMD_TAG_CHATTING) == 0) || + (g_strcmp0(str, CMD_TAG_CONTACTS) == 0) || + (g_strcmp0(str, CMD_TAG_GROUPCHAT) == 0) || + (g_strcmp0(str, CMD_TAG_PRESENCES) == 0) || + (g_strcmp0(str, CMD_TAG_SERVICE) == 0) || + (g_strcmp0(str, CMD_TAG_UI) == 0) || + (g_strcmp0(str, CMD_TAG_SETTINGS) == 0)); +} + +gboolean +cmd_has_tag(Command *pcmd, const char * const tag) +{ + int i = 0; + for (i = 0; pcmd->help.tags[i] != NULL; i++) { + if (g_strcmp0(tag, pcmd->help.tags[i]) == 0) { + return TRUE; + } + } + + return FALSE; +} + /* * Take a line of input and process it, return TRUE if profanity is to * continue, FALSE otherwise diff --git a/src/command/command.h b/src/command/command.h index e6fc7ead..3bfa8915 100644 --- a/src/command/command.h +++ b/src/command/command.h @@ -54,6 +54,9 @@ void cmd_autocomplete_remove_form_fields(DataForm *form); void cmd_alias_add(char *value); void cmd_alias_remove(char *value); +gboolean cmd_is_tag(const char * const str); +gboolean cmd_has_tag(Command *pcmd, const char * const tag); + gboolean cmd_process_input(ProfWin *window, char *inp); void cmd_execute_connect(ProfWin *window, const char * const account); diff --git a/src/command/commands.c b/src/command/commands.c index 1f240cba..40058b0c 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -75,7 +75,7 @@ static void _update_presence(const resource_presence_t presence, const char * const show, gchar **args); 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 _cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filter_size); static void _who_room(ProfWin *window, const char * const command, gchar **args); static void _who_roster(ProfWin *window, const char * const command, gchar **args); @@ -828,46 +828,96 @@ cmd_help(ProfWin *window, const char * const command, gchar **args) cons_show("Use /help [command] without the leading slash, for help on a specific command"); cons_show(""); - } else if (strcmp(args[0], "basic") == 0) { - gchar *filter[] = { "/about", "/clear", "/close", "/connect", - "/disconnect", "/help", "/msg", "/join", "/quit", "/vercheck", - "/wins", "/ping" }; - _cmd_show_filtered_help("Basic commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "chatting") == 0) { - gchar *filter[] = { "/chlog", "/otr", "/gone", "/history", - "/info", "/intype", "/msg", "/notify", "/outtype", "/status", - "/close", "/clear", "/tiny" }; - _cmd_show_filtered_help("Chat commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "groupchat") == 0) { - gchar *filter[] = { "/close", "/clear", "/decline", "/grlog", - "/invite", "/invites", "/join", "/leave", "/notify", "/msg", "/room", - "/rooms", "/tiny", "/who", "/nick", "/privileges", "/info", "/occupants" }; - _cmd_show_filtered_help("Groupchat commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "presences") == 0) { - gchar *filter[] = { "/autoaway", "/away", "/chat", "/dnd", - "/online", "/priority", "/account", "/status", "/statuses", "/who", - "/xa" }; - _cmd_show_filtered_help("Presence commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "contacts") == 0) { - gchar *filter[] = { "/group", "/roster", "/sub", "/who" }; - _cmd_show_filtered_help("Roster commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "service") == 0) { - gchar *filter[] = { "/caps", "/disco", "/info", "/software", "/rooms" }; - _cmd_show_filtered_help("Service discovery commands", filter, ARRAY_SIZE(filter)); - - } else if (strcmp(args[0], "settings") == 0) { - gchar *filter[] = { "/account", "/autoaway", "/autoping", "/autoconnect", "/beep", - "/carbons", "/chlog", "/flash", "/gone", "/grlog", "/history", "/intype", - "/log", "/notify", "/outtype", "/prefs", "/priority", "/reconnect", "/roster", - "/splash", "/states", "/statuses", "/theme", "/titlebar", "/vercheck", - "/privileges", "/occupants", "/presence", "/wrap", "/winstidy" }; - _cmd_show_filtered_help("Settings commands", filter, ARRAY_SIZE(filter)); +// } else if (strcmp(args[0], "basic") == 0) { +// gchar *filter[] = { "/about", "/clear", "/close", "/connect", +// "/disconnect", "/help", "/msg", "/join", "/quit", "/vercheck", +// "/wins", "/ping" }; +// _cmd_show_filtered_help("Basic commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "chatting") == 0) { +// gchar *filter[] = { "/chlog", "/otr", "/gone", "/history", +// "/info", "/intype", "/msg", "/notify", "/outtype", "/status", +// "/close", "/clear", "/tiny" }; +// _cmd_show_filtered_help("Chat commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "groupchat") == 0) { +// gchar *filter[] = { "/close", "/clear", "/decline", "/grlog", +// "/invite", "/invites", "/join", "/leave", "/notify", "/msg", "/room", +// "/rooms", "/tiny", "/who", "/nick", "/privileges", "/info", "/occupants" }; +// _cmd_show_filtered_help("Groupchat commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "presences") == 0) { +// gchar *filter[] = { "/autoaway", "/away", "/chat", "/dnd", +// "/online", "/priority", "/account", "/status", "/statuses", "/who", +// "/xa" }; +// _cmd_show_filtered_help("Presence commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "contacts") == 0) { +// gchar *filter[] = { "/group", "/roster", "/sub", "/who" }; +// _cmd_show_filtered_help("Roster commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "service") == 0) { +// gchar *filter[] = { "/caps", "/disco", "/info", "/software", "/rooms" }; +// _cmd_show_filtered_help("Service discovery commands", filter, ARRAY_SIZE(filter)); +// +// } else if (strcmp(args[0], "settings") == 0) { +// gchar *filter[] = { "/account", "/autoaway", "/autoping", "/autoconnect", "/beep", +// "/carbons", "/chlog", "/flash", "/gone", "/grlog", "/history", "/intype", +// "/log", "/notify", "/outtype", "/prefs", "/priority", "/reconnect", "/roster", +// "/splash", "/states", "/statuses", "/theme", "/titlebar", "/vercheck", +// "/privileges", "/occupants", "/presence", "/wrap", "/winstidy" }; +// _cmd_show_filtered_help("Settings commands", filter, ARRAY_SIZE(filter)); +// + } else if (cmd_is_tag(args[0])) { + cons_show(""); + ProfWin *console = wins_get_console(); + win_vprint(console, '-', NULL, 0, THEME_WHITE_BOLD, "", "%s commands", args[0]); + + GList *ordered_commands = NULL; + GHashTableIter iter; + gpointer key; + gpointer value; + + g_hash_table_iter_init(&iter, commands); + while (g_hash_table_iter_next(&iter, &key, &value)) { + Command *pcmd = (Command *)value; + if (cmd_has_tag(pcmd, args[0])) { + ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0); + } + } + + int maxlen = 0; + GList *curr = ordered_commands; + while (curr) { + gchar *cmd = curr->data; + int len = strlen(cmd); + if (len > maxlen) maxlen = len; + curr = g_list_next(curr); + } + + GString *cmds = g_string_new(""); + curr = ordered_commands; + int count = 0; + while (curr) { + gchar *cmd = curr->data; + if (count == 5) { + cons_show(cmds->str); + g_string_free(cmds, TRUE); + cmds = g_string_new(""); + count = 0; + } + g_string_append_printf(cmds, "%-*s", maxlen + 1, cmd); + curr = g_list_next(curr); + count++; + } + cons_show(cmds->str); + g_string_free(cmds, TRUE); + g_list_free(ordered_commands); + g_list_free(curr); + cons_show(""); + cons_show("Use /help [command] without the leading slash, for help on a specific command"); + cons_show(""); } else if (strcmp(args[0], "navigation") == 0) { cons_navigation_help(); } else { @@ -4743,50 +4793,50 @@ _cmd_set_boolean_preference(gchar *arg, const char * const command, return TRUE; } -static void -_cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filter_size) -{ - ProfWin *console = wins_get_console(); - cons_show(""); - win_print(console, '-', NULL, 0, THEME_WHITE_BOLD, "", heading); - - GList *ordered_commands = NULL; - int i; - for (i = 0; i < filter_size; i++) { - Command *pcmd = g_hash_table_lookup(commands, cmd_filter[i]); - ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0); - } - - int maxlen = 0; - GList *curr = ordered_commands; - while (curr) { - gchar *cmd = curr->data; - int len = strlen(cmd); - if (len > maxlen) maxlen = len; - curr = g_list_next(curr); - } - - GString *cmds = g_string_new(""); - curr = ordered_commands; - int count = 0; - while (curr) { - gchar *cmd = curr->data; - if (count == 5) { - cons_show(cmds->str); - g_string_free(cmds, TRUE); - cmds = g_string_new(""); - count = 0; - } - g_string_append_printf(cmds, "%-*s", maxlen + 1, cmd); - curr = g_list_next(curr); - count++; - } - cons_show(cmds->str); - g_string_free(cmds, TRUE); - g_list_free(ordered_commands); - g_list_free(curr); - - cons_show(""); - cons_show("Use /help [command] without the leading slash, for help on a specific command"); - cons_show(""); -} +//static void +//_cmd_show_filtered_help(char *heading, gchar *cmd_filter[], int filter_size) +//{ +// ProfWin *console = wins_get_console(); +// cons_show(""); +// win_print(console, '-', NULL, 0, THEME_WHITE_BOLD, "", heading); +// +// GList *ordered_commands = NULL; +// int i; +// for (i = 0; i < filter_size; i++) { +// Command *pcmd = g_hash_table_lookup(commands, cmd_filter[i]); +// ordered_commands = g_list_insert_sorted(ordered_commands, pcmd->cmd, (GCompareFunc)g_strcmp0); +// } +// +// int maxlen = 0; +// GList *curr = ordered_commands; +// while (curr) { +// gchar *cmd = curr->data; +// int len = strlen(cmd); +// if (len > maxlen) maxlen = len; +// curr = g_list_next(curr); +// } +// +// GString *cmds = g_string_new(""); +// curr = ordered_commands; +// int count = 0; +// while (curr) { +// gchar *cmd = curr->data; +// if (count == 5) { +// cons_show(cmds->str); +// g_string_free(cmds, TRUE); +// cmds = g_string_new(""); +// count = 0; +// } +// g_string_append_printf(cmds, "%-*s", maxlen + 1, cmd); +// curr = g_list_next(curr); +// count++; +// } +// cons_show(cmds->str); +// g_string_free(cmds, TRUE); +// g_list_free(ordered_commands); +// g_list_free(curr); +// +// cons_show(""); +// cons_show("Use /help [command] without the leading slash, for help on a specific command"); +// cons_show(""); +//} diff --git a/src/command/commands.h b/src/command/commands.h index 46061a7d..c158f606 100644 --- a/src/command/commands.h +++ b/src/command/commands.h @@ -39,6 +39,7 @@ // Command help strings typedef struct cmd_help_t { + const gchar *tags[20]; const gchar *synopsis[50]; const gchar *desc; const gchar *args[50][2]; |