From a4cadf78faabc157e5db00e42302d495bba432c0 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Tue, 7 Jul 2020 13:53:30 +0200 Subject: Revert "Apply coding style" This reverts commit 9b55f2dec0ea27a9ce4856e303425e12f866cea2. Sorting the includes creates some problems. --- src/command/cmd_ac.c | 946 +++++----- src/command/cmd_ac.h | 30 +- src/command/cmd_defs.c | 4569 ++++++++++++++++++++++++----------------------- src/command/cmd_defs.h | 10 +- src/command/cmd_funcs.c | 2306 ++++++++++++------------ src/command/cmd_funcs.h | 355 ++-- 6 files changed, 4180 insertions(+), 4036 deletions(-) (limited to 'src/command') diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 8655e3c9..0d9d4cc5 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -36,25 +36,25 @@ #define _GNU_SOURCE 1 -#include -#include -#include #include #include +#include +#include +#include -#include "command/cmd_ac.h" -#include "command/cmd_funcs.h" #include "common.h" #include "config/preferences.h" #include "config/scripts.h" -#include "plugins/plugins.h" +#include "command/cmd_ac.h" +#include "command/cmd_funcs.h" #include "tools/parser.h" -#include "ui/buffer.h" +#include "plugins/plugins.h" #include "ui/win_types.h" #include "ui/window_list.h" #include "xmpp/muc.h" -#include "xmpp/roster_list.h" #include "xmpp/xmpp.h" +#include "xmpp/roster_list.h" +#include "ui/buffer.h" #ifdef HAVE_LIBGPGME #include "pgp/gpg.h" @@ -64,72 +64,72 @@ #include "omemo/omemo.h" #endif -static char* _sub_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _notify_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _theme_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _autoaway_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _autoconnect_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _account_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _who_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _roster_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previous); +static char* _sub_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _notify_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _theme_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _autoaway_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _autoconnect_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _account_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _who_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _roster_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _bookmark_autocomplete(ProfWin *window, const char *const input, gboolean previous); #ifdef HAVE_LIBOTR -static char* _otr_autocomplete(ProfWin* window, const char* const input, gboolean previous); +static char* _otr_autocomplete(ProfWin *window, const char *const input, gboolean previous); #endif #ifdef HAVE_LIBGPGME -static char* _pgp_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _ox_autocomplete(ProfWin* window, const char* const input, gboolean previous); +static char* _pgp_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _ox_autocomplete(ProfWin *window, const char *const input, gboolean previous); #endif #ifdef HAVE_OMEMO -static char* _omemo_autocomplete(ProfWin* window, const char* const input, gboolean previous); +static char* _omemo_autocomplete(ProfWin *window, const char *const input, gboolean previous); #endif -static char* _connect_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _alias_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _join_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _log_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _form_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _form_field_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _occupants_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _kick_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _ban_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _affiliation_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _role_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _resource_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _wintitle_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _inpblock_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _time_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _receipts_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _help_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _wins_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _tls_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _titlebar_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _script_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _subject_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _console_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _win_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _close_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _plugins_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _sendfile_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _blocked_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _tray_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _presence_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _statusbar_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _clear_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _invite_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _status_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _logging_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _color_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _avatar_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _correction_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _correct_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _software_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _url_autocomplete(ProfWin* window, const char* const input, gboolean previous); -static char* _executable_autocomplete(ProfWin* window, const char* const input, gboolean previous); - -static char* _script_autocomplete_func(const char* const prefix, gboolean previous, void* context); - -static char* _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previous); +static char* _connect_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _alias_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _join_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _log_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _form_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _form_field_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _occupants_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _kick_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _ban_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _affiliation_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _role_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _resource_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _wintitle_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _inpblock_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _time_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _receipts_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _help_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _wins_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _tls_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _titlebar_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _script_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _subject_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _console_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _win_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _close_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _plugins_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _sendfile_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _blocked_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _tray_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _presence_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _rooms_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _statusbar_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _clear_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _invite_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _status_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _logging_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _color_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _avatar_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _correction_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _correct_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _software_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _url_autocomplete(ProfWin *window, const char *const input, gboolean previous); +static char* _executable_autocomplete(ProfWin *window, const char *const input, gboolean previous); + +static char* _script_autocomplete_func(const char *const prefix, gboolean previous, void *context); + +static char* _cmd_ac_complete_params(ProfWin *window, const char *const input, gboolean previous); static Autocomplete commands_ac; static Autocomplete who_room_ac; @@ -1053,7 +1053,7 @@ cmd_ac_init(void) } void -cmd_ac_add(const char* const value) +cmd_ac_add(const char *const value) { if (commands_ac == NULL) { return; @@ -1063,7 +1063,7 @@ cmd_ac_add(const char* const value) } void -cmd_ac_add_help(const char* const value) +cmd_ac_add_help(const char *const value) { if (help_ac == NULL) { return; @@ -1073,16 +1073,16 @@ cmd_ac_add_help(const char* const value) } void -cmd_ac_add_cmd(Command* command) +cmd_ac_add_cmd(Command *command) { autocomplete_add(commands_ac, command->cmd); - autocomplete_add(help_ac, command->cmd + 1); + autocomplete_add(help_ac, command->cmd+1); } void -cmd_ac_add_alias(ProfAlias* alias) +cmd_ac_add_alias(ProfAlias *alias) { - GString* ac_alias = g_string_new("/"); + GString *ac_alias = g_string_new("/"); g_string_append(ac_alias, alias->name); autocomplete_add(commands_ac, ac_alias->str); autocomplete_add(aliases_ac, alias->name); @@ -1090,7 +1090,7 @@ cmd_ac_add_alias(ProfAlias* alias) } void -cmd_ac_add_alias_value(char* value) +cmd_ac_add_alias_value(char *value) { if (aliases_ac == NULL) { return; @@ -1100,7 +1100,7 @@ cmd_ac_add_alias_value(char* value) } void -cmd_ac_remove_alias_value(char* value) +cmd_ac_remove_alias_value(char *value) { if (aliases_ac == NULL) { return; @@ -1109,7 +1109,7 @@ cmd_ac_remove_alias_value(char* value) } void -cmd_ac_remove(const char* const value) +cmd_ac_remove(const char *const value) { if (commands_ac == NULL) { return; @@ -1119,7 +1119,7 @@ cmd_ac_remove(const char* const value) } void -cmd_ac_remove_help(const char* const value) +cmd_ac_remove_help(const char *const value) { if (help_ac == NULL) { return; @@ -1129,7 +1129,7 @@ cmd_ac_remove_help(const char* const value) } gboolean -cmd_ac_exists(char* cmd) +cmd_ac_exists(char *cmd) { if (commands_ac == NULL) { return FALSE; @@ -1139,16 +1139,16 @@ cmd_ac_exists(char* cmd) } void -cmd_ac_add_form_fields(DataForm* form) +cmd_ac_add_form_fields(DataForm *form) { if (form == NULL) { return; } - GList* fields = autocomplete_create_list(form->tag_ac); - GList* curr_field = fields; + GList *fields = autocomplete_create_list(form->tag_ac); + GList *curr_field = fields; while (curr_field) { - GString* field_str = g_string_new("/"); + GString *field_str = g_string_new("/"); g_string_append(field_str, curr_field->data); cmd_ac_add(field_str->str); g_string_free(field_str, TRUE); @@ -1158,16 +1158,16 @@ cmd_ac_add_form_fields(DataForm* form) } void -cmd_ac_remove_form_fields(DataForm* form) +cmd_ac_remove_form_fields(DataForm *form) { if (form == NULL) { return; } - GList* fields = autocomplete_create_list(form->tag_ac); - GList* curr_field = fields; + GList *fields = autocomplete_create_list(form->tag_ac); + GList *curr_field = fields; while (curr_field) { - GString* field_str = g_string_new("/"); + GString *field_str = g_string_new("/"); g_string_append(field_str, curr_field->data); cmd_ac_remove(field_str->str); g_string_free(field_str, TRUE); @@ -1177,19 +1177,19 @@ cmd_ac_remove_form_fields(DataForm* form) } char* -cmd_ac_complete(ProfWin* window, const char* const input, gboolean previous) +cmd_ac_complete(ProfWin *window, const char *const input, gboolean previous) { // autocomplete command if ((strncmp(input, "/", 1) == 0) && (!str_contains(input, strlen(input), ' '))) { - char* found = NULL; + char *found = NULL; found = autocomplete_complete(commands_ac, input, TRUE, previous); if (found) { return found; } - // autocomplete parameters + // autocomplete parameters } else { - char* found = _cmd_ac_complete_params(window, input, previous); + char *found = _cmd_ac_complete_params(window, input, previous); if (found) { return found; } @@ -1199,14 +1199,14 @@ cmd_ac_complete(ProfWin* window, const char* const input, gboolean previous) } void -cmd_ac_reset(ProfWin* window) +cmd_ac_reset(ProfWin *window) { jabber_conn_status_t conn_status = connection_get_status(); if (conn_status == JABBER_CONNECTED) { roster_reset_search_attempts(); if (window->type == WIN_CHAT) { - ProfChatWin* chatwin = (ProfChatWin*)window; + ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); PContact contact = roster_get_contact(chatwin->barejid); if (contact) { @@ -1378,14 +1378,14 @@ cmd_ac_reset(ProfWin* window) } if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); muc_autocomplete_reset(mucwin->roomjid); muc_jid_autocomplete_reset(mucwin->roomjid); } if (window->type == WIN_CONFIG) { - ProfConfWin* confwin = (ProfConfWin*)window; + ProfConfWin *confwin = (ProfConfWin*)window; assert(confwin->memcheck == PROFCONFWIN_MEMCHECK); if (confwin->form) { form_reset_autocompleters(confwin->form); @@ -1535,22 +1535,21 @@ cmd_ac_uninit(void) } static void -_filepath_item_free(char** ptr) -{ - char* item = *ptr; +_filepath_item_free(char **ptr) { + char *item = *ptr; free(item); } char* -cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean previous) +cmd_ac_complete_filepath(const char *const input, char *const startstr, gboolean previous) { unsigned int output_off = 0; - char* result = NULL; - char* tmp; + char *result = NULL; + char *tmp; // strip command - char* inpcp = (char*)input + strlen(startstr); + char *inpcp = (char*)input + strlen(startstr); while (*inpcp == ' ') { inpcp++; } @@ -1559,22 +1558,22 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean // strip quotes if (*inpcp == '"') { - tmp = strchr(inpcp + 1, '"'); + tmp = strchr(inpcp+1, '"'); if (tmp) { *tmp = '\0'; } - tmp = strdup(inpcp + 1); + tmp = strdup(inpcp+1); free(inpcp); inpcp = tmp; } // expand ~ to $HOME if (inpcp[0] == '~' && inpcp[1] == '/') { - if (asprintf(&tmp, "%s/%sfoo", getenv("HOME"), inpcp + 2) == -1) { + if (asprintf(&tmp, "%s/%sfoo", getenv("HOME"), inpcp+2) == -1) { free(inpcp); return NULL; } - output_off = strlen(getenv("HOME")) + 1; + output_off = strlen(getenv("HOME"))+1; } else { if (asprintf(&tmp, "%sfoo", inpcp) == -1) { free(inpcp); @@ -1590,11 +1589,11 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean free(inpcp); free(inpcp2); - struct dirent* dir; - GArray* files = g_array_new(TRUE, FALSE, sizeof(char*)); + struct dirent *dir; + GArray *files = g_array_new(TRUE, FALSE, sizeof(char *)); g_array_set_clear_func(files, (GDestroyNotify)_filepath_item_free); - DIR* d = opendir(directory); + DIR *d = opendir(directory); if (d) { while ((dir = readdir(d)) != NULL) { if (strcmp(dir->d_name, ".") == 0) { @@ -1606,17 +1605,17 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean continue; } - char* acstring; + char *acstring; if (output_off) { if (asprintf(&tmp, "%s/%s", directory, dir->d_name) == -1) { free(directory); free(foofile); return NULL; } - if (asprintf(&acstring, "~/%s", tmp + output_off) == -1) { + if (asprintf(&acstring, "~/%s", tmp+output_off) == -1) { free(directory); free(foofile); - return NULL; + return NULL; } free(tmp); } else if (strcmp(directory, "/") == 0) { @@ -1633,7 +1632,7 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean } } - char* acstring_cpy = strdup(acstring); + char *acstring_cpy = strdup(acstring); g_array_append_val(files, acstring_cpy); free(acstring); } @@ -1642,7 +1641,7 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean free(directory); free(foofile); - autocomplete_update(filepath_ac, (char**)files->data); + autocomplete_update(filepath_ac, (char **)files->data); g_array_free(files, TRUE); result = autocomplete_param_with_ac(input, startstr, filepath_ac, TRUE, previous); @@ -1654,16 +1653,16 @@ cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean } static char* -_cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previous) +_cmd_ac_complete_params(ProfWin *window, const char *const input, gboolean previous) { int i; - char* result = NULL; + char *result = NULL; jabber_conn_status_t conn_status = connection_get_status(); // autocomplete boolean settings - gchar* boolean_choices[] = { "/beep", "/intype", "/states", "/outtype", "/flash", "/splash", - "/history", "/vercheck", "/privileges", "/wrap", "/carbons", "/lastactivity", "/os", "/slashguard" }; + gchar *boolean_choices[] = { "/beep", "/intype", "/states", "/outtype", "/flash", "/splash", + "/history", "/vercheck", "/privileges", "/wrap", "/carbons", "/lastactivity", "/os", "/slashguard"}; for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) { result = autocomplete_param_with_func(input, boolean_choices[i], prefs_autocomplete_boolean_choice, previous, NULL); @@ -1674,14 +1673,14 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ // autocomplete nickname in chat rooms if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); if (nick_ac) { - gchar* nick_choices[] = { "/msg", "/info", "/caps" }; + gchar *nick_choices[] = { "/msg", "/info", "/caps" } ; // Remove quote character before and after names when doing autocomplete - char* unquoted = strip_arg_quotes(input); + char *unquoted = strip_arg_quotes(input); for (i = 0; i < ARRAY_SIZE(nick_choices); i++) { result = autocomplete_param_with_ac(unquoted, nick_choices[i], nick_ac, TRUE, previous); if (result) { @@ -1692,11 +1691,11 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ free(unquoted); } - // otherwise autocomplete using roster + // otherwise autocomplete using roster } else if (conn_status == JABBER_CONNECTED) { - gchar* contact_choices[] = { "/msg", "/info" }; + gchar *contact_choices[] = { "/msg", "/info" }; // Remove quote character before and after names when doing autocomplete - char* unquoted = strip_arg_quotes(input); + char *unquoted = strip_arg_quotes(input); for (i = 0; i < ARRAY_SIZE(contact_choices); i++) { result = autocomplete_param_with_func(unquoted, contact_choices[i], roster_contact_autocomplete, previous, NULL); if (result) { @@ -1706,7 +1705,7 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } free(unquoted); - gchar* resource_choices[] = { "/caps", "/ping" }; + gchar *resource_choices[] = { "/caps", "/ping" }; for (i = 0; i < ARRAY_SIZE(resource_choices); i++) { result = autocomplete_param_with_func(input, resource_choices[i], roster_fulljid_autocomplete, previous, NULL); if (result) { @@ -1715,7 +1714,7 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } } - gchar* invite_choices[] = { "/join" }; + gchar *invite_choices[] = { "/join" }; for (i = 0; i < ARRAY_SIZE(invite_choices); i++) { result = autocomplete_param_with_func(input, invite_choices[i], muc_invites_find, previous, NULL); if (result) { @@ -1723,7 +1722,7 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } } - gchar* cmds[] = { "/prefs", "/disco", "/room", "/autoping", "/mainwin", "/inputwin" }; + gchar *cmds[] = { "/prefs", "/disco", "/room", "/autoping", "/mainwin", "/inputwin" }; Autocomplete completers[] = { prefs_ac, disco_ac, room_ac, autoping_ac, winpos_ac, winpos_ac }; for (i = 0; i < ARRAY_SIZE(cmds); i++) { @@ -1733,71 +1732,71 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } } - GHashTable* ac_funcs = g_hash_table_new(g_str_hash, g_str_equal); - g_hash_table_insert(ac_funcs, "/help", _help_autocomplete); - g_hash_table_insert(ac_funcs, "/who", _who_autocomplete); - g_hash_table_insert(ac_funcs, "/sub", _sub_autocomplete); - g_hash_table_insert(ac_funcs, "/notify", _notify_autocomplete); - g_hash_table_insert(ac_funcs, "/autoaway", _autoaway_autocomplete); - g_hash_table_insert(ac_funcs, "/theme", _theme_autocomplete); - g_hash_table_insert(ac_funcs, "/log", _log_autocomplete); - g_hash_table_insert(ac_funcs, "/account", _account_autocomplete); - g_hash_table_insert(ac_funcs, "/roster", _roster_autocomplete); - g_hash_table_insert(ac_funcs, "/bookmark", _bookmark_autocomplete); - g_hash_table_insert(ac_funcs, "/autoconnect", _autoconnect_autocomplete); + GHashTable *ac_funcs = g_hash_table_new(g_str_hash, g_str_equal); + g_hash_table_insert(ac_funcs, "/help", _help_autocomplete); + g_hash_table_insert(ac_funcs, "/who", _who_autocomplete); + g_hash_table_insert(ac_funcs, "/sub", _sub_autocomplete); + g_hash_table_insert(ac_funcs, "/notify", _notify_autocomplete); + g_hash_table_insert(ac_funcs, "/autoaway", _autoaway_autocomplete); + g_hash_table_insert(ac_funcs, "/theme", _theme_autocomplete); + g_hash_table_insert(ac_funcs, "/log", _log_autocomplete); + g_hash_table_insert(ac_funcs, "/account", _account_autocomplete); + g_hash_table_insert(ac_funcs, "/roster", _roster_autocomplete); + g_hash_table_insert(ac_funcs, "/bookmark", _bookmark_autocomplete); + g_hash_table_insert(ac_funcs, "/autoconnect", _autoconnect_autocomplete); #ifdef HAVE_LIBOTR - g_hash_table_insert(ac_funcs, "/otr", _otr_autocomplete); + g_hash_table_insert(ac_funcs, "/otr", _otr_autocomplete); #endif #ifdef HAVE_LIBGPGME - g_hash_table_insert(ac_funcs, "/pgp", _pgp_autocomplete); - g_hash_table_insert(ac_funcs, "/ox", _ox_autocomplete); + g_hash_table_insert(ac_funcs, "/pgp", _pgp_autocomplete); + g_hash_table_insert(ac_funcs, "/ox", _ox_autocomplete); #endif #ifdef HAVE_OMEMO - g_hash_table_insert(ac_funcs, "/omemo", _omemo_autocomplete); + g_hash_table_insert(ac_funcs, "/omemo", _omemo_autocomplete); #endif - g_hash_table_insert(ac_funcs, "/connect", _connect_autocomplete); - g_hash_table_insert(ac_funcs, "/alias", _alias_autocomplete); - g_hash_table_insert(ac_funcs, "/join", _join_autocomplete); - g_hash_table_insert(ac_funcs, "/form", _form_autocomplete); - g_hash_table_insert(ac_funcs, "/occupants", _occupants_autocomplete); - g_hash_table_insert(ac_funcs, "/kick", _kick_autocomplete); - g_hash_table_insert(ac_funcs, "/ban", _ban_autocomplete); - g_hash_table_insert(ac_funcs, "/affiliation", _affiliation_autocomplete); - g_hash_table_insert(ac_funcs, "/role", _role_autocomplete); - g_hash_table_insert(ac_funcs, "/resource", _resource_autocomplete); - g_hash_table_insert(ac_funcs, "/wintitle", _wintitle_autocomplete); - g_hash_table_insert(ac_funcs, "/inpblock", _inpblock_autocomplete); - g_hash_table_insert(ac_funcs, "/time", _time_autocomplete); - g_hash_table_insert(ac_funcs, "/receipts", _receipts_autocomplete); - g_hash_table_insert(ac_funcs, "/wins", _wins_autocomplete); - g_hash_table_insert(ac_funcs, "/tls", _tls_autocomplete); - g_hash_table_insert(ac_funcs, "/titlebar", _titlebar_autocomplete); - g_hash_table_insert(ac_funcs, "/script", _script_autocomplete); - g_hash_table_insert(ac_funcs, "/subject", _subject_autocomplete); - g_hash_table_insert(ac_funcs, "/console", _console_autocomplete); - g_hash_table_insert(ac_funcs, "/win", _win_autocomplete); - g_hash_table_insert(ac_funcs, "/close", _close_autocomplete); - g_hash_table_insert(ac_funcs, "/plugins", _plugins_autocomplete); - g_hash_table_insert(ac_funcs, "/sendfile", _sendfile_autocomplete); - g_hash_table_insert(ac_funcs, "/blocked", _blocked_autocomplete); - g_hash_table_insert(ac_funcs, "/tray", _tray_autocomplete); - g_hash_table_insert(ac_funcs, "/presence", _presence_autocomplete); - g_hash_table_insert(ac_funcs, "/rooms", _rooms_autocomplete); - g_hash_table_insert(ac_funcs, "/statusbar", _statusbar_autocomplete); - g_hash_table_insert(ac_funcs, "/clear", _clear_autocomplete); - g_hash_table_insert(ac_funcs, "/invite", _invite_autocomplete); - g_hash_table_insert(ac_funcs, "/status", _status_autocomplete); - g_hash_table_insert(ac_funcs, "/logging", _logging_autocomplete); - g_hash_table_insert(ac_funcs, "/color", _color_autocomplete); - g_hash_table_insert(ac_funcs, "/avatar", _avatar_autocomplete); - g_hash_table_insert(ac_funcs, "/correction", _correction_autocomplete); - g_hash_table_insert(ac_funcs, "/correct", _correct_autocomplete); - g_hash_table_insert(ac_funcs, "/software", _software_autocomplete); - g_hash_table_insert(ac_funcs, "/url", _url_autocomplete); - g_hash_table_insert(ac_funcs, "/executable", _executable_autocomplete); + g_hash_table_insert(ac_funcs, "/connect", _connect_autocomplete); + g_hash_table_insert(ac_funcs, "/alias", _alias_autocomplete); + g_hash_table_insert(ac_funcs, "/join", _join_autocomplete); + g_hash_table_insert(ac_funcs, "/form", _form_autocomplete); + g_hash_table_insert(ac_funcs, "/occupants", _occupants_autocomplete); + g_hash_table_insert(ac_funcs, "/kick", _kick_autocomplete); + g_hash_table_insert(ac_funcs, "/ban", _ban_autocomplete); + g_hash_table_insert(ac_funcs, "/affiliation", _affiliation_autocomplete); + g_hash_table_insert(ac_funcs, "/role", _role_autocomplete); + g_hash_table_insert(ac_funcs, "/resource", _resource_autocomplete); + g_hash_table_insert(ac_funcs, "/wintitle", _wintitle_autocomplete); + g_hash_table_insert(ac_funcs, "/inpblock", _inpblock_autocomplete); + g_hash_table_insert(ac_funcs, "/time", _time_autocomplete); + g_hash_table_insert(ac_funcs, "/receipts", _receipts_autocomplete); + g_hash_table_insert(ac_funcs, "/wins", _wins_autocomplete); + g_hash_table_insert(ac_funcs, "/tls", _tls_autocomplete); + g_hash_table_insert(ac_funcs, "/titlebar", _titlebar_autocomplete); + g_hash_table_insert(ac_funcs, "/script", _script_autocomplete); + g_hash_table_insert(ac_funcs, "/subject", _subject_autocomplete); + g_hash_table_insert(ac_funcs, "/console", _console_autocomplete); + g_hash_table_insert(ac_funcs, "/win", _win_autocomplete); + g_hash_table_insert(ac_funcs, "/close", _close_autocomplete); + g_hash_table_insert(ac_funcs, "/plugins", _plugins_autocomplete); + g_hash_table_insert(ac_funcs, "/sendfile", _sendfile_autocomplete); + g_hash_table_insert(ac_funcs, "/blocked", _blocked_autocomplete); + g_hash_table_insert(ac_funcs, "/tray", _tray_autocomplete); + g_hash_table_insert(ac_funcs, "/presence", _presence_autocomplete); + g_hash_table_insert(ac_funcs, "/rooms", _rooms_autocomplete); + g_hash_table_insert(ac_funcs, "/statusbar", _statusbar_autocomplete); + g_hash_table_insert(ac_funcs, "/clear", _clear_autocomplete); + g_hash_table_insert(ac_funcs, "/invite", _invite_autocomplete); + g_hash_table_insert(ac_funcs, "/status", _status_autocomplete); + g_hash_table_insert(ac_funcs, "/logging", _logging_autocomplete); + g_hash_table_insert(ac_funcs, "/color", _color_autocomplete); + g_hash_table_insert(ac_funcs, "/avatar", _avatar_autocomplete); + g_hash_table_insert(ac_funcs, "/correction", _correction_autocomplete); + g_hash_table_insert(ac_funcs, "/correct", _correct_autocomplete); + g_hash_table_insert(ac_funcs, "/software", _software_autocomplete); + g_hash_table_insert(ac_funcs, "/url", _url_autocomplete); + g_hash_table_insert(ac_funcs, "/executable", _executable_autocomplete); int len = strlen(input); - char parsed[len + 1]; + char parsed[len+1]; i = 0; while (i < len) { if (input[i] == ' ') { @@ -1809,7 +1808,7 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } parsed[i] = '\0'; - char* (*ac_func)(ProfWin*, const char* const, gboolean) = g_hash_table_lookup(ac_funcs, parsed); + char * (*ac_func)(ProfWin*, const char * const, gboolean) = g_hash_table_lookup(ac_funcs, parsed); if (ac_func) { result = ac_func(window, input, previous); if (result) { @@ -1835,9 +1834,9 @@ _cmd_ac_complete_params(ProfWin* window, const char* const input, gboolean previ } static char* -_sub_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_sub_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/sub allow", presence_sub_request_find, previous, NULL); if (result) { return result; @@ -1855,9 +1854,9 @@ _sub_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_tray_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_tray_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/tray read", prefs_autocomplete_boolean_choice, previous, NULL); if (result) { return result; @@ -1872,9 +1871,9 @@ _tray_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_who_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_who_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (window->type == WIN_MUC) { result = autocomplete_param_with_ac(input, "/who", who_room_ac, TRUE, previous); @@ -1885,9 +1884,9 @@ _who_autocomplete(ProfWin* window, const char* const input, gboolean previous) jabber_conn_status_t conn_status = connection_get_status(); if (conn_status == JABBER_CONNECTED) { int i = 0; - gchar* group_commands[] = { "/who any", "/who online", "/who offline", - "/who chat", "/who away", "/who xa", "/who dnd", "/who available", - "/who unavailable" }; + gchar *group_commands[] = { "/who any", "/who online", "/who offline", + "/who chat", "/who away", "/who xa", "/who dnd", "/who available", + "/who unavailable" }; for (i = 0; i < ARRAY_SIZE(group_commands); i++) { result = autocomplete_param_with_func(input, group_commands[i], roster_group_autocomplete, previous, NULL); @@ -1907,9 +1906,9 @@ _who_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_roster_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_roster_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/roster room private char", roster_char_ac, TRUE, previous); if (result) { return result; @@ -2085,9 +2084,9 @@ _roster_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_blocked_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_blocked_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/blocked remove", blocked_ac_find, previous, NULL); if (result) { @@ -2103,18 +2102,18 @@ _blocked_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_bookmark_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; gboolean result; - gchar** args = parse_args(input, 2, 8, &result); + gchar **args = parse_args(input, 2, 8, &result); - if (result && ((strcmp(args[0], "add") == 0) || (strcmp(args[0], "update") == 0))) { + if (result && ((strcmp(args[0], "add") == 0) || (strcmp(args[0], "update") == 0)) ) { gboolean space_at_end = g_str_has_suffix(input, " "); int num_args = g_strv_length(args); if ((num_args == 2 && space_at_end) || (num_args == 3 && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s", args[0], args[1]); found = autocomplete_param_with_ac(input, beginning->str, bookmark_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -2124,8 +2123,8 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } } if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "autojoin") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "autojoin") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + || (num_args == 4 && (g_strcmp0(args[2], "autojoin") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_func(input, beginning->str, prefs_autocomplete_boolean_choice, previous, NULL); g_string_free(beginning, TRUE); @@ -2135,7 +2134,7 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } } if ((num_args == 4 && space_at_end) || (num_args == 5 && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s %s %s", args[0], args[1], args[2], args[3]); found = autocomplete_param_with_ac(input, beginning->str, bookmark_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -2145,8 +2144,8 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } } if ((num_args == 5 && space_at_end && (g_strcmp0(args[4], "autojoin") == 0)) - || (num_args == 6 && (g_strcmp0(args[4], "autojoin") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + || (num_args == 6 && (g_strcmp0(args[4], "autojoin") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4]); found = autocomplete_param_with_func(input, beginning->str, prefs_autocomplete_boolean_choice, previous, NULL); g_string_free(beginning, TRUE); @@ -2156,7 +2155,7 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } } if ((num_args == 6 && space_at_end) || (num_args == 7 && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5]); found = autocomplete_param_with_ac(input, beginning->str, bookmark_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -2166,8 +2165,8 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } } if ((num_args == 7 && space_at_end && (g_strcmp0(args[6], "autojoin") == 0)) - || (num_args == 8 && (g_strcmp0(args[6], "autojoin") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/bookmark"); + || (num_args == 8 && (g_strcmp0(args[6], "autojoin") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/bookmark"); g_string_append_printf(beginning, " %s %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5], args[6]); found = autocomplete_param_with_func(input, beginning->str, prefs_autocomplete_boolean_choice, previous, NULL); g_string_free(beginning, TRUE); @@ -2215,18 +2214,18 @@ _bookmark_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_notify_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_notify_autocomplete(ProfWin *window, const char *const input, gboolean previous) { int i = 0; - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/notify room trigger remove", prefs_autocomplete_room_trigger, previous, NULL); if (result) { return result; } - gchar* boolean_choices1[] = { "/notify room current", "/notify chat current", "/notify typing current", - "/notify room text", "/notify chat text" }; + gchar *boolean_choices1[] = { "/notify room current", "/notify chat current", "/notify typing current", + "/notify room text", "/notify chat text" }; for (i = 0; i < ARRAY_SIZE(boolean_choices1); i++) { result = autocomplete_param_with_func(input, boolean_choices1[i], prefs_autocomplete_boolean_choice, previous, NULL); if (result) { @@ -2259,7 +2258,7 @@ _notify_autocomplete(ProfWin* window, const char* const input, gboolean previous return result; } - gchar* boolean_choices2[] = { "/notify invite", "/notify sub", "/notify mention", "/notify trigger" }; + gchar *boolean_choices2[] = { "/notify invite", "/notify sub", "/notify mention", "/notify trigger"}; for (i = 0; i < ARRAY_SIZE(boolean_choices2); i++) { result = autocomplete_param_with_func(input, boolean_choices2[i], prefs_autocomplete_boolean_choice, previous, NULL); if (result) { @@ -2276,9 +2275,9 @@ _notify_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_autoaway_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_autoaway_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/autoaway mode", autoaway_mode_ac, TRUE, previous); if (result) { @@ -2308,9 +2307,9 @@ _autoaway_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_log_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_log_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/log rotate", prefs_autocomplete_boolean_choice, previous, NULL); if (result) { @@ -2329,9 +2328,9 @@ _log_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_autoconnect_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_autoconnect_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/autoconnect set", accounts_find_enabled, previous, NULL); if (result) { @@ -2348,9 +2347,9 @@ _autoconnect_autocomplete(ProfWin* window, const char* const input, gboolean pre #ifdef HAVE_LIBOTR static char* -_otr_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_otr_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; jabber_conn_status_t conn_status = connection_get_status(); @@ -2369,9 +2368,9 @@ _otr_autocomplete(ProfWin* window, const char* const input, gboolean previous) // /otr policy always user@server.com if (conn_status == JABBER_CONNECTED) { gboolean result; - gchar** args = parse_args(input, 2, 3, &result); + gchar **args = parse_args(input, 2, 3, &result); if (result && (strcmp(args[0], "policy") == 0)) { - GString* beginning = g_string_new("/otr "); + GString *beginning = g_string_new("/otr "); g_string_append(beginning, args[0]); g_string_append(beginning, " "); if (args[1]) { @@ -2409,9 +2408,9 @@ _otr_autocomplete(ProfWin* window, const char* const input, gboolean previous) #ifdef HAVE_LIBGPGME static char* -_pgp_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_pgp_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; jabber_conn_status_t conn_status = connection_get_status(); @@ -2433,9 +2432,9 @@ _pgp_autocomplete(ProfWin* window, const char* const input, gboolean previous) } gboolean result; - gchar** args = parse_args(input, 2, 3, &result); + gchar **args = parse_args(input, 2, 3, &result); if ((strncmp(input, "/pgp", 4) == 0) && (result == TRUE)) { - GString* beginning = g_string_new("/pgp "); + GString *beginning = g_string_new("/pgp "); g_string_append(beginning, args[0]); if (args[1]) { g_string_append(beginning, " "); @@ -2471,9 +2470,9 @@ _pgp_autocomplete(ProfWin* window, const char* const input, gboolean previous) * */ static char* -_ox_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_ox_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; jabber_conn_status_t conn_status = connection_get_status(); @@ -2495,9 +2494,9 @@ _ox_autocomplete(ProfWin* window, const char* const input, gboolean previous) } gboolean result; - gchar** args = parse_args(input, 2, 3, &result); + gchar **args = parse_args(input, 2, 3, &result); if ((strncmp(input, "/ox", 4) == 0) && (result == TRUE)) { - GString* beginning = g_string_new("/ox "); + GString *beginning = g_string_new("/ox "); g_string_append(beginning, args[0]); if (args[1]) { g_string_append(beginning, " "); @@ -2530,9 +2529,9 @@ _ox_autocomplete(ProfWin* window, const char* const input, gboolean previous) #ifdef HAVE_OMEMO static char* -_omemo_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_omemo_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_ac(input, "/omemo log", omemo_log_ac, TRUE, previous); if (found) { @@ -2563,7 +2562,7 @@ _omemo_autocomplete(ProfWin* window, const char* const input, gboolean previous) } if (window->type == WIN_CHAT) { - ProfChatWin* chatwin = (ProfChatWin*)window; + ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); found = autocomplete_param_with_func(input, "/omemo trust", omemo_fingerprint_autocomplete, previous, chatwin->barejid); if (found) { @@ -2578,9 +2577,9 @@ _omemo_autocomplete(ProfWin* window, const char* const input, gboolean previous) int num_tokens = count_tokens(input); if (num_tokens == 4) { gboolean result; - gchar** args = parse_args(input, 2, 3, &result); + gchar **args = parse_args(input, 2, 3, &result); if (result) { - gchar* jid = g_strdup(args[1]); + gchar *jid = g_strdup(args[1]); found = autocomplete_param_no_with_func(input, "/omemo trust", 4, omemo_fingerprint_autocomplete, previous, jid); if (found) { return found; @@ -2600,9 +2599,9 @@ _omemo_autocomplete(ProfWin* window, const char* const input, gboolean previous) #endif static char* -_plugins_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_plugins_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (strncmp(input, "/plugins sourcepath set ", 24) == 0) { return cmd_ac_complete_filepath(input, "/plugins sourcepath set", previous); @@ -2622,8 +2621,8 @@ _plugins_autocomplete(ProfWin* window, const char* const input, gboolean previou if (strncmp(input, "/plugins load ", 14) == 0) { if (plugins_load_ac == NULL) { plugins_load_ac = autocomplete_new(); - GSList* plugins = plugins_unloaded_list(); - GSList* curr = plugins; + GSList *plugins = plugins_unloaded_list(); + GSList *curr = plugins; while (curr) { autocomplete_add(plugins_load_ac, curr->data); curr = g_slist_next(curr); @@ -2639,8 +2638,8 @@ _plugins_autocomplete(ProfWin* window, const char* const input, gboolean previou if (strncmp(input, "/plugins reload ", 16) == 0) { if (plugins_reload_ac == NULL) { plugins_reload_ac = autocomplete_new(); - GList* plugins = plugins_loaded_list(); - GList* curr = plugins; + GList *plugins = plugins_loaded_list(); + GList *curr = plugins; while (curr) { autocomplete_add(plugins_reload_ac, curr->data); curr = g_list_next(curr); @@ -2656,8 +2655,8 @@ _plugins_autocomplete(ProfWin* window, const char* const input, gboolean previou if (strncmp(input, "/plugins unload ", 16) == 0) { if (plugins_unload_ac == NULL) { plugins_unload_ac = autocomplete_new(); - GList* plugins = plugins_loaded_list(); - GList* curr = plugins; + GList *plugins = plugins_loaded_list(); + GList *curr = plugins; while (curr) { autocomplete_add(plugins_unload_ac, curr->data); curr = g_list_next(curr); @@ -2679,15 +2678,15 @@ _plugins_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_theme_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_theme_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (strncmp(input, "/theme load ", 12) == 0) { if (theme_load_ac == NULL) { theme_load_ac = autocomplete_new(); - GSList* themes = theme_list(); - GSList* curr = themes; + GSList *themes = theme_list(); + GSList *curr = themes; while (curr) { autocomplete_add(theme_load_ac, curr->data); @@ -2707,8 +2706,8 @@ _theme_autocomplete(ProfWin* window, const char* const input, gboolean previous) if (strncmp(input, "/theme full-load ", 17) == 0) { if (theme_load_ac == NULL) { theme_load_ac = autocomplete_new(); - GSList* themes = theme_list(); - GSList* curr = themes; + GSList *themes = theme_list(); + GSList *curr = themes; while (curr) { autocomplete_add(theme_load_ac, curr->data); @@ -2734,12 +2733,12 @@ _theme_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_script_autocomplete_func(const char* const prefix, gboolean previous, void* context) +_script_autocomplete_func(const char *const prefix, gboolean previous, void *context) { if (script_show_ac == NULL) { script_show_ac = autocomplete_new(); - GSList* scripts = scripts_list(); - GSList* curr = scripts; + GSList *scripts = scripts_list(); + GSList *curr = scripts; while (curr) { autocomplete_add(script_show_ac, curr->data); curr = g_slist_next(curr); @@ -2750,10 +2749,11 @@ _script_autocomplete_func(const char* const prefix, gboolean previous, void* con return autocomplete_complete(script_show_ac, prefix, FALSE, previous); } + static char* -_script_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_script_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (strncmp(input, "/script show ", 13) == 0) { result = autocomplete_param_with_func(input, "/script show", _script_autocomplete_func, previous, NULL); if (result) { @@ -2777,13 +2777,13 @@ _script_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_resource_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_resource_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; jabber_conn_status_t conn_status = connection_get_status(); if (conn_status == JABBER_CONNECTED && window->type == WIN_CHAT) { - ProfChatWin* chatwin = (ProfChatWin*)window; + ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); PContact contact = roster_get_contact(chatwin->barejid); if (contact) { @@ -2814,9 +2814,9 @@ _resource_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_wintitle_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_wintitle_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_func(input, "/wintitle show", prefs_autocomplete_boolean_choice, previous, NULL); if (found) { @@ -2837,9 +2837,9 @@ _wintitle_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_inpblock_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_inpblock_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_func(input, "/inpblock dynamic", prefs_autocomplete_boolean_choice, previous, NULL); if (found) { @@ -2855,16 +2855,16 @@ _inpblock_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_form_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_form_autocomplete(ProfWin *window, const char *const input, gboolean previous) { if (window->type != WIN_CONFIG) { return NULL; } - char* found = NULL; + char *found = NULL; - ProfConfWin* confwin = (ProfConfWin*)window; - DataForm* form = confwin->form; + ProfConfWin *confwin = (ProfConfWin*)window; + DataForm *form = confwin->form; if (form) { found = autocomplete_param_with_ac(input, "/form help", form->tag_ac, TRUE, previous); if (found) { @@ -2881,34 +2881,33 @@ _form_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_form_field_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_form_field_autocomplete(ProfWin *window, const char *const input, gboolean previous) { if (window->type != WIN_CONFIG) { return NULL; } - char* found = NULL; + char *found = NULL; - ProfConfWin* confwin = (ProfConfWin*)window; - DataForm* form = confwin->form; + ProfConfWin *confwin = (ProfConfWin*)window; + DataForm *form = confwin->form; if (form == NULL) { return NULL; } - gchar** split = g_strsplit(input, " ", 0); + gchar **split = g_strsplit(input, " ", 0); if (g_strv_length(split) == 3) { - char* field_tag = split[0] + 1; + char *field_tag = split[0]+1; if (form_tag_exists(form, field_tag)) { form_field_type_t field_type = form_get_field_type(form, field_tag); - Autocomplete value_ac = form_get_value_ac(form, field_tag); - ; - GString* beginning = g_string_new(split[0]); + Autocomplete value_ac = form_get_value_ac(form, field_tag);; + GString *beginning = g_string_new(split[0]); g_string_append(beginning, " "); g_string_append(beginning, split[1]); if (((g_strcmp0(split[1], "add") == 0) || (g_strcmp0(split[1], "remove") == 0)) - && field_type == FIELD_LIST_MULTI) { + && field_type == FIELD_LIST_MULTI) { found = autocomplete_param_with_ac(input, beginning->str, value_ac, TRUE, previous); } else if ((g_strcmp0(split[1], "remove") == 0) && field_type == FIELD_TEXT_MULTI) { @@ -2922,26 +2921,26 @@ _form_field_autocomplete(ProfWin* window, const char* const input, gboolean prev } } else if (g_strv_length(split) == 2) { - char* field_tag = split[0] + 1; + char *field_tag = split[0]+1; if (form_tag_exists(form, field_tag)) { form_field_type_t field_type = form_get_field_type(form, field_tag); - Autocomplete value_ac = form_get_value_ac(form, field_tag); - ; - - switch (field_type) { - case FIELD_BOOLEAN: - found = autocomplete_param_with_func(input, split[0], prefs_autocomplete_boolean_choice, previous, NULL); - break; - case FIELD_LIST_SINGLE: - found = autocomplete_param_with_ac(input, split[0], value_ac, TRUE, previous); - break; - case FIELD_LIST_MULTI: - case FIELD_JID_MULTI: - case FIELD_TEXT_MULTI: - found = autocomplete_param_with_ac(input, split[0], form_field_multi_ac, TRUE, previous); - break; - default: - break; + Autocomplete value_ac = form_get_value_ac(form, field_tag);; + + switch (field_type) + { + case FIELD_BOOLEAN: + found = autocomplete_param_with_func(input, split[0], prefs_autocomplete_boolean_choice, previous, NULL); + break; + case FIELD_LIST_SINGLE: + found = autocomplete_param_with_ac(input, split[0], value_ac, TRUE, previous); + break; + case FIELD_LIST_MULTI: + case FIELD_JID_MULTI: + case FIELD_TEXT_MULTI: + found = autocomplete_param_with_ac(input, split[0], form_field_multi_ac, TRUE, previous); + break; + default: + break; } } } @@ -2952,9 +2951,9 @@ _form_field_autocomplete(ProfWin* window, const char* const input, gboolean prev } static char* -_occupants_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_occupants_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_ac(input, "/occupants default show", occupants_show_ac, TRUE, previous); if (found) { @@ -3015,9 +3014,9 @@ _occupants_autocomplete(ProfWin* window, const char* const input, gboolean previ } static char* -_time_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_time_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_ac(input, "/time statusbar", time_format_ac, TRUE, previous); if (found) { @@ -3073,58 +3072,58 @@ _time_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_kick_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_kick_autocomplete(ProfWin *window, const char *const input, gboolean previous) { if (window->type != WIN_MUC) { return NULL; } - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); if (nick_ac == NULL) { return NULL; } - char* result = autocomplete_param_with_ac(input, "/kick", nick_ac, TRUE, previous); + char *result = autocomplete_param_with_ac(input, "/kick", nick_ac, TRUE, previous); return result; } static char* -_ban_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_ban_autocomplete(ProfWin *window, const char *const input, gboolean previous) { if (window->type != WIN_MUC) { return NULL; } - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete jid_ac = muc_roster_jid_ac(mucwin->roomjid); if (jid_ac == NULL) { return NULL; } - char* result = autocomplete_param_with_ac(input, "/ban", jid_ac, TRUE, previous); + char *result = autocomplete_param_with_ac(input, "/ban", jid_ac, TRUE, previous); return result; } static char* -_affiliation_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_affiliation_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); gboolean parse_result; Autocomplete jid_ac = muc_roster_jid_ac(mucwin->roomjid); - gchar** args = parse_args(input, 2, 3, &parse_result); + gchar **args = parse_args(input, 2, 3, &parse_result); if ((strncmp(input, "/affiliation", 12) == 0) && (parse_result == TRUE)) { - GString* beginning = g_string_new("/affiliation "); + GString *beginning = g_string_new("/affiliation "); g_string_append(beginning, args[0]); g_string_append(beginning, " "); if (args[1]) { @@ -3161,20 +3160,20 @@ _affiliation_autocomplete(ProfWin* window, const char* const input, gboolean pre } static char* -_role_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_role_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); gboolean parse_result; Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); - gchar** args = parse_args(input, 2, 3, &parse_result); + gchar **args = parse_args(input, 2, 3, &parse_result); if ((strncmp(input, "/role", 5) == 0) && (parse_result == TRUE)) { - GString* beginning = g_string_new("/role "); + GString *beginning = g_string_new("/role "); g_string_append(beginning, args[0]); g_string_append(beginning, " "); if (args[1]) { @@ -3211,9 +3210,9 @@ _role_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_wins_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_wins_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/wins", wins_ac, TRUE, previous); if (result) { @@ -3224,9 +3223,9 @@ _wins_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_tls_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_tls_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/tls revoke", tlscerts_complete, previous, NULL); if (result) { @@ -3252,9 +3251,9 @@ _tls_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_titlebar_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_titlebar_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/titlebar show", titlebar_show_ac, TRUE, previous); if (result) { @@ -3275,9 +3274,9 @@ _titlebar_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_receipts_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_receipts_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/receipts send", prefs_autocomplete_boolean_choice, previous, NULL); if (result) { @@ -3298,9 +3297,9 @@ _receipts_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_alias_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_alias_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/alias remove", aliases_ac, TRUE, previous); if (result) { @@ -3316,18 +3315,18 @@ _alias_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_connect_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_connect_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; gboolean result = FALSE; - gchar** args = parse_args(input, 1, 9, &result); + gchar **args = parse_args(input, 1, 9, &result); if (result) { gboolean space_at_end = g_str_has_suffix(input, " "); int num_args = g_strv_length(args); if ((num_args == 1 && space_at_end) || (num_args == 2 && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s", args[0]); found = autocomplete_param_with_ac(input, beginning->str, connect_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3337,8 +3336,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 2 && space_at_end && (g_strcmp0(args[1], "tls") == 0)) - || (num_args == 3 && (g_strcmp0(args[1], "tls") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 3 && (g_strcmp0(args[1], "tls") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s", args[0], args[1]); found = autocomplete_param_with_ac(input, beginning->str, tls_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3348,7 +3347,7 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 3 && space_at_end) || (num_args == 4 && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, connect_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3358,8 +3357,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 4 && space_at_end && (g_strcmp0(args[3], "tls") == 0)) - || (num_args == 5 && (g_strcmp0(args[3], "tls") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 5 && (g_strcmp0(args[3], "tls") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s", args[0], args[1], args[2], args[3]); found = autocomplete_param_with_ac(input, beginning->str, tls_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3369,7 +3368,7 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 5 && space_at_end) || (num_args == 6 && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4]); found = autocomplete_param_with_ac(input, beginning->str, connect_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3379,8 +3378,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 6 && space_at_end && (g_strcmp0(args[5], "tls") == 0)) - || (num_args == 7 && (g_strcmp0(args[5], "tls") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 7 && (g_strcmp0(args[5], "tls") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5]); found = autocomplete_param_with_ac(input, beginning->str, tls_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3390,7 +3389,7 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 7 && space_at_end) || (num_args == 8 && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5], args[6]); found = autocomplete_param_with_ac(input, beginning->str, connect_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3400,8 +3399,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 8 && space_at_end && (g_strcmp0(args[7], "tls") == 0)) - || (num_args == 9 && (g_strcmp0(args[7], "tls") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 9 && (g_strcmp0(args[7], "tls") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); found = autocomplete_param_with_ac(input, beginning->str, tls_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3414,8 +3413,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou /* auth option */ if ((num_args == 2 && space_at_end && (g_strcmp0(args[1], "auth") == 0)) - || (num_args == 3 && (g_strcmp0(args[1], "auth") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 3 && (g_strcmp0(args[1], "auth") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s", args[0], args[1]); found = autocomplete_param_with_ac(input, beginning->str, auth_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3425,8 +3424,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 4 && space_at_end && (g_strcmp0(args[3], "auth") == 0)) - || (num_args == 5 && (g_strcmp0(args[3], "auth") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 5 && (g_strcmp0(args[3], "auth") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s", args[0], args[1], args[2], args[3]); found = autocomplete_param_with_ac(input, beginning->str, auth_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3436,8 +3435,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 6 && space_at_end && (g_strcmp0(args[5], "auth") == 0)) - || (num_args == 7 && (g_strcmp0(args[5], "auth") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 7 && (g_strcmp0(args[5], "auth") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5]); found = autocomplete_param_with_ac(input, beginning->str, auth_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3447,8 +3446,8 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 8 && space_at_end && (g_strcmp0(args[7], "auth") == 0)) - || (num_args == 9 && (g_strcmp0(args[7], "auth") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/connect"); + || (num_args == 9 && (g_strcmp0(args[7], "auth") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/connect"); g_string_append_printf(beginning, " %s %s %s %s %s %s %s %s", args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); found = autocomplete_param_with_ac(input, beginning->str, auth_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3470,9 +3469,9 @@ _connect_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_help_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_help_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/help commands", help_commands_ac, TRUE, previous); if (result) { @@ -3488,18 +3487,18 @@ _help_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_join_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_join_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; gboolean result = FALSE; - gchar** args = parse_args(input, 1, 5, &result); + gchar **args = parse_args(input, 1, 5, &result); if (result) { gboolean space_at_end = g_str_has_suffix(input, " "); int num_args = g_strv_length(args); if ((num_args == 1 && space_at_end) || (num_args == 2 && !space_at_end)) { - GString* beginning = g_string_new("/join"); + GString *beginning = g_string_new("/join"); g_string_append_printf(beginning, " %s", args[0]); found = autocomplete_param_with_ac(input, beginning->str, join_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3509,7 +3508,7 @@ _join_autocomplete(ProfWin* window, const char* const input, gboolean previous) } } if ((num_args == 3 && space_at_end) || (num_args == 4 && !space_at_end)) { - GString* beginning = g_string_new("/join"); + GString *beginning = g_string_new("/join"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, join_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3531,9 +3530,9 @@ _join_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_console_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_console_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/console chat", console_msg_ac, TRUE, previous); if (result) { @@ -3557,41 +3556,41 @@ _console_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_win_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_win_autocomplete(ProfWin *window, const char *const input, gboolean previous) { return autocomplete_param_with_func(input, "/win", win_autocomplete, previous, NULL); } static char* -_close_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_close_autocomplete(ProfWin *window, const char *const input, gboolean previous) { return autocomplete_param_with_func(input, "/close", win_close_autocomplete, previous, NULL); } static char* -_sendfile_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_sendfile_autocomplete(ProfWin *window, const char *const input, gboolean previous) { return cmd_ac_complete_filepath(input, "/sendfile", previous); } static char* -_subject_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_subject_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; if (window->type == WIN_MUC) { if ((g_strcmp0(input, "/subject e") == 0) - || (g_strcmp0(input, "/subject ed") == 0) - || (g_strcmp0(input, "/subject edi") == 0) - || (g_strcmp0(input, "/subject edit") == 0) - || (g_strcmp0(input, "/subject edit ") == 0) - || (g_strcmp0(input, "/subject edit \"") == 0)) { - ProfMucWin* mucwin = (ProfMucWin*)window; + || (g_strcmp0(input, "/subject ed") == 0) + || (g_strcmp0(input, "/subject edi") == 0) + || (g_strcmp0(input, "/subject edit") == 0) + || (g_strcmp0(input, "/subject edit ") == 0) + || (g_strcmp0(input, "/subject edit \"") == 0)) { + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); - char* subject = muc_subject(mucwin->roomjid); + char *subject = muc_subject(mucwin->roomjid); if (subject) { - GString* result_str = g_string_new("/subject edit \""); + GString *result_str = g_string_new("/subject edit \""); g_string_append(result_str, subject); g_string_append(result_str, "\""); @@ -3613,17 +3612,17 @@ _subject_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_account_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_account_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; gboolean result = FALSE; - gchar** args = parse_args(input, 2, 4, &result); + gchar **args = parse_args(input, 2, 4, &result); if (result && (strcmp(args[0], "set") == 0)) { gboolean space_at_end = g_str_has_suffix(input, " "); int num_args = g_strv_length(args); if ((num_args == 2 && space_at_end) || (num_args == 3 && !space_at_end)) { - GString* beginning = g_string_new("/account"); + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s", args[0], args[1]); found = autocomplete_param_with_ac(input, beginning->str, account_set_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3634,8 +3633,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } #ifdef HAVE_LIBOTR if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "otr") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "otr") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "otr") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, otr_policy_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3646,8 +3645,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } #endif if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "status") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "status") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "status") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, account_status_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3657,8 +3656,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "tls") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "tls") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "tls") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, tls_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3668,8 +3667,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "auth") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "auth") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "auth") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_ac(input, beginning->str, auth_property_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3679,8 +3678,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "startscript") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "startscript") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "startscript") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_func(input, beginning->str, _script_autocomplete_func, previous, NULL); g_string_free(beginning, TRUE); @@ -3690,13 +3689,13 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } } if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "theme") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "theme") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "theme") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); if (theme_load_ac == NULL) { theme_load_ac = autocomplete_new(); - GSList* themes = theme_list(); - GSList* curr = themes; + GSList *themes = theme_list(); + GSList *curr = themes; while (curr) { autocomplete_add(theme_load_ac, curr->data); curr = g_slist_next(curr); @@ -3713,8 +3712,8 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } #ifdef HAVE_LIBGPGME if ((num_args == 3 && space_at_end && (g_strcmp0(args[2], "pgpkeyid") == 0)) - || (num_args == 4 && (g_strcmp0(args[2], "pgpkeyid") == 0) && !space_at_end)) { - GString* beginning = g_string_new("/account"); + || (num_args == 4 && (g_strcmp0(args[2], "pgpkeyid") == 0) && !space_at_end)) { + GString *beginning = g_string_new("/account"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_func(input, beginning->str, p_gpg_autocomplete_key, previous, NULL); g_string_free(beginning, TRUE); @@ -3727,7 +3726,7 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } if ((strncmp(input, "/account clear", 14) == 0) && (result == TRUE)) { - GString* beginning = g_string_new("/account clear "); + GString *beginning = g_string_new("/account clear "); g_string_append(beginning, args[1]); found = autocomplete_param_with_ac(input, beginning->str, account_clear_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3740,14 +3739,14 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou g_strfreev(args); found = autocomplete_param_with_ac(input, "/account default", account_default_ac, TRUE, previous); - if (found) { + if(found){ return found; } int i = 0; - gchar* account_choice[] = { "/account set", "/account show", "/account enable", - "/account disable", "/account rename", "/account clear", "/account remove", - "/account default set" }; + gchar *account_choice[] = { "/account set", "/account show", "/account enable", + "/account disable", "/account rename", "/account clear", "/account remove", + "/account default set" }; for (i = 0; i < ARRAY_SIZE(account_choice); i++) { found = autocomplete_param_with_func(input, account_choice[i], accounts_find_all, previous, NULL); @@ -3761,9 +3760,9 @@ _account_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_presence_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_presence_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_func(input, "/presence titlebar", prefs_autocomplete_boolean_choice, previous, NULL); if (found) { @@ -3794,12 +3793,12 @@ _presence_autocomplete(ProfWin* window, const char* const input, gboolean previo } static char* -_rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_rooms_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; gboolean result = FALSE; - gchar** args = parse_args(input, 0, 4, &result); + gchar **args = parse_args(input, 0, 4, &result); if (result) { gboolean space_at_end = g_str_has_suffix(input, " "); @@ -3811,14 +3810,16 @@ _rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous) return found; } } - if ((num_args == 1 && g_strcmp0(args[0], "service") == 0 && space_at_end) || (num_args == 2 && g_strcmp0(args[0], "service") == 0 && !space_at_end)) { + if ((num_args == 1 && g_strcmp0(args[0], "service") == 0 && space_at_end) || + (num_args == 2 && g_strcmp0(args[0], "service") == 0 && !space_at_end)) { found = autocomplete_param_with_func(input, "/rooms service", muc_confserver_find, previous, NULL); if (found) { g_strfreev(args); return found; } } - if ((num_args == 1 && g_strcmp0(args[0], "cache") == 0 && space_at_end) || (num_args == 2 && g_strcmp0(args[0], "cache") == 0 && !space_at_end)) { + if ((num_args == 1 && g_strcmp0(args[0], "cache") == 0 && space_at_end) || + (num_args == 2 && g_strcmp0(args[0], "cache") == 0 && !space_at_end)) { found = autocomplete_param_with_ac(input, "/rooms cache", rooms_cache_ac, TRUE, previous); if (found) { g_strfreev(args); @@ -3826,7 +3827,7 @@ _rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous) } } if ((num_args == 2 && space_at_end) || (num_args == 3 && !space_at_end)) { - GString* beginning = g_string_new("/rooms"); + GString *beginning = g_string_new("/rooms"); g_string_append_printf(beginning, " %s %s", args[0], args[1]); found = autocomplete_param_with_ac(input, beginning->str, rooms_list_ac, TRUE, previous); g_string_free(beginning, TRUE); @@ -3835,8 +3836,9 @@ _rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous) return found; } } - if ((num_args == 3 && g_strcmp0(args[2], "service") == 0 && space_at_end) || (num_args == 4 && g_strcmp0(args[2], "service") == 0 && !space_at_end)) { - GString* beginning = g_string_new("/rooms"); + if ((num_args == 3 && g_strcmp0(args[2], "service") == 0 && space_at_end) || + (num_args == 4 && g_strcmp0(args[2], "service") == 0 && !space_at_end)) { + GString *beginning = g_string_new("/rooms"); g_string_append_printf(beginning, " %s %s %s", args[0], args[1], args[2]); found = autocomplete_param_with_func(input, beginning->str, muc_confserver_find, previous, NULL); g_string_free(beginning, TRUE); @@ -3857,9 +3859,9 @@ _rooms_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_statusbar_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_statusbar_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* found = NULL; + char *found = NULL; found = autocomplete_param_with_ac(input, "/statusbar", statusbar_ac, TRUE, previous); if (found) { @@ -3895,9 +3897,9 @@ _statusbar_autocomplete(ProfWin* window, const char* const input, gboolean previ } static char* -_clear_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_clear_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/clear", clear_ac, TRUE, previous); if (result) { @@ -3913,9 +3915,9 @@ _clear_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_invite_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_invite_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/invite", invite_ac, TRUE, previous); if (result) { @@ -3940,9 +3942,9 @@ _invite_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_status_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_status_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/status", status_ac, TRUE, previous); if (result) { @@ -3960,11 +3962,11 @@ _status_autocomplete(ProfWin* window, const char* const input, gboolean previous } // Remove quote character before and after names when doing autocomplete - char* unquoted = strip_arg_quotes(input); + char *unquoted = strip_arg_quotes(input); // MUC completion with nicknames if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; + ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); if (nick_ac) { @@ -3974,7 +3976,7 @@ _status_autocomplete(ProfWin* window, const char* const input, gboolean previous return result; } } - // roster completion + // roster completion } else { result = autocomplete_param_with_func(unquoted, "/status get", roster_contact_autocomplete, previous, NULL); if (result) { @@ -3990,9 +3992,9 @@ _status_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_logging_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_logging_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/logging", logging_ac, TRUE, previous); if (result) { @@ -4013,9 +4015,9 @@ _logging_autocomplete(ProfWin* window, const char* const input, gboolean previou } static char* -_color_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_color_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_func(input, "/color own", prefs_autocomplete_boolean_choice, previous, NULL); if (result) { @@ -4031,9 +4033,9 @@ _color_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_avatar_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_avatar_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/avatar", avatar_ac, TRUE, previous); if (result) { @@ -4057,9 +4059,9 @@ _avatar_autocomplete(ProfWin* window, const char* const input, gboolean previous } static char* -_correction_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_correction_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/correction", correction_ac, TRUE, previous); if (result) { @@ -4070,55 +4072,55 @@ _correction_autocomplete(ProfWin* window, const char* const input, gboolean prev } static char* -_correct_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_correct_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* last_message = NULL; - switch (window->type) { - case WIN_CHAT: - { - ProfChatWin* chatwin = (ProfChatWin*)window; - assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - last_message = chatwin->last_message; - break; - } - case WIN_MUC: - { - ProfMucWin* mucwin = (ProfMucWin*)window; - assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); - last_message = mucwin->last_message; - } - default: - break; - } - - if (last_message == NULL) { - return NULL; - } - - GString* result_str = g_string_new("/correct "); - g_string_append(result_str, last_message); - char* result = result_str->str; - g_string_free(result_str, FALSE); - - return result; + char *last_message = NULL; + switch(window->type) { + case WIN_CHAT: + { + ProfChatWin *chatwin = (ProfChatWin*)window; + assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); + last_message = chatwin->last_message; + break; + } + case WIN_MUC: + { + ProfMucWin *mucwin = (ProfMucWin*)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + last_message = mucwin->last_message; + } + default: + break; + } + + if (last_message == NULL) { + return NULL; + } + + GString *result_str = g_string_new("/correct "); + g_string_append(result_str, last_message); + char *result = result_str->str; + g_string_free(result_str, FALSE); + + return result; } static char* -_software_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_software_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; - if (window->type == WIN_CHAT) { - ProfChatWin* chatwin = (ProfChatWin*)window; + if (window->type == WIN_CHAT){ + ProfChatWin *chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - GString* search_str = g_string_new("/software "); + GString *search_str = g_string_new("/software "); g_string_append(search_str, chatwin->barejid); result = autocomplete_param_with_func(search_str->str, "/software", roster_fulljid_autocomplete, previous, NULL); g_string_free(search_str, TRUE); } else if (window->type == WIN_MUC) { - ProfMucWin* mucwin = (ProfMucWin*)window; - assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + ProfMucWin *mucwin = (ProfMucWin*)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); Autocomplete nick_ac = muc_roster_ac(mucwin->roomjid); @@ -4128,27 +4130,29 @@ _software_autocomplete(ProfWin* window, const char* const input, gboolean previo return result; } } - } else { + } else { result = autocomplete_param_with_func(input, "/software", roster_fulljid_autocomplete, previous, NULL); if (result) { return result; } - } + } - return result; + return result; } static char* -_url_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_url_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/url", url_ac, TRUE, previous); if (result) { return result; } - if (window->type == WIN_CHAT || window->type == WIN_MUC || window->type == WIN_PRIVATE) { + if (window->type == WIN_CHAT || + window->type == WIN_MUC || + window->type == WIN_PRIVATE) { result = autocomplete_param_with_func(input, "/url open", wins_get_url, previous, window); if (result) { return result; @@ -4161,9 +4165,9 @@ _url_autocomplete(ProfWin* window, const char* const input, gboolean previous) } static char* -_executable_autocomplete(ProfWin* window, const char* const input, gboolean previous) +_executable_autocomplete(ProfWin *window, const char *const input, gboolean previous) { - char* result = NULL; + char *result = NULL; result = autocomplete_param_with_ac(input, "/executable", executable_ac, TRUE, previous); if (result) { diff --git a/src/command/cmd_ac.h b/src/command/cmd_ac.h index 148f4ff3..d6ba3e2a 100644 --- a/src/command/cmd_ac.h +++ b/src/command/cmd_ac.h @@ -36,28 +36,28 @@ #ifndef COMMAND_CMD_AC_H #define COMMAND_CMD_AC_H -#include "command/cmd_funcs.h" #include "config/preferences.h" +#include "command/cmd_funcs.h" void cmd_ac_init(void); void cmd_ac_uninit(void); -char* cmd_ac_complete(ProfWin* window, const char* const input, gboolean previous); -void cmd_ac_reset(ProfWin* window); -gboolean cmd_ac_exists(char* cmd); +char* cmd_ac_complete(ProfWin *window, const char *const input, gboolean previous); +void cmd_ac_reset(ProfWin *window); +gboolean cmd_ac_exists(char *cmd); -void cmd_ac_add(const char* const value); -void cmd_ac_add_help(const char* const value); -void cmd_ac_add_cmd(Command* command); -void cmd_ac_add_alias(ProfAlias* alias); -void cmd_ac_add_alias_value(char* value); +void cmd_ac_add(const char *const value); +void cmd_ac_add_help(const char *const value); +void cmd_ac_add_cmd(Command *command); +void cmd_ac_add_alias(ProfAlias *alias); +void cmd_ac_add_alias_value(char *value); -void cmd_ac_remove(const char* const value); -void cmd_ac_remove_help(const char* const value); -void cmd_ac_remove_alias_value(char* value); +void cmd_ac_remove(const char *const value); +void cmd_ac_remove_help(const char *const value); +void cmd_ac_remove_alias_value(char *value); -void cmd_ac_add_form_fields(DataForm* form); -void cmd_ac_remove_form_fields(DataForm* form); +void cmd_ac_add_form_fields(DataForm *form); +void cmd_ac_remove_form_fields(DataForm *form); -char* cmd_ac_complete_filepath(const char* const input, char* const startstr, gboolean previous); +char* cmd_ac_complete_filepath(const char *const input, char *const startstr, gboolean previous); #endif diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index 3ab77cdd..48cbc80d 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -39,40 +39,40 @@ #include "config.h" #include -#include #include -#include #include -#include #include +#include #include +#include +#include #include #include -#include "command/cmd_ac.h" +#include "profanity.h" +#include "log.h" +#include "common.h" #include "command/cmd_defs.h" #include "command/cmd_funcs.h" -#include "common.h" +#include "command/cmd_ac.h" #include "config/accounts.h" #include "config/preferences.h" -#include "config/scripts.h" #include "config/theme.h" #include "config/tlscerts.h" -#include "log.h" +#include "config/scripts.h" #include "plugins/plugins.h" -#include "profanity.h" #include "tools/autocomplete.h" #include "tools/parser.h" #include "tools/tinyurl.h" #include "ui/ui.h" #include "ui/window_list.h" -#include "xmpp/chat_session.h" +#include "xmpp/xmpp.h" #include "xmpp/contact.h" +#include "xmpp/roster_list.h" #include "xmpp/jid.h" +#include "xmpp/chat_session.h" #include "xmpp/muc.h" -#include "xmpp/roster_list.h" -#include "xmpp/xmpp.h" #ifdef HAVE_LIBOTR #include "otr/otr.h" @@ -82,2394 +82,2482 @@ #include "pgp/gpg.h" #endif -#define CMD_TAG_CHAT "chat" -#define CMD_TAG_GROUPCHAT "groupchat" -#define CMD_TAG_ROSTER "roster" -#define CMD_TAG_PRESENCE "presence" -#define CMD_TAG_CONNECTION "connection" -#define CMD_TAG_DISCOVERY "discovery" -#define CMD_TAG_UI "ui" -#define CMD_TAG_PLUGINS "plugins" - -#define CMD_MAINFUNC(func) func, -#define CMD_NOMAINFUNC NULL, -#define CMD_SUBFUNCS(...) { __VA_ARGS__, { NULL, NULL } }, -#define CMD_NOSUBFUNCS { { NULL, NULL } }, - -#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_ARGS(...) { __VA_ARGS__, { NULL, NULL } }, -#define CMD_NOEXAMPLES \ - { \ - NULL \ - } \ - } -#define CMD_EXAMPLES(...) \ - { \ - __VA_ARGS__, NULL \ - } \ - } - -GHashTable* commands = NULL; - -static gboolean _cmd_has_tag(Command* pcmd, const char* const tag); +#define CMD_TAG_CHAT "chat" +#define CMD_TAG_GROUPCHAT "groupchat" +#define CMD_TAG_ROSTER "roster" +#define CMD_TAG_PRESENCE "presence" +#define CMD_TAG_CONNECTION "connection" +#define CMD_TAG_DISCOVERY "discovery" +#define CMD_TAG_UI "ui" +#define CMD_TAG_PLUGINS "plugins" + +#define CMD_MAINFUNC(func) func, +#define CMD_NOMAINFUNC NULL, +#define CMD_SUBFUNCS(...) { __VA_ARGS__, { NULL, NULL } }, +#define CMD_NOSUBFUNCS { { NULL, NULL } }, + +#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_ARGS(...) { __VA_ARGS__, { NULL, NULL } }, +#define CMD_NOEXAMPLES { NULL } } +#define CMD_EXAMPLES(...) { __VA_ARGS__, NULL } } + +GHashTable *commands = NULL; + +static gboolean _cmd_has_tag(Command *pcmd, const char *const tag); /* * Command list */ -static struct cmd_t command_defs[] = { +static struct cmd_t command_defs[] = +{ { "/help", - parse_args_with_freetext, 0, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_help) - CMD_NOTAGS - CMD_SYN( - "/help [||search_all|search_any] []") - CMD_DESC( - "Help on using Profanity. Passing no arguments list help areas. " - "For command help, optional arguments are shown using square brackets, " - "arguments representing variables rather than a literal name are surrounded by angle brackets. " - "Arguments that may be one of a number of values are separated by a pipe " - "e.g. val1|val2|val3.") - CMD_ARGS( - { "", "Summary help for commands in a certain area of functionality." }, - { "", "Full help for a specific command, for example '/help connect'." }, - { "search_all ", "Search commands for returning matches that contain all of the search terms." }, - { "search_any ", "Search commands for returning matches that contain any of the search terms." }) - CMD_EXAMPLES( - "/help search_all presence online", - "/help commands", - "/help presence", - "/help who") }, + parse_args_with_freetext, 0, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_help) + CMD_NOTAGS + CMD_SYN( + "/help [||search_all|search_any] []") + CMD_DESC( + "Help on using Profanity. Passing no arguments list help areas. " + "For command help, optional arguments are shown using square brackets, " + "arguments representing variables rather than a literal name are surrounded by angle brackets. " + "Arguments that may be one of a number of values are separated by a pipe " + "e.g. val1|val2|val3.") + CMD_ARGS( + { "", "Summary help for commands in a certain area of functionality." }, + { "", "Full help for a specific command, for example '/help connect'." }, + { "search_all ", "Search commands for returning matches that contain all of the search terms." }, + { "search_any ", "Search commands for returning matches that contain any of the search terms." }) + CMD_EXAMPLES( + "/help search_all presence online", + "/help commands", + "/help presence", + "/help who") + }, { "/about", - parse_args, 0, 0, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_about) - CMD_NOTAGS - CMD_SYN( - "/about") - CMD_DESC( - "Show version and license information.") - CMD_NOARGS - CMD_NOEXAMPLES }, + parse_args, 0, 0, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_about) + CMD_NOTAGS + CMD_SYN( + "/about") + CMD_DESC( + "Show version and license information.") + CMD_NOARGS + CMD_NOEXAMPLES + }, { "/connect", - parse_args, 0, 7, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_connect) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/connect []", - "/connect [server ] [port ] [tls force|allow|trust|legacy|disable] [auth default|legacy]") - CMD_DESC( - "Login to a chat service. " - "If no account is specified, the default is used if one is configured. " - "A local account is created with the JID as it's name if it doesn't already exist.") - CMD_ARGS( - { "", "The local account you wish to connect with, or a JID if connecting for the first time." }, - { "server ", "Supply a server if it is different to the domain part of your JID." }, - { "port ", "The port to use if different to the default (5222, or 5223 for SSL)." }, - { "tls force", "Force TLS connection, and fail if one cannot be established, this is default behaviour." }, - { "tls allow", "Use TLS for the connection if it is available." }, - { "tls trust", "Force TLS connection and trust server's certificate." }, - { "tls legacy", "Use legacy TLS for the connection. It means server doesn't support STARTTLS and TLS is forced just after TCP connection is established." }, - { "tls disable", "Disable TLS for the connection." }, - { "auth default", "Default authentication process." }, - { "auth legacy", "Allow legacy authentication." }) - CMD_EXAMPLES( - "/connect", - "/connect odin@valhalla.edda", - "/connect odin@valhalla.edda server talk.google.com", - "/connect freyr@vanaheimr.edda port 5678", - "/connect me@localhost.test.org server 127.0.0.1 tls disable", - "/connect me@chatty server chatty.com port 5443") }, + parse_args, 0, 7, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_connect) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/connect []", + "/connect [server ] [port ] [tls force|allow|trust|legacy|disable] [auth default|legacy]") + CMD_DESC( + "Login to a chat service. " + "If no account is specified, the default is used if one is configured. " + "A local account is created with the JID as it's name if it doesn't already exist.") + CMD_ARGS( + { "", "The local account you wish to connect with, or a JID if connecting for the first time." }, + { "server ", "Supply a server if it is different to the domain part of your JID." }, + { "port ", "The port to use if different to the default (5222, or 5223 for SSL)." }, + { "tls force", "Force TLS connection, and fail if one cannot be established, this is default behaviour." }, + { "tls allow", "Use TLS for the connection if it is available." }, + { "tls trust", "Force TLS connection and trust server's certificate." }, + { "tls legacy", "Use legacy TLS for the connection. It means server doesn't support STARTTLS and TLS is forced just after TCP connection is established." }, + { "tls disable", "Disable TLS for the connection." }, + { "auth default", "Default authentication process." }, + { "auth legacy", "Allow legacy authentication." }) + CMD_EXAMPLES( + "/connect", + "/connect odin@valhalla.edda", + "/connect odin@valhalla.edda server talk.google.com", + "/connect freyr@vanaheimr.edda port 5678", + "/connect me@localhost.test.org server 127.0.0.1 tls disable", + "/connect me@chatty server chatty.com port 5443") + }, { "/tls", - parse_args, 1, 3, NULL, - CMD_SUBFUNCS( - { "certpath", cmd_tls_certpath }, - { "trust", cmd_tls_trust }, - { "trusted", cmd_tls_trusted }, - { "revoke", cmd_tls_revoke }, - { "cert", cmd_tls_cert }) - CMD_NOMAINFUNC - CMD_TAGS( - CMD_TAG_CONNECTION, - CMD_TAG_UI) - CMD_SYN( - "/tls allow", - "/tls always", - "/tls deny", - "/tls cert []", - "/tls trust", - "/tls trusted", - "/tls revoke ", - "/tls certpath", - "/tls certpath set ", - "/tls certpath clear", - "/tls certpath default") - CMD_DESC( - "Handle TLS certificates. ") - CMD_ARGS( - { "allow", "Allow connection to continue with TLS certificate." }, - { "always", "Always allow connections with TLS certificate." }, - { "deny", "Abort connection." }, - { "cert", "Show the current TLS certificate." }, - { "cert ", "Show details of trusted certificate." }, - { "trust", "Add the current TLS certificate to manually trusted certificates." }, - { "trusted", "List summary of manually trusted certificates (with '/tls always' or '/tls trust')." }, - { "revoke ", "Remove a manually trusted certificate." }, - { "certpath", "Show the trusted certificate path." }, - { "certpath set ", "Specify filesystem path containing trusted certificates." }, - { "certpath clear", "Clear the trusted certificate path." }, - { "certpath default", "Use default system certificate path, if it can be found." }) - CMD_NOEXAMPLES }, + parse_args, 1, 3, NULL, + CMD_SUBFUNCS( + { "certpath", cmd_tls_certpath }, + { "trust", cmd_tls_trust }, + { "trusted", cmd_tls_trusted }, + { "revoke", cmd_tls_revoke }, + { "cert", cmd_tls_cert }) + CMD_NOMAINFUNC + CMD_TAGS( + CMD_TAG_CONNECTION, + CMD_TAG_UI) + CMD_SYN( + "/tls allow", + "/tls always", + "/tls deny", + "/tls cert []", + "/tls trust", + "/tls trusted", + "/tls revoke ", + "/tls certpath", + "/tls certpath set ", + "/tls certpath clear", + "/tls certpath default") + CMD_DESC( + "Handle TLS certificates. ") + CMD_ARGS( + { "allow", "Allow connection to continue with TLS certificate." }, + { "always", "Always allow connections with TLS certificate." }, + { "deny", "Abort connection." }, + { "cert", "Show the current TLS certificate." }, + { "cert ", "Show details of trusted certificate." }, + { "trust", "Add the current TLS certificate to manually trusted certificates." }, + { "trusted", "List summary of manually trusted certificates (with '/tls always' or '/tls trust')." }, + { "revoke ", "Remove a manually trusted certificate." }, + { "certpath", "Show the trusted certificate path." }, + { "certpath set ", "Specify filesystem path containing trusted certificates." }, + { "certpath clear", "Clear the trusted certificate path." }, + { "certpath default", "Use default system certificate path, if it can be found." }) + CMD_NOEXAMPLES + }, { "/disconnect", - parse_args, 0, 0, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_disconnect) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/disconnect") - CMD_DESC( - "Disconnect from the current chat service.") - CMD_NOARGS - CMD_NOEXAMPLES }, + parse_args, 0, 0, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_disconnect) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/disconnect") + CMD_DESC( + "Disconnect from the current chat service.") + CMD_NOARGS + CMD_NOEXAMPLES + }, { "/msg", - parse_args_with_freetext, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_msg) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/msg []", - "/msg []") - CMD_DESC( - "Send a one to one chat message, or a private message to a chat room occupant. " - "If the message is omitted, a new chat window will be opened without sending a message. " - "Use quotes if the nickname includes spaces.") - CMD_ARGS( - { "", "Open chat window with contact, by JID or nickname." }, - { " []", "Send message to contact, by JID or nickname." }, - { "", "Open private chat window with chat room occupant." }, - { " []", "Send a private message to a chat room occupant." }) - CMD_EXAMPLES( - "/msg thor@valhalla.edda Hey, here's a message!", - "/msg heimdall@valhalla.edda", - "/msg Thor Here is a private message", - "/msg \"My Friend\" Hi, how are you?") }, + parse_args_with_freetext, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_msg) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/msg []", + "/msg []") + CMD_DESC( + "Send a one to one chat message, or a private message to a chat room occupant. " + "If the message is omitted, a new chat window will be opened without sending a message. " + "Use quotes if the nickname includes spaces.") + CMD_ARGS( + { "", "Open chat window with contact, by JID or nickname." }, + { " []", "Send message to contact, by JID or nickname." }, + { "", "Open private chat window with chat room occupant." }, + { " []", "Send a private message to a chat room occupant." }) + CMD_EXAMPLES( + "/msg thor@valhalla.edda Hey, here's a message!", + "/msg heimdall@valhalla.edda", + "/msg Thor Here is a private message", + "/msg \"My Friend\" Hi, how are you?") + }, { "/roster", - parse_args_with_freetext, 0, 4, NULL, - CMD_SUBFUNCS( - { "group", cmd_group }) - CMD_MAINFUNC(cmd_roster) - CMD_TAGS( - CMD_TAG_ROSTER, - CMD_TAG_UI) - CMD_SYN( - "/roster", - "/roster online", - "/roster show [offline|resource|presence|status|empty|priority|contacts|rooms]", - "/roster hide [offline|resource|presence|status|empty|priority|contacts|rooms]", - "/roster by group|presence|none", - "/roster count unread|items|off", - "/roster count zero on|off", - "/roster color on|off", - "/roster order name|presence", - "/roster unread before|after|off", - "/roster room char |none", - "/roster room private char |none", - "/roster room position first|last", - "/roster room by service|none", - "/roster room order name|unread", - "/roster room unread before|after|off", - "/roster room show server", - "/roster room hide server", - "/roster room use name|jid", - "/roster private room|group|off", - "/roster private char |none", - "/roster header char |none", - "/roster presence indent ", - "/roster contact char |none", - "/roster contact indent ", - "/roster resource char |none", - "/roster resource indent ", - "/roster resource join on|off", - "/roster size ", - "/roster wrap on|off", - "/roster add []", - "/roster remove ", - "/roster remove_all contacts", - "/roster nick ", - "/roster clearnick ", - "/roster group", - "/roster group show ", - "/roster group add ", - "/roster group remove ") - CMD_DESC( - "Manage your roster, and roster display settings. " - "Passing no arguments lists all contacts in your roster.") - CMD_ARGS( - { "online", "Show all online contacts in console." }, - { "show", "Show the roster panel." }, - { "show offline", "Show offline contacts in roster panel." }, - { "show resource", "Show contact's connected resources in roster panel." }, - { "show presence", "Show contact's presence in roster panel." }, - { "show status", "Show contact's status message in roster panel." }, - { "show empty", "Show empty groups in roster panel." }, - { "show priority", "Show resource priority in roster panel." }, - { "show contacts", "Show contacts in roster panel." }, - { "show rooms", "Show chat rooms in roster panel." }, - { "hide", "Hide the roster panel." }, - { "hide offline", "Hide offline contacts in roster panel." }, - { "hide resource", "Hide contact's connected resources in roster panel." }, - { "hide presence", "Hide contact's presence in roster panel." }, - { "hide status", "Hide contact's status message in roster panel." }, - { "hide empty", "Hide empty groups in roster panel." }, - { "hide priority", "Hide resource priority in roster panel." }, - { "hide contacts", "Hide contacts in roster panel." }, - { "hide rooms", "Hide chat rooms in roster panel." }, - { "by group", "Group contacts in roster panel by roster group." }, - { "by presence", "Group contacts in roster panel by presence." }, - { "by none", "No grouping in roster panel." }, - { "count unread", "Show unread message count with roster headers." }, - { "count items", "Show item count with roster headers." }, - { "count off", "Do not show any count with roster headers." }, - { "count zero on", "Show roster header count when 0." }, - { "count zero off", "Hide roster header count when 0." }, - { "color on", "Enable generated color names (XEP-0392)" }, - { "color off", "Disable generated color names (XEP-0392)" }, - { "order name", "Order roster contacts by name only." }, - { "order presence", "Order roster contacts by presence, and then by name." }, - { "unread before", "Show unread message count before contact." }, - { "unread after", "Show unread message count after contact." }, - { "unread off", "Do not show unread message count for contacts." }, - { "room char ", "Prefix rooms with specified character." }, - { "room char none", "Remove room character prefix." }, - { "room private char ", "Prefix private room chat with specified character when displayed with room." }, - { "room private char none", "Remove private room chat character prefix when displayed with room." }, - { "room position first", "Show rooms first in roster." }, - { "room position last", "Show rooms last in roster." }, - { "room by service", "Group rooms by chat service." }, - { "room by none", "Do not group rooms." }, - { "room order name", "Order rooms by name." }, - { "room order unread", "Order rooms by unread messages, and then by name." }, - { "room unread before", "Show unread message count before room." }, - { "room unread after", "Show unread message count after room." }, - { "room unread off", "Do not show unread message count for rooms." }, - { "room show server", "Show the conference server with room JIDs." }, - { "room hide server", "Do not show the conference server with room JIDs." }, - { "room use name", "Use the MUC name as room name." }, - { "room use jid", "Use the JID as room name." }, - { "private room", "Show room private chats with the room." }, - { "private group", "Show room private chats as a separate roster group." }, - { "private off", "Do not show room private chats." }, - { "private char ", "Prefix private room chats with specified character when displayed in separate group." }, - { "private char none", "Remove private room chat character prefix." }, - { "header char ", "Prefix roster headers with specified character." }, - { "header char none", "Remove roster header character prefix." }, - { "contact char ", "Prefix roster contacts with specified character." }, - { "contact char none", "Remove roster contact character prefix." }, - { "contact indent ", "Indent contact line by spaces (0 to 10)." }, - { "resource char ", "Prefix roster resources with specified character." }, - { "resource char none", "Remove roster resource character prefix." }, - { "resource indent ", "Indent resource line by spaces (0 to 10)." }, - { "resource join on|off", "Join resource with previous line when only one available resource." }, - { "presence indent ", "Indent presence line by spaces (-1 to 10), a value of -1 will show presence on the previous line." }, - { "size ", "Percentage of the screen taken up by the roster (1-99)." }, - { "wrap on|off", "Enable or disable line wrapping in roster panel." }, - { "add []", "Add a new item to the roster." }, - { "remove ", "Removes an item from the roster." }, - { "remove_all contacts", "Remove all items from roster." }, - { "nick ", "Change a contacts nickname." }, - { "clearnick ", "Removes the current nickname." }, - { "group show ", "List all roster items in a group." }, - { "group add ", "Add a contact to a group." }, - { "group remove ", "Remove a contact from a group." }) - CMD_EXAMPLES( - "/roster", - "/roster add odin@valhalla.edda", - "/roster add odin@valhalla.edda Allfather", - "/roster remove loki@ownserver.org", - "/roster nick odin@valhalla.edda \"All Father\"", - "/roster clearnick thor@valhalla.edda", - "/roster size 15", - "/roster group", - "/roster group show friends", - "/roster group add friends fenris@ownserver.org", - "/roster group add family Brother", - "/roster group remove colleagues boss@work.com") }, + parse_args_with_freetext, 0, 4, NULL, + CMD_SUBFUNCS( + { "group", cmd_group }) + CMD_MAINFUNC(cmd_roster) + CMD_TAGS( + CMD_TAG_ROSTER, + CMD_TAG_UI) + CMD_SYN( + "/roster", + "/roster online", + "/roster show [offline|resource|presence|status|empty|priority|contacts|rooms]", + "/roster hide [offline|resource|presence|status|empty|priority|contacts|rooms]", + "/roster by group|presence|none", + "/roster count unread|items|off", + "/roster count zero on|off", + "/roster color on|off", + "/roster order name|presence", + "/roster unread before|after|off", + "/roster room char |none", + "/roster room private char |none", + "/roster room position first|last", + "/roster room by service|none", + "/roster room order name|unread", + "/roster room unread before|after|off", + "/roster room show server", + "/roster room hide server", + "/roster room use name|jid", + "/roster private room|group|off", + "/roster private char |none", + "/roster header char |none", + "/roster presence indent ", + "/roster contact char |none", + "/roster contact indent ", + "/roster resource char |none", + "/roster resource indent ", + "/roster resource join on|off", + "/roster size ", + "/roster wrap on|off", + "/roster add []", + "/roster remove ", + "/roster remove_all contacts", + "/roster nick ", + "/roster clearnick ", + "/roster group", + "/roster group show ", + "/roster group add ", + "/roster group remove ") + CMD_DESC( + "Manage your roster, and roster display settings. " + "Passing no arguments lists all contacts in your roster.") + CMD_ARGS( + { "online", "Show all online contacts in console." }, + { "show", "Show the roster panel." }, + { "show offline", "Show offline contacts in roster panel." }, + { "show resource", "Show contact's connected resources in roster panel." }, + { "show presence", "Show contact's presence in roster panel." }, + { "show status", "Show contact's status message in roster panel." }, + { "show empty", "Show empty groups in roster panel." }, + { "show priority", "Show resource priority in roster panel." }, + { "show contacts", "Show contacts in roster panel." }, + { "show rooms", "Show chat rooms in roster panel." }, + { "hide", "Hide the roster panel." }, + { "hide offline", "Hide offline contacts in roster panel." }, + { "hide resource", "Hide contact's connected resources in roster panel." }, + { "hide presence", "Hide contact's presence in roster panel." }, + { "hide status", "Hide contact's status message in roster panel." }, + { "hide empty", "Hide empty groups in roster panel." }, + { "hide priority", "Hide resource priority in roster panel." }, + { "hide contacts", "Hide contacts in roster panel." }, + { "hide rooms", "Hide chat rooms in roster panel." }, + { "by group", "Group contacts in roster panel by roster group." }, + { "by presence", "Group contacts in roster panel by presence." }, + { "by none", "No grouping in roster panel." }, + { "count unread", "Show unread message count with roster headers." }, + { "count items", "Show item count with roster headers." }, + { "count off", "Do not show any count with roster headers." }, + { "count zero on", "Show roster header count when 0." }, + { "count zero off", "Hide roster header count when 0." }, + { "color on", "Enable generated color names (XEP-0392)" }, + { "color off", "Disable generated color names (XEP-0392)" }, + { "order name", "Order roster contacts by name only." }, + { "order presence", "Order roster contacts by presence, and then by name." }, + { "unread before", "Show unread message count before contact." }, + { "unread after", "Show unread message count after contact." }, + { "unread off", "Do not show unread message count for contacts." }, + { "room char ", "Prefix rooms with specified character." }, + { "room char none", "Remove room character prefix." }, + { "room private char ", "Prefix private room chat with specified character when displayed with room." }, + { "room private char none", "Remove private room chat character prefix when displayed with room." }, + { "room position first", "Show rooms first in roster." }, + { "room position last", "Show rooms last in roster." }, + { "room by service", "Group rooms by chat service." }, + { "room by none", "Do not group rooms." }, + { "room order name", "Order rooms by name." }, + { "room order unread", "Order rooms by unread messages, and then by name." }, + { "room unread before", "Show unread message count before room." }, + { "room unread after", "Show unread message count after room." }, + { "room unread off", "Do not show unread message count for rooms." }, + { "room show server", "Show the conference server with room JIDs." }, + { "room hide server", "Do not show the conference server with room JIDs." }, + { "room use name", "Use the MUC name as room name." }, + { "room use jid", "Use the JID as room name." }, + { "private room", "Show room private chats with the room." }, + { "private group", "Show room private chats as a separate roster group." }, + { "private off", "Do not show room private chats." }, + { "private char ", "Prefix private room chats with specified character when displayed in separate group." }, + { "private char none", "Remove private room chat character prefix." }, + { "header char ", "Prefix roster headers with specified character." }, + { "header char none", "Remove roster header character prefix." }, + { "contact char ", "Prefix roster contacts with specified character." }, + { "contact char none", "Remove roster contact character prefix." }, + { "contact indent ", "Indent contact line by spaces (0 to 10)." }, + { "resource char ", "Prefix roster resources with specified character." }, + { "resource char none", "Remove roster resource character prefix." }, + { "resource indent ", "Indent resource line by spaces (0 to 10)." }, + { "resource join on|off", "Join resource with previous line when only one available resource." }, + { "presence indent ", "Indent presence line by spaces (-1 to 10), a value of -1 will show presence on the previous line." }, + { "size ", "Percentage of the screen taken up by the roster (1-99)." }, + { "wrap on|off", "Enable or disable line wrapping in roster panel." }, + { "add []", "Add a new item to the roster." }, + { "remove ", "Removes an item from the roster." }, + { "remove_all contacts", "Remove all items from roster." }, + { "nick ", "Change a contacts nickname." }, + { "clearnick ", "Removes the current nickname." }, + { "group show ", "List all roster items in a group." }, + { "group add ", "Add a contact to a group." }, + { "group remove ", "Remove a contact from a group." }) + CMD_EXAMPLES( + "/roster", + "/roster add odin@valhalla.edda", + "/roster add odin@valhalla.edda Allfather", + "/roster remove loki@ownserver.org", + "/roster nick odin@valhalla.edda \"All Father\"", + "/roster clearnick thor@valhalla.edda", + "/roster size 15", + "/roster group", + "/roster group show friends", + "/roster group add friends fenris@ownserver.org", + "/roster group add family Brother", + "/roster group remove colleagues boss@work.com") + }, { "/blocked", - parse_args, 0, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_blocked) - CMD_TAGS( - CMD_TAG_ROSTER, - CMD_TAG_CHAT) - CMD_SYN( - "/blocked", - "/blocked add []", - "/blocked remove ") - CMD_DESC( - "Manage blocked users (XEP-0191), calling with no arguments shows the current list of blocked users. " - "To blog a certain user in a MUC use the following as jid: room@conference.example.org/spammy-user") - CMD_ARGS( - { "add []", "Block the specified Jabber ID. If in a chat window and no jid is specified, the current recipient will be blocked." }, - { "remove ", "Remove the specified Jabber ID from the blocked list." }) - CMD_EXAMPLES( - "/blocked add hel@helheim.edda", - "/blocked add profanity@rooms.dismail.de/spammy-user") }, + parse_args, 0, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_blocked) + CMD_TAGS( + CMD_TAG_ROSTER, + CMD_TAG_CHAT) + CMD_SYN( + "/blocked", + "/blocked add []", + "/blocked remove ") + CMD_DESC( + "Manage blocked users (XEP-0191), calling with no arguments shows the current list of blocked users. " + "To blog a certain user in a MUC use the following as jid: room@conference.example.org/spammy-user") + CMD_ARGS( + { "add []", "Block the specified Jabber ID. If in a chat window and no jid is specified, the current recipient will be blocked." }, + { "remove ", "Remove the specified Jabber ID from the blocked list." }) + CMD_EXAMPLES( + "/blocked add hel@helheim.edda", + "/blocked add profanity@rooms.dismail.de/spammy-user") + }, { "/info", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_info) - CMD_TAGS( - CMD_TAG_ROSTER, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/info", - "/info |") - CMD_DESC( - "Show information about a contact, room, or room member. " - "Passing no argument in a chat window will use the current recipient. " - "Passing no argument in a chat room will display information about the room.") - CMD_ARGS( - { "", "The contact you wish to view information about." }, - { "", "When in a chat room, the occupant you wish to view information about." }) - CMD_EXAMPLES( - "/info thor@aasgard.server.org", - "/info heimdall") }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_info) + CMD_TAGS( + CMD_TAG_ROSTER, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/info", + "/info |") + CMD_DESC( + "Show information about a contact, room, or room member. " + "Passing no argument in a chat window will use the current recipient. " + "Passing no argument in a chat room will display information about the room.") + CMD_ARGS( + { "", "The contact you wish to view information about." }, + { "", "When in a chat room, the occupant you wish to view information about." }) + CMD_EXAMPLES( + "/info thor@aasgard.server.org", + "/info heimdall") + }, { "/caps", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_caps) - CMD_TAGS( - CMD_TAG_DISCOVERY, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/caps", - "/caps |") - CMD_DESC( - "Find out a contacts, or room members client software capabilities. " - "If in private chat initiated from a chat room, no parameter is required.") - CMD_ARGS( - { "", "If in the console or a chat window, the full JID for which you wish to see capabilities." }, - { "", "If in a chat room, nickname for which you wish to see capabilities." }) - CMD_EXAMPLES( - "/caps ran@cold.sea.org/laptop", - "/caps ran@cold.sea.org/phone", - "/caps aegir") }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_caps) + CMD_TAGS( + CMD_TAG_DISCOVERY, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/caps", + "/caps |") + CMD_DESC( + "Find out a contacts, or room members client software capabilities. " + "If in private chat initiated from a chat room, no parameter is required.") + CMD_ARGS( + { "", "If in the console or a chat window, the full JID for which you wish to see capabilities." }, + { "", "If in a chat room, nickname for which you wish to see capabilities." }) + CMD_EXAMPLES( + "/caps ran@cold.sea.org/laptop", + "/caps ran@cold.sea.org/phone", + "/caps aegir") + }, { "/software", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_software) - CMD_TAGS( - CMD_TAG_DISCOVERY, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/software", - "/software |") - CMD_DESC( - "Find out a contact, or room members software version information. " - "If in private chat initiated from a chat room, no parameter is required. " - "If the contact's software does not support software version requests, nothing will be displayed.") - CMD_ARGS( - { "", "If in the console or a chat window, the full JID for which you wish to see software information." }, - { "", "If in a chat room, nickname for which you wish to see software information." }) - CMD_EXAMPLES( - "/software odin@valhalla.edda/laptop", - "/software odin@valhalla.edda/phone", - "/software thor") }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_software) + CMD_TAGS( + CMD_TAG_DISCOVERY, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/software", + "/software |") + CMD_DESC( + "Find out a contact, or room members software version information. " + "If in private chat initiated from a chat room, no parameter is required. " + "If the contact's software does not support software version requests, nothing will be displayed.") + CMD_ARGS( + { "", "If in the console or a chat window, the full JID for which you wish to see software information." }, + { "", "If in a chat room, nickname for which you wish to see software information." }) + CMD_EXAMPLES( + "/software odin@valhalla.edda/laptop", + "/software odin@valhalla.edda/phone", + "/software thor") + }, { "/status", - parse_args, 2, 3, NULL, - CMD_SUBFUNCS( - { "get", cmd_status_get }, - { "set", cmd_status_set }) - CMD_NOMAINFUNC - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/status set [\"\"]", - "/status get |") - CMD_DESC( - "/status get: Find out a contact, or room members presence information. " - "/status set: set own status.") - CMD_ARGS( - { "", "Own status. Possible values: chat, online, away, dnd, xa" }, - { "", "Optional message to use with the status. Needs quotation marks if it's more than one word." }, - { "", "The contact who's presence you which to see." }, - { "", "If in a chat room, the occupant who's presence you wish to see." }) - CMD_EXAMPLES( - "/status get odin@valhalla.edda", - "/status get jon", - "/status set online") }, + parse_args, 2, 3, NULL, + CMD_SUBFUNCS( + { "get", cmd_status_get }, + { "set", cmd_status_set }) + CMD_NOMAINFUNC + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/status set [\"\"]", + "/status get |") + CMD_DESC( + "/status get: Find out a contact, or room members presence information. " + "/status set: set own status.") + CMD_ARGS( + { "", "Own status. Possible values: chat, online, away, dnd, xa" }, + { "", "Optional message to use with the status. Needs quotation marks if it's more than one word." }, + { "", "The contact who's presence you which to see." }, + { "", "If in a chat room, the occupant who's presence you wish to see." }) + CMD_EXAMPLES( + "/status get odin@valhalla.edda", + "/status get jon", + "/status set online") + }, { "/resource", - parse_args, 1, 2, &cons_resource_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_resource) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_UI) - CMD_SYN( - "/resource set ", - "/resource off", - "/resource title on|off", - "/resource message on|off") - CMD_DESC( - "Override chat session resource, and manage resource display settings.") - CMD_ARGS( - { "set ", "Set the resource to which messages will be sent." }, - { "off", "Let the server choose which resource to route messages to." }, - { "title on|off", "Show or hide the current resource in the titlebar." }, - { "message on|off", "Show or hide the resource when showing an incoming message." }) - CMD_NOEXAMPLES }, + parse_args, 1, 2, &cons_resource_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_resource) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_UI) + CMD_SYN( + "/resource set ", + "/resource off", + "/resource title on|off", + "/resource message on|off") + CMD_DESC( + "Override chat session resource, and manage resource display settings.") + CMD_ARGS( + { "set ", "Set the resource to which messages will be sent." }, + { "off", "Let the server choose which resource to route messages to." }, + { "title on|off", "Show or hide the current resource in the titlebar." }, + { "message on|off", "Show or hide the resource when showing an incoming message." }) + CMD_NOEXAMPLES + }, { "/join", - parse_args, 0, 5, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_join) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/join", - "/join [nick ] [password ]") - CMD_DESC( - "Join a chat room at the conference server. " - "If no room is supplied, a generated name will be used with the format private-chat-[UUID]. " - "If the domain part is not included in the room name, the account preference 'muc.service' will be used. " - "If no nickname is specified the account preference 'muc.nick' will be used which by default is the localpart of your JID. " - "If the room doesn't exist, and the server allows it, a new one will be created.") - CMD_ARGS( - { "", "The chat room to join." }, - { "nick ", "Nickname to use in the room." }, - { "password ", "Password if the room requires one." }) - CMD_EXAMPLES( - "/join", - "/join profanity@rooms.dismail.de", - "/join profanity@rooms.dismail.de nick mynick", - "/join private@conference.jabber.org nick mynick password mypassword", - "/join mychannel") }, + parse_args, 0, 5, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_join) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/join", + "/join [nick ] [password ]") + CMD_DESC( + "Join a chat room at the conference server. " + "If no room is supplied, a generated name will be used with the format private-chat-[UUID]. " + "If the domain part is not included in the room name, the account preference 'muc.service' will be used. " + "If no nickname is specified the account preference 'muc.nick' will be used which by default is the localpart of your JID. " + "If the room doesn't exist, and the server allows it, a new one will be created.") + CMD_ARGS( + { "", "The chat room to join." }, + { "nick ", "Nickname to use in the room." }, + { "password ", "Password if the room requires one." }) + CMD_EXAMPLES( + "/join", + "/join profanity@rooms.dismail.de", + "/join profanity@rooms.dismail.de nick mynick", + "/join private@conference.jabber.org nick mynick password mypassword", + "/join mychannel") + }, { "/invite", - parse_args_with_freetext, 1, 3, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_invite) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/invite send []", - "/invite list", - "/invite decline") - CMD_DESC( - "Manage room invites. " - "Send an invite to a contact for the current chat room. " - "List received invites. " - "Decline them using /invite decline and accept them using /join.") - CMD_ARGS( - { "send []", "The contact you wish to invite. And an optional message." }, - { "list", "Show all rooms that you have been invited to, and not accepted or declined." }, - { "decline ", "Decline a chat room invitation." }) - CMD_EXAMPLES( - "/invite send gustavo@pollos.tx", - "/invite decline profanity@rooms.dismail.de", - "/invite list") }, + parse_args_with_freetext, 1, 3, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_invite) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/invite send []", + "/invite list", + "/invite decline") + CMD_DESC( + "Manage room invites. " + "Send an invite to a contact for the current chat room. " + "List received invites. " + "Decline them using /invite decline and accept them using /join.") + CMD_ARGS( + { "send []", "The contact you wish to invite. And an optional message." }, + { "list", "Show all rooms that you have been invited to, and not accepted or declined."}, + { "decline ", "Decline a chat room invitation."}) + CMD_EXAMPLES( + "/invite send gustavo@pollos.tx", + "/invite decline profanity@rooms.dismail.de", + "/invite list") + }, { "/room", - parse_args, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_room) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/room accept|destroy|config") - CMD_DESC( - "Chat room configuration.") - CMD_ARGS( - { "accept", "Accept default room configuration." }, - { "destroy", "Reject default room configuration, and destroy the room." }, - { "config", "Edit room configuration." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_room) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/room accept|destroy|config") + CMD_DESC( + "Chat room configuration.") + CMD_ARGS( + { "accept", "Accept default room configuration." }, + { "destroy", "Reject default room configuration, and destroy the room." }, + { "config", "Edit room configuration." }) + CMD_NOEXAMPLES + }, { "/kick", - parse_args_with_freetext, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_kick) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/kick []") - CMD_DESC( - "Kick occupant from chat room.") - CMD_ARGS( - { "", "Nickname of the occupant to kick from the room." }, - { "", "Optional reason for kicking the occupant." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_kick) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/kick []") + CMD_DESC( + "Kick occupant from chat room.") + CMD_ARGS( + { "", "Nickname of the occupant to kick from the room." }, + { "", "Optional reason for kicking the occupant." }) + CMD_NOEXAMPLES + }, { "/ban", - parse_args_with_freetext, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_ban) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/ban []") - CMD_DESC( - "Ban user from chat room.") - CMD_ARGS( - { "", "Bare JID of the user to ban from the room." }, - { "", "Optional reason for banning the user." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_ban) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/ban []") + CMD_DESC( + "Ban user from chat room.") + CMD_ARGS( + { "", "Bare JID of the user to ban from the room." }, + { "", "Optional reason for banning the user." }) + CMD_NOEXAMPLES + }, { "/subject", - parse_args_with_freetext, 0, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_subject) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/subject set ", - "/subject edit ", - "/subject prepend ", - "/subject append ", - "/subject clear") - CMD_DESC( - "Set, modify, or clear room subject.") - CMD_ARGS( - { "set ", "Set the room subject." }, - { "edit ", "Edit the current room subject, tab autocompletion will display the subject to edit." }, - { "prepend ", "Prepend text to the current room subject, use double quotes if a trailing space is needed." }, - { "append ", "Append text to the current room subject, use double quotes if a preceding space is needed." }, - { "clear", "Clear the room subject." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 0, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_subject) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/subject set ", + "/subject edit ", + "/subject prepend ", + "/subject append ", + "/subject clear") + CMD_DESC( + "Set, modify, or clear room subject.") + CMD_ARGS( + { "set ", "Set the room subject." }, + { "edit ", "Edit the current room subject, tab autocompletion will display the subject to edit." }, + { "prepend ", "Prepend text to the current room subject, use double quotes if a trailing space is needed." }, + { "append ", "Append text to the current room subject, use double quotes if a preceding space is needed." }, + { "clear", "Clear the room subject." }) + CMD_NOEXAMPLES + }, { "/affiliation", - parse_args_with_freetext, 1, 4, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_affiliation) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/affiliation set []", - "/affiliation list []") - CMD_DESC( - "Manage room affiliations. " - "Affiliation may be one of owner, admin, member, outcast or none.") - CMD_ARGS( - { "set []", "Set the affiliation of user with jid, with an optional reason." }, - { "list []", "List all users with the specified affiliation, or all if none specified." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 1, 4, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_affiliation) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/affiliation set []", + "/affiliation list []") + CMD_DESC( + "Manage room affiliations. " + "Affiliation may be one of owner, admin, member, outcast or none.") + CMD_ARGS( + { "set []", "Set the affiliation of user with jid, with an optional reason." }, + { "list []", "List all users with the specified affiliation, or all if none specified." }) + CMD_NOEXAMPLES + }, { "/role", - parse_args_with_freetext, 1, 4, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_role) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/role set []", - "/role list []") - CMD_DESC( - "Manage room roles. " - "Role may be one of moderator, participant, visitor or none.") - CMD_ARGS( - { "set []", "Set the role of occupant with nick, with an optional reason." }, - { "list []", "List all occupants with the specified role, or all if none specified." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 1, 4, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_role) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/role set []", + "/role list []") + CMD_DESC( + "Manage room roles. " + "Role may be one of moderator, participant, visitor or none.") + CMD_ARGS( + { "set []", "Set the role of occupant with nick, with an optional reason." }, + { "list []", "List all occupants with the specified role, or all if none specified." }) + CMD_NOEXAMPLES + }, { "/occupants", - parse_args, 1, 3, cons_occupants_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_occupants) - CMD_TAGS( - CMD_TAG_GROUPCHAT, - CMD_TAG_UI) - CMD_SYN( - "/occupants show|hide [jid]", - "/occupants char |none", - "/occupants color on|off", - "/occupants default show|hide [jid]", - "/occupants size []", - "/occupants indent ", - "/occupants header char |none", - "/occupants wrap on|off") - CMD_DESC( - "Show or hide room occupants, and occupants panel display settings.") - CMD_ARGS( - { "show", "Show the occupants panel in current room." }, - { "char ", "Prefix occupants with specified character." }, - { "char none", "Remove occupants character prefix." }, - { "color on", "Enable generated color names (XEP-0392) for occupants" }, - { "color off", "Disable generated color names (XEP-0392) for occupants" }, - { "hide", "Hide the occupants panel in current room." }, - { "show jid", "Show jid in the occupants panel in current room." }, - { "hide jid", "Hide jid in the occupants panel in current room." }, - { "default show|hide", "Whether occupants are shown by default in new rooms." }, - { "default show|hide jid", "Whether occupants jids are shown by default in new rooms." }, - { "size ", "Percentage of the screen taken by the occupants list in rooms (1-99)." }, - { "indent ", "Indent contact line by spaces (0 to 10)." }, - { "header char ", "Prefix occupants headers with specified character." }, - { "header char none", "Remove occupants header character prefix." }, - { "wrap on|off", "Enable or disable line wrapping in occupants panel." }) - CMD_NOEXAMPLES }, + parse_args, 1, 3, cons_occupants_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_occupants) + CMD_TAGS( + CMD_TAG_GROUPCHAT, + CMD_TAG_UI) + CMD_SYN( + "/occupants show|hide [jid]", + "/occupants char |none", + "/occupants color on|off", + "/occupants default show|hide [jid]", + "/occupants size []", + "/occupants indent ", + "/occupants header char |none", + "/occupants wrap on|off") + CMD_DESC( + "Show or hide room occupants, and occupants panel display settings.") + CMD_ARGS( + { "show", "Show the occupants panel in current room." }, + { "char ", "Prefix occupants with specified character." }, + { "char none", "Remove occupants character prefix." }, + { "color on", "Enable generated color names (XEP-0392) for occupants" }, + { "color off", "Disable generated color names (XEP-0392) for occupants" }, + { "hide", "Hide the occupants panel in current room." }, + { "show jid", "Show jid in the occupants panel in current room." }, + { "hide jid", "Hide jid in the occupants panel in current room." }, + { "default show|hide", "Whether occupants are shown by default in new rooms." }, + { "default show|hide jid", "Whether occupants jids are shown by default in new rooms." }, + { "size ", "Percentage of the screen taken by the occupants list in rooms (1-99)." }, + { "indent ", "Indent contact line by spaces (0 to 10)." }, + { "header char ", "Prefix occupants headers with specified character." }, + { "header char none", "Remove occupants header character prefix." }, + { "wrap on|off", "Enable or disable line wrapping in occupants panel." }) + CMD_NOEXAMPLES + }, { "/form", - parse_args, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_form) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/form show", - "/form submit", - "/form cancel", - "/form help []") - CMD_DESC( - "Form configuration.") - CMD_ARGS( - { "show", "Show the current form." }, - { "submit", "Submit the current form." }, - { "cancel", "Cancel changes to the current form." }, - { "help []", "Display help for form, or a specific field." }) - CMD_NOEXAMPLES }, + parse_args, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_form) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/form show", + "/form submit", + "/form cancel", + "/form help []") + CMD_DESC( + "Form configuration.") + CMD_ARGS( + { "show", "Show the current form." }, + { "submit", "Submit the current form." }, + { "cancel", "Cancel changes to the current form." }, + { "help []", "Display help for form, or a specific field." }) + CMD_NOEXAMPLES + }, { "/rooms", - parse_args, 0, 4, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_rooms) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/rooms", - "/rooms filter ", - "/rooms service ", - "/rooms service filter ", - "/rooms cache on|off|clear") - CMD_DESC( - "List the chat rooms available at the specified conference service. " - "If no argument is supplied, the account preference 'muc.service' is used, 'conference.' by default. " - "The filter argument only shows rooms that contain the provided text, case insensitive.") - CMD_ARGS( - { "service ", "The conference service to query." }, - { "filter ", "The text to filter results by." }, - { "cache on|off", "Enable or disable caching of rooms list response, enabled by default." }, - { "cache clear", "Clear the rooms response cache if enabled." }) - CMD_EXAMPLES( - "/rooms", - "/rooms filter development", - "/rooms service conference.jabber.org", - "/rooms service conference.jabber.org filter \"News Room\"") }, + parse_args, 0, 4, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_rooms) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/rooms", + "/rooms filter ", + "/rooms service ", + "/rooms service filter ", + "/rooms cache on|off|clear") + CMD_DESC( + "List the chat rooms available at the specified conference service. " + "If no argument is supplied, the account preference 'muc.service' is used, 'conference.' by default. " + "The filter argument only shows rooms that contain the provided text, case insensitive.") + CMD_ARGS( + { "service ", "The conference service to query." }, + { "filter ", "The text to filter results by."}, + { "cache on|off", "Enable or disable caching of rooms list response, enabled by default."}, + { "cache clear", "Clear the rooms response cache if enabled."}) + CMD_EXAMPLES( + "/rooms", + "/rooms filter development", + "/rooms service conference.jabber.org", + "/rooms service conference.jabber.org filter \"News Room\"") + }, { "/bookmark", - parse_args, 0, 8, NULL, - CMD_SUBFUNCS( - { "ignore", cmd_bookmark_ignore }) - CMD_MAINFUNC(cmd_bookmark) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/bookmark", - "/bookmark list", - "/bookmark add [] [nick ] [password ] [name ] [autojoin on|off]", - "/bookmark update [nick ] [password ] [name ] autojoin on|off]", - "/bookmark remove []", - "/bookmark join ", - "/bookmark invites on|off", - "/bookmark ignore", - "/bookmark ignore add ", - "/bookmark ignore remove ") - CMD_DESC( - "Manage bookmarks and join bookmarked rooms. " - "In a chat room, no arguments will bookmark the current room, setting autojoin to \"on\"." - "There is also an autojoin ignore list in case you want to autojoind in many clients but not on Profanity.") - CMD_ARGS( - { "list", "List all bookmarks." }, - { "add []", "Add a bookmark, passing no room will bookmark the current room, setting autojoin to \"on\"." }, - { "remove []", "Remove a bookmark, passing no room will remove the bookmark for the current room, if one exists." }, - { "update ", "Update the properties associated with a bookmark." }, - { "nick ", "Nickname used in the chat room." }, - { "password ", "Password if required, may be stored in plaintext on your server." }, - { "name ", "Optional name for the bookmark. By default localpart of the JID will be used." }, - { "autojoin on|off", "Whether to join the room automatically on login." }, - { "join ", "Join room using the properties associated with the bookmark." }, - { "invites on|off", "Whether or not to bookmark accepted room invites, defaults to 'on'." }, - { "ignore add ", "Add a bookmark to the autojoin ignore list." }, - { "ignore remove ", "Remove a bookmark from the autojoin ignore list." }) - CMD_NOEXAMPLES }, + parse_args, 0, 8, NULL, + CMD_SUBFUNCS( + { "ignore", cmd_bookmark_ignore } + ) + CMD_MAINFUNC(cmd_bookmark) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/bookmark", + "/bookmark list", + "/bookmark add [] [nick ] [password ] [name ] [autojoin on|off]", + "/bookmark update [nick ] [password ] [name ] autojoin on|off]", + "/bookmark remove []", + "/bookmark join ", + "/bookmark invites on|off", + "/bookmark ignore", + "/bookmark ignore add ", + "/bookmark ignore remove ") + CMD_DESC( + "Manage bookmarks and join bookmarked rooms. " + "In a chat room, no arguments will bookmark the current room, setting autojoin to \"on\"." + "There is also an autojoin ignore list in case you want to autojoind in many clients but not on Profanity.") + CMD_ARGS( + { "list", "List all bookmarks." }, + { "add []", "Add a bookmark, passing no room will bookmark the current room, setting autojoin to \"on\"." }, + { "remove []", "Remove a bookmark, passing no room will remove the bookmark for the current room, if one exists." }, + { "update ", "Update the properties associated with a bookmark." }, + { "nick ", "Nickname used in the chat room." }, + { "password ", "Password if required, may be stored in plaintext on your server." }, + { "name ", "Optional name for the bookmark. By default localpart of the JID will be used." }, + { "autojoin on|off", "Whether to join the room automatically on login." }, + { "join ", "Join room using the properties associated with the bookmark." }, + { "invites on|off", "Whether or not to bookmark accepted room invites, defaults to 'on'."}, + { "ignore add ", "Add a bookmark to the autojoin ignore list."}, + { "ignore remove ", "Remove a bookmark from the autojoin ignore list."}) + CMD_NOEXAMPLES + }, { "/disco", - parse_args, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_disco) - CMD_TAGS( - CMD_TAG_DISCOVERY) - CMD_SYN( - "/disco info []", - "/disco items []") - CMD_DESC( - "Find out information about an entities supported services. " - "Calling with no arguments will query the server you are currently connected to.") - CMD_ARGS( - { "info []", "List protocols and features supported by an entity." }, - { "items []", "List items associated with an entity." }) - CMD_EXAMPLES( - "/disco info", - "/disco items myserver.org", - "/disco items conference.jabber.org", - "/disco info odin@valhalla.edda/laptop") }, + parse_args, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_disco) + CMD_TAGS( + CMD_TAG_DISCOVERY) + CMD_SYN( + "/disco info []", + "/disco items []") + CMD_DESC( + "Find out information about an entities supported services. " + "Calling with no arguments will query the server you are currently connected to.") + CMD_ARGS( + { "info []", "List protocols and features supported by an entity." }, + { "items []", "List items associated with an entity." }) + CMD_EXAMPLES( + "/disco info", + "/disco items myserver.org", + "/disco items conference.jabber.org", + "/disco info odin@valhalla.edda/laptop") + }, { "/sendfile", - parse_args_with_freetext, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_sendfile) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/sendfile ") - CMD_DESC( - "Send a file using XEP-0363 HTTP file transfer.") - CMD_ARGS( - { "", "Path to the file." }) - CMD_EXAMPLES( - "/sendfile /etc/hosts", - "/sendfile ~/images/sweet_cat.jpg") }, + parse_args_with_freetext, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_sendfile) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/sendfile ") + CMD_DESC( + "Send a file using XEP-0363 HTTP file transfer.") + CMD_ARGS( + { "", "Path to the file." }) + CMD_EXAMPLES( + "/sendfile /etc/hosts", + "/sendfile ~/images/sweet_cat.jpg") + }, { "/lastactivity", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_lastactivity) - CMD_TAGS( - CMD_TAG_PRESENCE) - CMD_SYN( - "/lastactivity on|off", - "/lastactivity []") - CMD_DESC( - "Enable/disable sending last activity, and send last activity requests.") - CMD_ARGS( - { "on|off", "Enable or disable sending of last activity." }, - { "", "The JID of the entity to query, omitting the JID will query your server." }) - CMD_EXAMPLES( - "/lastactivity", - "/lastactivity off", - "/lastactivity freyja@asgaard.edda", - "/lastactivity freyja@asgaard.edda/laptop", - "/lastactivity someserver.com") }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_lastactivity) + CMD_TAGS( + CMD_TAG_PRESENCE) + CMD_SYN( + "/lastactivity on|off", + "/lastactivity []") + CMD_DESC( + "Enable/disable sending last activity, and send last activity requests.") + CMD_ARGS( + { "on|off", "Enable or disable sending of last activity." }, + { "", "The JID of the entity to query, omitting the JID will query your server." }) + CMD_EXAMPLES( + "/lastactivity", + "/lastactivity off", + "/lastactivity freyja@asgaard.edda", + "/lastactivity freyja@asgaard.edda/laptop", + "/lastactivity someserver.com") + }, { "/nick", - parse_args_with_freetext, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_nick) - CMD_TAGS( - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/nick ") - CMD_DESC( - "Change your nickname in the current chat room.") - CMD_ARGS( - { "", "Your new nickname." }) - CMD_NOEXAMPLES }, + parse_args_with_freetext, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_nick) + CMD_TAGS( + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/nick ") + CMD_DESC( + "Change your nickname in the current chat room.") + CMD_ARGS( + { "", "Your new nickname." }) + CMD_NOEXAMPLES + }, { "/win", - parse_args, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_win) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/win console", - "/win ", - "/win ", - "/win ", - "/win ", - "/win ", - "/win xmlconsole", - "/win ") - CMD_DESC( - "Move to the specified window.") - CMD_ARGS( - { "console", "Focus the Console window." }, - { "", "Focus specified window number." }, - { "", "Focus chat window with contact by JID if open." }, - { "", "Focus chat window with contact by nickname if open." }, - { "", "Focus chat room window with roomjid if open." }, - { "", "Focus private chat roomoccupantjid if open." }, - { "xmlconsole", "Focus the XML Console window if open." }, - { "", "Focus the plugin window." }) - CMD_EXAMPLES( - "/win console", - "/win 4", - "/win odin@valhalla.edda", - "/win Eddie", - "/win bigroom@conference.chat.org", - "/win bigroom@conference.chat.org/thor", - "/win wikipedia") }, + parse_args, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_win) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/win console", + "/win ", + "/win ", + "/win ", + "/win ", + "/win ", + "/win xmlconsole", + "/win ") + CMD_DESC( + "Move to the specified window.") + CMD_ARGS( + { "console", "Focus the Console window." }, + { "", "Focus specified window number." }, + { "", "Focus chat window with contact by JID if open." }, + { "", "Focus chat window with contact by nickname if open." }, + { "", "Focus chat room window with roomjid if open." }, + { "", "Focus private chat roomoccupantjid if open." }, + { "xmlconsole", "Focus the XML Console window if open." }, + { "", "Focus the plugin window."}) + CMD_EXAMPLES( + "/win console", + "/win 4", + "/win odin@valhalla.edda", + "/win Eddie", + "/win bigroom@conference.chat.org", + "/win bigroom@conference.chat.org/thor", + "/win wikipedia") + }, { "/wins", - parse_args, 0, 3, NULL, - CMD_SUBFUNCS( - { "unread", cmd_wins_unread }, - { "prune", cmd_wins_prune }, - { "swap", cmd_wins_swap }) - CMD_MAINFUNC(cmd_wins) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/wins", - "/wins unread", - "/wins prune", - "/wins swap ") - CMD_DESC( - "Manage windows. " - "Passing no argument will list all currently active windows and information about their usage.") - CMD_ARGS( - { "unread", "List windows with unread messages." }, - { "prune", "Close all windows with no unread messages." }, - { "swap ", "Swap windows, target may be an empty position." }) - CMD_NOEXAMPLES }, + parse_args, 0, 3, NULL, + CMD_SUBFUNCS( + { "unread", cmd_wins_unread }, + { "prune", cmd_wins_prune }, + { "swap", cmd_wins_swap }) + CMD_MAINFUNC(cmd_wins) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/wins", + "/wins unread", + "/wins prune", + "/wins swap ") + CMD_DESC( + "Manage windows. " + "Passing no argument will list all currently active windows and information about their usage.") + CMD_ARGS( + { "unread", "List windows with unread messages." }, + { "prune", "Close all windows with no unread messages." }, + { "swap ", "Swap windows, target may be an empty position." }) + CMD_NOEXAMPLES + }, { "/sub", - parse_args, 1, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_sub) - CMD_TAGS( - CMD_TAG_ROSTER) - CMD_SYN( - "/sub request []", - "/sub allow []", - "/sub deny []", - "/sub show []", - "/sub sent", - "/sub received") - CMD_DESC( - "Manage subscriptions to contact presence. " - "If jid is omitted, the contact of the current window is used.") - CMD_ARGS( - { "request []", "Send a subscription request to the user." }, - { "allow []", "Approve a contact's subscription request." }, - { "deny []", "Remove subscription for a contact, or deny a request." }, - { "show []", "Show subscription status for a contact." }, - { "sent", "Show all sent subscription requests pending a response." }, - { "received", "Show all received subscription requests awaiting your response." }) - CMD_EXAMPLES( - "/sub request odin@valhalla.edda", - "/sub allow odin@valhalla.edda", - "/sub request", - "/sub sent") }, + parse_args, 1, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_sub) + CMD_TAGS( + CMD_TAG_ROSTER) + CMD_SYN( + "/sub request []", + "/sub allow []", + "/sub deny []", + "/sub show []", + "/sub sent", + "/sub received") + CMD_DESC( + "Manage subscriptions to contact presence. " + "If jid is omitted, the contact of the current window is used.") + CMD_ARGS( + { "request []", "Send a subscription request to the user." }, + { "allow []", "Approve a contact's subscription request." }, + { "deny []", "Remove subscription for a contact, or deny a request." }, + { "show []", "Show subscription status for a contact." }, + { "sent", "Show all sent subscription requests pending a response." }, + { "received", "Show all received subscription requests awaiting your response." }) + CMD_EXAMPLES( + "/sub request odin@valhalla.edda", + "/sub allow odin@valhalla.edda", + "/sub request", + "/sub sent") + }, { "/tiny", - parse_args, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_tiny) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/tiny ") - CMD_DESC( - "Send url as tinyurl in current chat.") - CMD_ARGS( - { "", "The url to make tiny." }) - CMD_EXAMPLES( - "Example: /tiny https://profanity-im.github.io/") }, + parse_args, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_tiny) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/tiny ") + CMD_DESC( + "Send url as tinyurl in current chat.") + CMD_ARGS( + { "", "The url to make tiny." }) + CMD_EXAMPLES( + "Example: /tiny https://profanity-im.github.io/") + }, { "/who", - parse_args, 0, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_who) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT, - CMD_TAG_ROSTER) - CMD_SYN( - "/who", - "/who online|offline|away|dnd|xa|chat|available|unavailable|any []", - "/who moderator|participant|visitor", - "/who owner|admin|member") - CMD_DESC( - "Show contacts or room occupants with chosen status, role or affiliation.") - CMD_ARGS( - { "offline|away|dnd|xa|chat", "Show contacts or room occupants with specified presence." }, - { "online", "Contacts that are online, chat, away, xa, dnd." }, - { "available", "Contacts that are available for chat - online, chat." }, - { "unavailable", "Contacts that are not available for chat - offline, away, xa, dnd." }, - { "any", "Contacts with any status (same as calling with no argument)." }, - { "", "Filter the results by the specified roster group, not applicable in chat rooms." }, - { "moderator|participant|visitor", "Room occupants with the specified role." }, - { "owner|admin|member", "Room occupants with the specified affiliation." }) - CMD_EXAMPLES( - "/who", - "/who xa", - "/who online friends", - "/who any family", - "/who participant", - "/who admin") }, + parse_args, 0, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_who) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT, + CMD_TAG_ROSTER) + CMD_SYN( + "/who", + "/who online|offline|away|dnd|xa|chat|available|unavailable|any []", + "/who moderator|participant|visitor", + "/who owner|admin|member") + CMD_DESC( + "Show contacts or room occupants with chosen status, role or affiliation.") + CMD_ARGS( + { "offline|away|dnd|xa|chat", "Show contacts or room occupants with specified presence." }, + { "online", "Contacts that are online, chat, away, xa, dnd." }, + { "available", "Contacts that are available for chat - online, chat." }, + { "unavailable", "Contacts that are not available for chat - offline, away, xa, dnd." }, + { "any", "Contacts with any status (same as calling with no argument)." }, + { "", "Filter the results by the specified roster group, not applicable in chat rooms." }, + { "moderator|participant|visitor", "Room occupants with the specified role." }, + { "owner|admin|member", "Room occupants with the specified affiliation." }) + CMD_EXAMPLES( + "/who", + "/who xa", + "/who online friends", + "/who any family", + "/who participant", + "/who admin") + }, { "/close", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_close) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/close", - "/close ", - "/close ", - "/close ", - "/close ", - "/close ", - "/close xmlconsole", - "/close all|read") - CMD_DESC( - "Close windows. " - "Passing no argument closes the current window.") - CMD_ARGS( - { "", "Close specified window number." }, - { "", "Close chat window with contact by JID if open." }, - { "", "Close chat window with contact by nickname if open." }, - { "", "Close chat room window with roomjid if open." }, - { "", "Close private chat roomoccupantjid if open." }, - { "xmlconsole", "Close the XML Console window if open." }, - { "all", "Close all windows." }, - { "read", "Close all windows that have no unread messages." }) - CMD_NOEXAMPLES }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_close) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/close", + "/close ", + "/close ", + "/close ", + "/close ", + "/close ", + "/close xmlconsole", + "/close all|read") + CMD_DESC( + "Close windows. " + "Passing no argument closes the current window.") + CMD_ARGS( + { "", "Close specified window number." }, + { "", "Close chat window with contact by JID if open." }, + { "", "Close chat window with contact by nickname if open." }, + { "", "Close chat room window with roomjid if open." }, + { "", "Close private chat roomoccupantjid if open." }, + { "xmlconsole", "Close the XML Console window if open." }, + { "all", "Close all windows." }, + { "read", "Close all windows that have no unread messages." }) + CMD_NOEXAMPLES + }, { "/clear", - parse_args, 0, 2, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_clear) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/clear", - "/clear persist_history ") - CMD_DESC( - "Clear the current window. " - "If you set persist_history you can still access the history by pressing PAGE UP.") - CMD_ARGS( - { "persist_history on|off", "Whether or not to clear the screen persistently." }) - CMD_EXAMPLES( - "/clear", - "/clear persist_history", - "/clear persist_history on") }, + parse_args, 0, 2, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_clear) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/clear", + "/clear persist_history ") + CMD_DESC( + "Clear the current window. " + "If you set persist_history you can still access the history by pressing PAGE UP.") + CMD_ARGS( + { "persist_history on|off", "Whether or not to clear the screen persistently."}) + CMD_EXAMPLES( + "/clear", + "/clear persist_history", + "/clear persist_history on") + }, { "/quit", - parse_args, 0, 0, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_quit) - CMD_NOTAGS - CMD_SYN( - "/quit") - CMD_DESC( - "Logout of any current session, and quit Profanity.") - CMD_NOARGS - CMD_NOEXAMPLES }, + parse_args, 0, 0, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_quit) + CMD_NOTAGS + CMD_SYN( + "/quit") + CMD_DESC( + "Logout of any current session, and quit Profanity.") + CMD_NOARGS + CMD_NOEXAMPLES + }, { "/privileges", - parse_args, 1, 1, &cons_privileges_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_privileges) - CMD_TAGS( - CMD_TAG_GROUPCHAT, - CMD_TAG_UI) - CMD_SYN( - "/privileges on|off") - CMD_DESC( - "Group occupants panel by role, and show role information in chat rooms.") - CMD_ARGS( - { "on|off", "Enable or disable privilege information." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_privileges_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_privileges) + CMD_TAGS( + CMD_TAG_GROUPCHAT, + CMD_TAG_UI) + CMD_SYN( + "/privileges on|off") + CMD_DESC( + "Group occupants panel by role, and show role information in chat rooms.") + CMD_ARGS( + { "on|off", "Enable or disable privilege information." }) + CMD_NOEXAMPLES + }, { "/charset", - parse_args, 0, 0, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_charset) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/charset") - CMD_DESC( - "Display information about the current character set supported by the terminal. ") - CMD_NOARGS - CMD_NOEXAMPLES }, + parse_args, 0, 0, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_charset) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/charset") + CMD_DESC( + "Display information about the current character set supported by the terminal. ") + CMD_NOARGS + CMD_NOEXAMPLES + }, { "/beep", - parse_args, 1, 1, &cons_beep_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_beep) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/beep on|off") - CMD_DESC( - "Switch the terminal bell on or off. " - "The bell will sound when incoming messages are received. " - "If the terminal does not support sounds, it may attempt to flash the screen instead.") - CMD_ARGS( - { "on|off", "Enable or disable terminal bell." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_beep_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_beep) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/beep on|off") + CMD_DESC( + "Switch the terminal bell on or off. " + "The bell will sound when incoming messages are received. " + "If the terminal does not support sounds, it may attempt to flash the screen instead.") + CMD_ARGS( + { "on|off", "Enable or disable terminal bell." }) + CMD_NOEXAMPLES + }, { "/console", - parse_args, 2, 2, &cons_console_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_console) - CMD_TAGS( - CMD_TAG_UI, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/console chat all|first|none", - "/console muc all|first|none", - "/console private all|first|none") - CMD_DESC( - "Configure what is displayed in the console window when messages are received. " - "The default is set to 'all' for all types of messages.") - CMD_ARGS( - { "chat all", "Indicate all new chat messages in the console." }, - { "chat first", "Indicate only the first new message per chat in the console." }, - { "chat none", "Do not show any new chat messages in the console window." }, - { "muc all", "Indicate all new chat room messages in the console." }, - { "muc first", "Indicate only the first new message in each room in the console." }, - { "muc none", "Do not show any new chat room messages in the console window." }, - { "private all", "Indicate all new private room messages in the console." }, - { "private first", "Indicate only the first private room message in the console." }, - { "private none", "Do not show any new private room messages in the console window." }) - CMD_NOEXAMPLES }, + parse_args, 2, 2, &cons_console_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_console) + CMD_TAGS( + CMD_TAG_UI, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/console chat all|first|none", + "/console muc all|first|none", + "/console private all|first|none") + CMD_DESC( + "Configure what is displayed in the console window when messages are received. " + "The default is set to 'all' for all types of messages.") + CMD_ARGS( + { "chat all", "Indicate all new chat messages in the console." }, + { "chat first", "Indicate only the first new message per chat in the console." }, + { "chat none", "Do not show any new chat messages in the console window." }, + { "muc all", "Indicate all new chat room messages in the console." }, + { "muc first", "Indicate only the first new message in each room in the console." }, + { "muc none", "Do not show any new chat room messages in the console window." }, + { "private all", "Indicate all new private room messages in the console." }, + { "private first", "Indicate only the first private room message in the console." }, + { "private none", "Do not show any new private room messages in the console window." }) + CMD_NOEXAMPLES + }, { "/presence", - parse_args, 2, 2, &cons_presence_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_presence) - CMD_TAGS( - CMD_TAG_UI, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/presence titlebar on|off", - "/presence console all|online|none", - "/presence chat all|online|none", - "/presence room all|online|none") - CMD_DESC( - "Show the contacts presence in the titlebar and configure presence messages in different window types.") - CMD_ARGS( - { "titlebar on|off", "Switch display of the contacts presence in the titlebar on or off." }, - { "console all", "Show all presence changes in the console window." }, - { "console online", "Show only online/offline presence changes in the console window." }, - { "console none", "Don't show any presence changes in the console window." }, - { "chat all", "Show all presence changes in the chat windows." }, - { "chat online", "Show only online/offline presence changes in chat windows." }, - { "chat none", "Don't show any presence changes in chat windows." }, - { "room all", "Show all presence changes in chat room windows." }, - { "room online", "Show only online/offline presence changes in chat room windows." }, - { "room none", "Don't show any presence changes in chat room windows." }) - CMD_EXAMPLES( - "/presence titlebar off", - "/presence console none", - "/presence chat online", - "/presence room all") }, + parse_args, 2, 2, &cons_presence_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_presence) + CMD_TAGS( + CMD_TAG_UI, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/presence titlebar on|off", + "/presence console all|online|none", + "/presence chat all|online|none", + "/presence room all|online|none") + CMD_DESC( + "Show the contacts presence in the titlebar and configure presence messages in different window types.") + CMD_ARGS( + { "titlebar on|off", "Switch display of the contacts presence in the titlebar on or off." }, + { "console all", "Show all presence changes in the console window." }, + { "console online", "Show only online/offline presence changes in the console window." }, + { "console none", "Don't show any presence changes in the console window." }, + { "chat all", "Show all presence changes in the chat windows." }, + { "chat online", "Show only online/offline presence changes in chat windows." }, + { "chat none", "Don't show any presence changes in chat windows." }, + { "room all", "Show all presence changes in chat room windows." }, + { "room online", "Show only online/offline presence changes in chat room windows." }, + { "room none", "Don't show any presence changes in chat room windows." }) + CMD_EXAMPLES( + "/presence titlebar off", + "/presence console none", + "/presence chat online", + "/presence room all") + }, { "/wrap", - parse_args, 1, 1, &cons_wrap_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_wrap) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/wrap on|off") - CMD_DESC( - "Word wrapping.") - CMD_ARGS( - { "on|off", "Enable or disable word wrapping in the main window." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_wrap_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_wrap) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/wrap on|off") + CMD_DESC( + "Word wrapping.") + CMD_ARGS( + { "on|off", "Enable or disable word wrapping in the main window." }) + CMD_NOEXAMPLES + }, { "/time", - parse_args, 1, 3, &cons_time_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_time) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/time all|console|chat|muc|config|private|xml set ", - "/time all|console|chat|muc|config|private|xml off", - "/time statusbar set ", - "/time statusbar off", - "/time lastactivity set ") - CMD_DESC( - "Configure time display preferences. " - "Time formats are strings supported by g_date_time_format. " - "See https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format for more details. " - "Setting the format to an unsupported string, will display the string. " - "If the format contains spaces, it must be surrounded with double quotes.") - CMD_ARGS( - { "console set ", "Set time format for console window." }, - { "console off", "Do not show time in console window." }, - { "chat set ", "Set time format for chat windows." }, - { "chat off", "Do not show time in chat windows." }, - { "muc set ", "Set time format for chat room windows." }, - { "muc off", "Do not show time in chat room windows." }, - { "config set ", "Set time format for config windows." }, - { "config off", "Do not show time in config windows." }, - { "private set ", "Set time format for private chat windows." }, - { "private off", "Do not show time in private chat windows." }, - { "xml set ", "Set time format for XML console window." }, - { "xml off", "Do not show time in XML console window." }, - { "statusbar set ", "Change time format in statusbar." }, - { "statusbar off", "Do not show time in status bar." }, - { "lastactivity set ", "Change time format for last activity." }, - { "all set ", "Set time for: console, chat, muc, config, private and xml windows." }, - { "all off", "Do not show time for: console, chat, muc, config, private and xml windows." }) - CMD_EXAMPLES( - "/time console set %H:%M:%S", - "/time chat set \"%d-%m-%y %H:%M:%S\"", - "/time xml off", - "/time statusbar set %H:%M", - "/time lastactivity set \"%d-%m-%y %H:%M:%S\"", - "/time all set \"%d-%m-%y %H:%M:%S\"") }, + parse_args, 1, 3, &cons_time_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_time) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/time all|console|chat|muc|config|private|xml set ", + "/time all|console|chat|muc|config|private|xml off", + "/time statusbar set ", + "/time statusbar off", + "/time lastactivity set ") + CMD_DESC( + "Configure time display preferences. " + "Time formats are strings supported by g_date_time_format. " + "See https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format for more details. " + "Setting the format to an unsupported string, will display the string. " + "If the format contains spaces, it must be surrounded with double quotes.") + CMD_ARGS( + { "console set ", "Set time format for console window." }, + { "console off", "Do not show time in console window." }, + { "chat set ", "Set time format for chat windows." }, + { "chat off", "Do not show time in chat windows." }, + { "muc set ", "Set time format for chat room windows." }, + { "muc off", "Do not show time in chat room windows." }, + { "config set ", "Set time format for config windows." }, + { "config off", "Do not show time in config windows." }, + { "private set ", "Set time format for private chat windows." }, + { "private off", "Do not show time in private chat windows." }, + { "xml set ", "Set time format for XML console window." }, + { "xml off", "Do not show time in XML console window." }, + { "statusbar set ", "Change time format in statusbar." }, + { "statusbar off", "Do not show time in status bar." }, + { "lastactivity set ", "Change time format for last activity." }, + { "all set ", "Set time for: console, chat, muc, config, private and xml windows." }, + { "all off", "Do not show time for: console, chat, muc, config, private and xml windows." }) + CMD_EXAMPLES( + "/time console set %H:%M:%S", + "/time chat set \"%d-%m-%y %H:%M:%S\"", + "/time xml off", + "/time statusbar set %H:%M", + "/time lastactivity set \"%d-%m-%y %H:%M:%S\"", + "/time all set \"%d-%m-%y %H:%M:%S\"") + }, { "/inpblock", - parse_args, 2, 2, &cons_inpblock_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_inpblock) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/inpblock timeout ", - "/inpblock dynamic on|off") - CMD_DESC( - "How long to wait for keyboard input before checking for new messages or checking for state changes such as 'idle'.") - CMD_ARGS( - { "timeout ", "Time to wait (1-1000) in milliseconds before reading input from the terminal buffer, default: 1000." }, - { "dynamic on|off", "Start with 0 millis and dynamically increase up to timeout when no activity, default: on." }) - CMD_NOEXAMPLES }, + parse_args, 2, 2, &cons_inpblock_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_inpblock) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/inpblock timeout ", + "/inpblock dynamic on|off") + CMD_DESC( + "How long to wait for keyboard input before checking for new messages or checking for state changes such as 'idle'.") + CMD_ARGS( + { "timeout ", "Time to wait (1-1000) in milliseconds before reading input from the terminal buffer, default: 1000." }, + { "dynamic on|off", "Start with 0 millis and dynamically increase up to timeout when no activity, default: on." }) + CMD_NOEXAMPLES + }, { "/titlebar", - parse_args, 1, 2, &cons_titlebar_setting, - CMD_SUBFUNCS( - { "show", cmd_titlebar_show_hide }, - { "hide", cmd_titlebar_show_hide }) - CMD_MAINFUNC(cmd_titlebar) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/titlebar up", - "/titlebar down", - "/titlebar show|hide [encwarn|resource|tls]") - CMD_DESC( - "Titlebar settings.") - CMD_ARGS( - { "up", "Move the title bar up the screen." }, - { "down", "Move the title bar down the screen." }, - { "show tls", "Show or hide TLS indicator in the titlebar." }, - { "show encwarn", "Enable or disable the unencrypted warning message in the titlebar." }, - { "show resource", "Show or hide the current resource in the titlebar." }, - { "show name", "In case of a MUC. Show the MUC name in the titlebar." }, - { "show jid", "In case of a MUC. Show the JID in the titlebar." }) - CMD_EXAMPLES( - "/titlebar up", - "/titlebar show tls", - "/titlebar hide encwarn") }, + parse_args, 1, 2, &cons_titlebar_setting, + CMD_SUBFUNCS( + { "show", cmd_titlebar_show_hide }, + { "hide", cmd_titlebar_show_hide } + ) + CMD_MAINFUNC(cmd_titlebar) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/titlebar up", + "/titlebar down", + "/titlebar show|hide [encwarn|resource|tls]" + ) + CMD_DESC( + "Titlebar settings.") + CMD_ARGS( + { "up", "Move the title bar up the screen." }, + { "down", "Move the title bar down the screen." }, + { "show tls", "Show or hide TLS indicator in the titlebar." }, + { "show encwarn", "Enable or disable the unencrypted warning message in the titlebar." }, + { "show resource", "Show or hide the current resource in the titlebar." }, + { "show name", "In case of a MUC. Show the MUC name in the titlebar." }, + { "show jid", "In case of a MUC. Show the JID in the titlebar." } + ) + CMD_EXAMPLES( + "/titlebar up", + "/titlebar show tls", + "/titlebar hide encwarn") + }, { "/mainwin", - parse_args, 1, 1, &cons_winpos_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_mainwin) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/mainwin up", - "/mainwin down") - CMD_DESC( - "Move the main window.") - CMD_ARGS( - { "up", "Move the main window up the screen." }, - { "down", "Move the main window down the screen." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_winpos_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_mainwin) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/mainwin up", + "/mainwin down") + CMD_DESC( + "Move the main window.") + CMD_ARGS( + { "up", "Move the main window up the screen." }, + { "down", "Move the main window down the screen." }) + CMD_NOEXAMPLES + }, { "/statusbar", - parse_args, 1, 2, &cons_statusbar_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_statusbar) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/statusbar show name|number|read", - "/statusbar hide name|number|read", - "/statusbar maxtabs ", - "/statusbar tablen ", - "/statusbar self user|barejid|fulljid|off", - "/statusbar chat user|jid", - "/statusbar room room|jid", - "/statusbar up", - "/statusbar down") - CMD_DESC( - "Manage statusbar display preferences.") - CMD_ARGS( - { "maxtabs ", "Set the maximum number of tabs to display, must be between 0 and 10." }, - { "tablen ", "Set the maximum number of characters to show as the tab name, 0 sets to unlimited." }, - { "show|hide name", "Show or hide names in tabs." }, - { "show|hide number", "Show or hide numbers in tabs." }, - { "show|hide read", "Show or hide inactive tabs." }, - { "self user|barejid|fulljid", "Show account user name, barejid, fulljid as status bar title." }, - { "self off", "Disable showing self as status bar title." }, - { "chat user|jid", "Show users name, or the fulljid if no nick is present for chat tabs." }, - { "room room|jid", "Show room name, or the fulljid for room tabs." }, - { "up", "Move the status bar up the screen." }, - { "down", "Move the status bar down the screen." }) - CMD_EXAMPLES( - "/statusbar maxtabs 8", - "/statusbar tablen 5", - "/statusbar self user", - "/statusbar chat jid", - "/statusbar hide read", - "/statusbar hide name") }, + parse_args, 1, 2, &cons_statusbar_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_statusbar) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/statusbar show name|number|read", + "/statusbar hide name|number|read", + "/statusbar maxtabs ", + "/statusbar tablen ", + "/statusbar self user|barejid|fulljid|off", + "/statusbar chat user|jid", + "/statusbar room room|jid", + "/statusbar up", + "/statusbar down") + CMD_DESC( + "Manage statusbar display preferences.") + CMD_ARGS( + { "maxtabs ", "Set the maximum number of tabs to display, must be between 0 and 10." }, + { "tablen ", "Set the maximum number of characters to show as the tab name, 0 sets to unlimited." }, + { "show|hide name", "Show or hide names in tabs." }, + { "show|hide number", "Show or hide numbers in tabs." }, + { "show|hide read", "Show or hide inactive tabs." }, + { "self user|barejid|fulljid", "Show account user name, barejid, fulljid as status bar title." }, + { "self off", "Disable showing self as status bar title." }, + { "chat user|jid", "Show users name, or the fulljid if no nick is present for chat tabs." }, + { "room room|jid", "Show room name, or the fulljid for room tabs." }, + { "up", "Move the status bar up the screen." }, + { "down", "Move the status bar down the screen." }) + CMD_EXAMPLES( + "/statusbar maxtabs 8", + "/statusbar tablen 5", + "/statusbar self user", + "/statusbar chat jid", + "/statusbar hide read", + "/statusbar hide name") + }, { "/inputwin", - parse_args, 1, 1, &cons_winpos_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_inputwin) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/inputwin up", - "/inputwin down") - CMD_DESC( - "Move the input window.") - CMD_ARGS( - { "up", "Move the input window up the screen." }, - { "down", "Move the input window down the screen." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_winpos_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_inputwin) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/inputwin up", + "/inputwin down") + CMD_DESC( + "Move the input window.") + CMD_ARGS( + { "up", "Move the input window up the screen." }, + { "down", "Move the input window down the screen." }) + CMD_NOEXAMPLES + }, { "/notify", - parse_args_with_freetext, 0, 4, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_notify) - CMD_TAGS( - CMD_TAG_UI, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/notify chat on|off", - "/notify chat current on|off", - "/notify chat text on|off", - "/notify room on|off", - "/notify room mention on|off", - "/notify room mention case_sensitive|case_insensitive", - "/notify room mention word_whole|word_part", - "/notify room current on|off", - "/notify room text on|off", - "/notify room trigger add ", - "/notify room trigger remove ", - "/notify room trigger list", - "/notify room trigger on|off", - "/notify on|off", - "/notify mention on|off", - "/notify trigger on|off", - "/notify reset", - "/notify remind ", - "/notify typing on|off", - "/notify typing current on|off", - "/notify invite on|off", - "/notify sub on|off") - CMD_DESC( - "Configure desktop notifications. " - "To configure presence update messages in the console, chat and chat room windows, see '/help presence'.") - CMD_ARGS( - { "chat on|off", "Notifications for regular chat messages." }, - { "chat current on|off", "Whether to show regular chat message notifications when the window is focussed." }, - { "chat text on|off", "Show message text in regular message notifications." }, - { "room on|off", "Notifications for all chat room messages." }, - { "room mention on|off", "Notifications for chat room messages when your nick is mentioned." }, - { "room mention case_sensitive", "Set room mention notifications as case sensitive." }, - { "room mention case_insensitive", "Set room mention notifications as case insensitive." }, - { "room mention word_whole", "Set room mention notifications only on whole word match, i.e. when nickname is not part of a larger word." }, - { "room mention word_part", "Set room mention notifications on partial word match, i.e. nickname may be part of a larger word." }, - { "room current on|off", "Whether to show all chat room messages notifications when the window is focussed." }, - { "room text on|off", "Show message text in chat room message notifications." }, - { "room trigger add ", "Notify when specified text included in all chat room messages." }, - { "room trigger remove ", "Remove chat room notification trigger." }, - { "room trigger list", "List all chat room highlight triggers." }, - { "room trigger on|off", "Enable or disable all chat room notification triggers." }, - { "on|off", "Override the global message setting for the current chat room." }, - { "mention on|off", "Override the global 'mention' setting for the current chat room." }, - { "trigger on|off", "Override the global 'trigger' setting for the current chat room." }, - { "reset", "Reset to global notification settings for the current chat room." }, - { "remind ", "Notification reminder period for unread messages, use 0 to disable." }, - { "typing on|off", "Notifications when contacts are typing." }, - { "typing current on|off", "Whether typing notifications are triggered for the current window." }, - { "invite on|off", "Notifications for chat room invites." }, - { "sub on|off", "Notifications for subscription requests." }) - CMD_EXAMPLES( - "/notify chat on", - "/notify chat text on", - "/notify room mention on", - "/notify room trigger add beer", - "/notify room trigger on", - "/notify room current off", - "/notify room text off", - "/notify remind 60", - "/notify typing on", - "/notify invite on") }, + parse_args_with_freetext, 0, 4, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_notify) + CMD_TAGS( + CMD_TAG_UI, + CMD_TAG_CHAT, + CMD_TAG_GROUPCHAT) + CMD_SYN( + "/notify chat on|off", + "/notify chat current on|off", + "/notify chat text on|off", + "/notify room on|off", + "/notify room mention on|off", + "/notify room mention case_sensitive|case_insensitive", + "/notify room mention word_whole|word_part", + "/notify room current on|off", + "/notify room text on|off", + "/notify room trigger add ", + "/notify room trigger remove ", + "/notify room trigger list", + "/notify room trigger on|off", + "/notify on|off", + "/notify mention on|off", + "/notify trigger on|off", + "/notify reset", + "/notify remind ", + "/notify typing on|off", + "/notify typing current on|off", + "/notify invite on|off", + "/notify sub on|off") + CMD_DESC( + "Configure desktop notifications. " + "To configure presence update messages in the console, chat and chat room windows, see '/help presence'.") + CMD_ARGS( + { "chat on|off", "Notifications for regular chat messages." }, + { "chat current on|off", "Whether to show regular chat message notifications when the window is focussed." }, + { "chat text on|off", "Show message text in regular message notifications." }, + { "room on|off", "Notifications for all chat room messages." }, + { "room mention on|off", "Notifications for chat room messages when your nick is mentioned." }, + { "room mention case_sensitive", "Set room mention notifications as case sensitive." }, + { "room mention case_insensitive", "Set room mention notifications as case insensitive." }, + { "room mention word_whole", "Set room mention notifications only on whole word match, i.e. when nickname is not part of a larger word." }, + { "room mention word_part", "Set room mention notifications on partial word match, i.e. nickname may be part of a larger word." }, + { "room current on|off", "Whether to show all chat room messages notifications when the window is focussed." }, + { "room text on|off", "Show message text in chat room message notifications." }, + { "room trigger add ", "Notify when specified text included in all chat room messages." }, + { "room trigger remove ", "Remove chat room notification trigger." }, + { "room trigger list", "List all chat room highlight triggers." }, + { "room trigger on|off", "Enable or disable all chat room notification triggers." }, + { "on|off", "Override the global message setting for the current chat room." }, + { "mention on|off", "Override the global 'mention' setting for the current chat room." }, + { "trigger on|off", "Override the global 'trigger' setting for the current chat room." }, + { "reset", "Reset to global notification settings for the current chat room." }, + { "remind ", "Notification reminder period for unread messages, use 0 to disable." }, + { "typing on|off", "Notifications when contacts are typing." }, + { "typing current on|off", "Whether typing notifications are triggered for the current window." }, + { "invite on|off", "Notifications for chat room invites." }, + { "sub on|off", "Notifications for subscription requests." }) + CMD_EXAMPLES( + "/notify chat on", + "/notify chat text on", + "/notify room mention on", + "/notify room trigger add beer", + "/notify room trigger on", + "/notify room current off", + "/notify room text off", + "/notify remind 60", + "/notify typing on", + "/notify invite on") + }, { "/flash", - parse_args, 1, 1, &cons_flash_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_flash) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/flash on|off") - CMD_DESC( - "Make the terminal flash when incoming messages are received in another window. " - "If the terminal doesn't support flashing, it may attempt to beep.") - CMD_ARGS( - { "on|off", "Enable or disable terminal flash." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_flash_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_flash) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/flash on|off") + CMD_DESC( + "Make the terminal flash when incoming messages are received in another window. " + "If the terminal doesn't support flashing, it may attempt to beep.") + CMD_ARGS( + { "on|off", "Enable or disable terminal flash." }) + CMD_NOEXAMPLES + }, { "/tray", - parse_args, 1, 2, &cons_tray_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_tray) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/tray on|off", - "/tray read on|off", - "/tray timer ") - CMD_DESC( - "Display an icon in the tray that will indicate new messages.") - CMD_ARGS( - { "on|off", "Show tray icon." }, - { "read on|off", "Show tray icon when no unread messages." }, - { "timer ", "Set tray icon timer, seconds must be between 1-10." }) - CMD_NOEXAMPLES }, + parse_args, 1, 2, &cons_tray_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_tray) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/tray on|off", + "/tray read on|off", + "/tray timer ") + CMD_DESC( + "Display an icon in the tray that will indicate new messages.") + CMD_ARGS( + { "on|off", "Show tray icon." }, + { "read on|off", "Show tray icon when no unread messages." }, + { "timer ", "Set tray icon timer, seconds must be between 1-10." }) + CMD_NOEXAMPLES + }, { "/intype", - parse_args, 1, 1, &cons_intype_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_intype) - CMD_TAGS( - CMD_TAG_UI, - CMD_TAG_CHAT) - CMD_SYN( - "/intype on|off") - CMD_DESC( - "Show when a contact is typing in the console, and in active message window.") - CMD_ARGS( - { "on|off", "Enable or disable contact typing messages." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_intype_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_intype) + CMD_TAGS( + CMD_TAG_UI, + CMD_TAG_CHAT) + CMD_SYN( + "/intype on|off") + CMD_DESC( + "Show when a contact is typing in the console, and in active message window.") + CMD_ARGS( + { "on|off", "Enable or disable contact typing messages." }) + CMD_NOEXAMPLES + }, { "/splash", - parse_args, 1, 1, &cons_splash_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_splash) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/splash on|off") - CMD_DESC( - "Switch on or off the ascii logo on start up and when the /about command is called.") - CMD_ARGS( - { "on|off", "Enable or disable splash logo." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_splash_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_splash) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/splash on|off") + CMD_DESC( + "Switch on or off the ascii logo on start up and when the /about command is called.") + CMD_ARGS( + { "on|off", "Enable or disable splash logo." }) + CMD_NOEXAMPLES + }, { "/autoconnect", - parse_args, 1, 2, &cons_autoconnect_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_autoconnect) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/autoconnect set ", - "/autoconnect off") - CMD_DESC( - "Enable or disable autoconnect on start up. " - "The setting can be overridden by the -a (--account) command line option.") - CMD_ARGS( - { "set ", "Connect with account on start up." }, - { "off", "Disable autoconnect." }) - CMD_EXAMPLES( - "/autoconnect set ulfhednar@valhalla.edda", - "/autoconnect off") }, + parse_args, 1, 2, &cons_autoconnect_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_autoconnect) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/autoconnect set ", + "/autoconnect off") + CMD_DESC( + "Enable or disable autoconnect on start up. " + "The setting can be overridden by the -a (--account) command line option.") + CMD_ARGS( + { "set ", "Connect with account on start up." }, + { "off", "Disable autoconnect." }) + CMD_EXAMPLES( + "/autoconnect set ulfhednar@valhalla.edda", + "/autoconnect off") + }, { "/vercheck", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_vercheck) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/vercheck on|off") - CMD_DESC( - "Check for new versions when Profanity starts, and when the /about command is run.") - CMD_ARGS( - { "on|off", "Enable or disable the version check." }) - CMD_NOEXAMPLES }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_vercheck) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/vercheck on|off") + CMD_DESC( + "Check for new versions when Profanity starts, and when the /about command is run.") + CMD_ARGS( + { "on|off", "Enable or disable the version check." }) + CMD_NOEXAMPLES + }, { "/wintitle", - parse_args, 2, 2, &cons_wintitle_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_wintitle) - CMD_TAGS( - CMD_TAG_UI) - CMD_SYN( - "/wintitle show on|off", - "/wintitle goodbye on|off") - CMD_DESC( - "Allow Profanity to modify the window title bar.") - CMD_ARGS( - { "show on|off", "Show current logged in user, and unread messages as the window title." }, - { "goodbye on|off", "Show a message in the title when exiting profanity." }) - CMD_NOEXAMPLES }, + parse_args, 2, 2, &cons_wintitle_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_wintitle) + CMD_TAGS( + CMD_TAG_UI) + CMD_SYN( + "/wintitle show on|off", + "/wintitle goodbye on|off") + CMD_DESC( + "Allow Profanity to modify the window title bar.") + CMD_ARGS( + { "show on|off", "Show current logged in user, and unread messages as the window title." }, + { "goodbye on|off", "Show a message in the title when exiting profanity." }) + CMD_NOEXAMPLES + }, { "/alias", - parse_args_with_freetext, 1, 3, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_alias) - CMD_NOTAGS - CMD_SYN( - "/alias list", - "/alias add ", - "/alias remove ") - CMD_DESC( - "Add, remove or list command aliases.") - CMD_ARGS( - { "list", "List all aliases." }, - { "add ", "Add a new command alias." }, - { "remove ", "Remove a command alias." }) - CMD_EXAMPLES( - "/alias add friends /who online friends", - "/alias add /q /quit", - "/alias add a /away \"I'm in a meeting.\"", - "/alias remove q", - "/alias list") }, + parse_args_with_freetext, 1, 3, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_alias) + CMD_NOTAGS + CMD_SYN( + "/alias list", + "/alias add ", + "/alias remove ") + CMD_DESC( + "Add, remove or list command aliases.") + CMD_ARGS( + { "list", "List all aliases." }, + { "add ", "Add a new command alias." }, + { "remove ", "Remove a command alias." }) + CMD_EXAMPLES( + "/alias add friends /who online friends", + "/alias add /q /quit", + "/alias add a /away \"I'm in a meeting.\"", + "/alias remove q", + "/alias list") + }, { "/logging", - parse_args, 2, 3, &cons_logging_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_logging) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/logging chat|group on|off") - CMD_DESC( - "Configure chat logging. " - "Switch logging on or off. " - "Chat logging will be enabled if /history is set to on. " - "When disabling this option, /history will also be disabled. ") - CMD_ARGS( - { "chat on|off", "Enable/Disable regular chat logging." }, - { "group on|off", "Enable/Disable groupchat (room) logging." }) - CMD_EXAMPLES( - "/logging chat on", - "/logging group off") }, + parse_args, 2, 3, &cons_logging_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_logging) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/logging chat|group on|off") + CMD_DESC( + "Configure chat logging. " + "Switch logging on or off. " + "Chat logging will be enabled if /history is set to on. " + "When disabling this option, /history will also be disabled. ") + CMD_ARGS( + { "chat on|off", "Enable/Disable regular chat logging." }, + { "group on|off", "Enable/Disable groupchat (room) logging." }) + CMD_EXAMPLES( + "/logging chat on", + "/logging group off") + }, { "/states", - parse_args, 1, 1, &cons_states_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_states) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/states on|off") - CMD_DESC( - "Send chat state notifications to recipient during chat sessions, such as typing, paused, active, gone.") - CMD_ARGS( - { "on|off", "Enable or disable sending of chat state notifications." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_states_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_states) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/states on|off") + CMD_DESC( + "Send chat state notifications to recipient during chat sessions, such as typing, paused, active, gone.") + CMD_ARGS( + { "on|off", "Enable or disable sending of chat state notifications." }) + CMD_NOEXAMPLES + }, { "/pgp", - parse_args, 1, 3, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_pgp) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_UI) - CMD_SYN( - "/pgp libver", - "/pgp keys", - "/pgp contacts", - "/pgp setkey ", - "/pgp start []", - "/pgp end", - "/pgp log on|off|redact", - "/pgp char ", - "/pgp sendfile on|off") - CMD_DESC( - "Open PGP commands to manage keys, and perform PGP encryption during chat sessions. " - "See the /account command to set your own PGP key.") - CMD_ARGS( - { "libver", "Show which version of the libgpgme library is being used." }, - { "keys", "List all keys known to the system." }, - { "contacts", "Show contacts with assigned public keys." }, - { "setkey ", "Manually associate a contact with a public key." }, - { "start []", "Start PGP encrypted chat, current contact will be used if not specified." }, - { "end", "End PGP encrypted chat with the current recipient." }, - { "log on|off", "Enable or disable plaintext logging of PGP encrypted messages." }, - { "log redact", "Log PGP encrypted messages, but replace the contents with [redacted]. This is the default." }, - { "char ", "Set the character to be displayed next to PGP encrypted messages." }, - { "sendfile on|off", "Allow /sendfile to send unencrypted files while otherwise using PGP." }) - CMD_EXAMPLES( - "/pgp log off", - "/pgp setkey odin@valhalla.edda BA19CACE5A9592C5", - "/pgp start odin@valhalla.edda", - "/pgp end", - "/pgp char P") }, + parse_args, 1, 3, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_pgp) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_UI) + CMD_SYN( + "/pgp libver", + "/pgp keys", + "/pgp contacts", + "/pgp setkey ", + "/pgp start []", + "/pgp end", + "/pgp log on|off|redact", + "/pgp char ", + "/pgp sendfile on|off") + CMD_DESC( + "Open PGP commands to manage keys, and perform PGP encryption during chat sessions. " + "See the /account command to set your own PGP key.") + CMD_ARGS( + { "libver", "Show which version of the libgpgme library is being used." }, + { "keys", "List all keys known to the system." }, + { "contacts", "Show contacts with assigned public keys." }, + { "setkey ", "Manually associate a contact with a public key." }, + { "start []", "Start PGP encrypted chat, current contact will be used if not specified." }, + { "end", "End PGP encrypted chat with the current recipient." }, + { "log on|off", "Enable or disable plaintext logging of PGP encrypted messages." }, + { "log redact", "Log PGP encrypted messages, but replace the contents with [redacted]. This is the default." }, + { "char ", "Set the character to be displayed next to PGP encrypted messages." }, + { "sendfile on|off", "Allow /sendfile to send unencrypted files while otherwise using PGP."}) + CMD_EXAMPLES( + "/pgp log off", + "/pgp setkey odin@valhalla.edda BA19CACE5A9592C5", + "/pgp start odin@valhalla.edda", + "/pgp end", + "/pgp char P") + }, // XEP-0373: OpenPGP for XMPP #ifdef HAVE_LIBGPGME { "/ox", - parse_args, 1, 3, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_ox) - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_UI) - CMD_SYN( - "/ox keys", - "/ox contacts", - "/ox start []", - "/ox end", - "/ox log on|off|redact", - "/ox char ", - "/ox sendfile on|off", - "/ox announce ", - "/ox discover", - "/ox request ") - CMD_DESC( - "OpenPGP (OX) commands to manage keys, and perform PGP encryption during chat sessions. ") - CMD_ARGS( - { "keys", "List all keys known to the system." }, - { "contacts", "Show contacts with assigned public keys." }, - { "start []", "Start PGP encrypted chat, current contact will be used if not specified." }, - { "end", "End PGP encrypted chat with the current recipient." }, - { "log on|off", "Enable or disable plaintext logging of PGP encrypted messages." }, - { "log redact", "Log PGP encrypted messages, but replace the contents with [redacted]. This is the default." }, - { "char ", "Set the character to be displayed next to PGP encrypted messages." }, - { "announce ", "Announce a public key by pushing it on the XMPP Server" }, - { "discover ", "Discover public keys of a jid " }, - { "request ", "Request public keys" }, - { "sendfile on|off", "Allow /sendfile to send unencrypted files while otherwise using PGP." }) - CMD_EXAMPLES( - "/ox log off", - "/ox start odin@valhalla.edda", - "/ox end", - "/ox char X") }, + parse_args, 1, 3, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_ox) + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_UI) + CMD_SYN( + "/ox keys", + "/ox contacts", + "/ox start []", + "/ox end", + "/ox log on|off|redact", + "/ox char ", + "/ox sendfile on|off", + "/ox announce ", + "/ox discover", + "/ox request ") + CMD_DESC( + "OpenPGP (OX) commands to manage keys, and perform PGP encryption during chat sessions. ") + CMD_ARGS( + { "keys", "List all keys known to the system." }, + { "contacts", "Show contacts with assigned public keys." }, + { "start []", "Start PGP encrypted chat, current contact will be used if not specified." }, + { "end", "End PGP encrypted chat with the current recipient." }, + { "log on|off", "Enable or disable plaintext logging of PGP encrypted messages." }, + { "log redact", "Log PGP encrypted messages, but replace the contents with [redacted]. This is the default." }, + { "char ", "Set the character to be displayed next to PGP encrypted messages." }, + { "announce ", "Announce a public key by pushing it on the XMPP Server"}, + { "discover ", "Discover public keys of a jid "}, + { "request ", "Request public keys"}, + { "sendfile on|off", "Allow /sendfile to send unencrypted files while otherwise using PGP."}) + CMD_EXAMPLES( + "/ox log off", + "/ox start odin@valhalla.edda", + "/ox end", + "/ox char X") + }, #endif // HAVE_LIBGPGME { "/otr", - parse_args, 1, 3, NULL, - CMD_SUBFUNCS( - { "char", cmd_otr_char }, - { "log", cmd_otr_log }, - { "libver", cmd_otr_libver }, - { "policy", cmd_otr_policy }, - { "gen", cmd_otr_gen }, - { "myfp", cmd_otr_myfp }, - { "theirfp", cmd_otr_theirfp }, - { "start", cmd_otr_start }, - { "end", cmd_otr_end }, - { "trust", cmd_otr_trust }, - { "untrust", cmd_otr_untrust }, - { "secret", cmd_otr_secret }, - { "question", cmd_otr_question }, - { "answer", cmd_otr_answer }, - { "sendfile", cmd_otr_sendfile }) - CMD_NOMAINFUNC - CMD_TAGS( - CMD_TAG_CHAT, - CMD_TAG_UI) - CMD_SYN( - "/otr libver", - "/otr gen", - "/otr myfp|theirfp", - "/otr start []", - "/otr end", - "/otr trust|untrust", - "/otr secret ", - "/otr question ", - "/otr answer ", - "/otr policy manual|opportunistic|always []", - "/otr log on|off|redact", - "/otr char ", - "/otr sendfile on|off") - CMD_DESC( - "Off The Record (OTR) commands to manage keys, and perform OTR encryption during chat sessions.") - CMD_ARGS( - { "libver", "Show which version of the libotr library is being used." }, - { "gen", "Generate your private key." }, - { "myfp", "Show your fingerprint." }, - { "theirfp", "Show contacts fingerprint." }, - { "start []", "Start an OTR session with contact, or current recipient if omitted." }, - { "end", "End the current OTR session." }, - { "trust|untrust", "Indicate whether or not you trust the contact's fingerprint." }, - { "secret ", "Verify a contact's identity using a shared secret." }, - { "question ", "Verify a contact's identity using a question and expected answer." }, - { "answer ", "Respond to a question answer verification request with your answer." }, - { "policy manual", "Set the global OTR policy to manual, OTR sessions must be started manually." }, - { "policy manual ", "Set the OTR policy to manual for a specific contact." }, - { "policy opportunistic", "Set the global OTR policy to opportunistic, an OTR session will be attempted upon starting a conversation." }, - { "policy opportunistic ", "Set the OTR policy to opportunistic for a specific contact." }, - { "policy always", "Set the global OTR policy to always, an error will be displayed if an OTR session cannot be initiated upon starting a conversation." }, - { "policy always ", "Set the OTR policy to always for a specific contact." }, - { "log on|off", "Enable or disable plaintext logging of OTR encrypted messages." }, - { "log redact", "Log OTR encrypted messages, but replace the contents with [redacted]. This is the default." }, - { "char ", "Set the character to be displayed next to OTR encrypted messages." }, - { "sendfile on|off", "Allow /sendfile to send unencrypted files while in an OTR session." }) - CMD_EXAMPLES( - "/otr log off", - "/otr policy manual", - "/otr policy opportunistic odin@valhalla.edda", - "/otr gen", - "/otr start odin@valhalla.edda", - "/otr myfp", - "/otr theirfp", - "/otr question \"What is the name of my rabbit?\" fiffi", - "/otr end", - "/otr char *") }, + parse_args, 1, 3, NULL, + CMD_SUBFUNCS( + { "char", cmd_otr_char }, + { "log", cmd_otr_log }, + { "libver", cmd_otr_libver }, + { "policy", cmd_otr_policy }, + { "gen", cmd_otr_gen }, + { "myfp", cmd_otr_myfp }, + { "theirfp", cmd_otr_theirfp }, + { "start", cmd_otr_start }, + { "end", cmd_otr_end }, + { "trust", cmd_otr_trust }, + { "untrust", cmd_otr_untrust }, + { "secret", cmd_otr_secret }, + { "question", cmd_otr_question }, + { "answer", cmd_otr_answer }, + { "sendfile", cmd_otr_sendfile }) + CMD_NOMAINFUNC + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_UI) + CMD_SYN( + "/otr libver", + "/otr gen", + "/otr myfp|theirfp", + "/otr start []", + "/otr end", + "/otr trust|untrust", + "/otr secret ", + "/otr question ", + "/otr answer ", + "/otr policy manual|opportunistic|always []", + "/otr log on|off|redact", + "/otr char ", + "/otr sendfile on|off") + CMD_DESC( + "Off The Record (OTR) commands to manage keys, and perform OTR encryption during chat sessions.") + CMD_ARGS( + { "libver", "Show which version of the libotr library is being used." }, + { "gen", "Generate your private key." }, + { "myfp", "Show your fingerprint." }, + { "theirfp", "Show contacts fingerprint." }, + { "start []", "Start an OTR session with contact, or current recipient if omitted." }, + { "end", "End the current OTR session." }, + { "trust|untrust", "Indicate whether or not you trust the contact's fingerprint." }, + { "secret ", "Verify a contact's identity using a shared secret." }, + { "question ", "Verify a contact's identity using a question and expected answer." }, + { "answer ", "Respond to a question answer verification request with your answer." }, + { "policy manual", "Set the global OTR policy to manual, OTR sessions must be started manually." }, + { "policy manual ", "Set the OTR policy to manual for a specific contact." }, + { "policy opportunistic", "Set the global OTR policy to opportunistic, an OTR session will be attempted upon starting a conversation." }, + { "policy opportunistic ", "Set the OTR policy to opportunistic for a specific contact." }, + { "policy always", "Set the global OTR policy to always, an error will be displayed if an OTR session cannot be initiated upon starting a conversation." }, + { "policy always ", "Set the OTR policy to always for a specific contact." }, + { "log on|off", "Enable or disable plaintext logging of OTR encrypted messages." }, + { "log redact", "Log OTR encrypted messages, but replace the contents with [redacted]. This is the default." }, + { "char ", "Set the character to be displayed next to OTR encrypted messages." }, + { "sendfile on|off", "Allow /sendfile to send unencrypted files while in an OTR session."}) + CMD_EXAMPLES( + "/otr log off", + "/otr policy manual", + "/otr policy opportunistic odin@valhalla.edda", + "/otr gen", + "/otr start odin@valhalla.edda", + "/otr myfp", + "/otr theirfp", + "/otr question \"What is the name of my rabbit?\" fiffi", + "/otr end", + "/otr char *") + }, { "/outtype", - parse_args, 1, 1, &cons_outtype_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_outtype) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/outtype on|off") - CMD_DESC( - "Send typing notifications, chat states (/states) will be enabled if this setting is enabled.") - CMD_ARGS( - { "on|off", "Enable or disable sending typing notifications." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_outtype_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_outtype) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/outtype on|off") + CMD_DESC( + "Send typing notifications, chat states (/states) will be enabled if this setting is enabled.") + CMD_ARGS( + { "on|off", "Enable or disable sending typing notifications." }) + CMD_NOEXAMPLES + }, { "/gone", - parse_args, 1, 1, &cons_gone_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_gone) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/gone ") - CMD_DESC( - "Send a 'gone' state to the recipient after the specified number of minutes. " - "Chat states (/states) will be enabled if this setting is set.") - CMD_ARGS( - { "", "Number of minutes of inactivity before sending the 'gone' state, a value of 0 will disable sending this state." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_gone_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_gone) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/gone ") + CMD_DESC( + "Send a 'gone' state to the recipient after the specified number of minutes. " + "Chat states (/states) will be enabled if this setting is set.") + CMD_ARGS( + { "", "Number of minutes of inactivity before sending the 'gone' state, a value of 0 will disable sending this state." }) + CMD_NOEXAMPLES + }, { "/history", - parse_args, 1, 1, &cons_history_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_history) - CMD_TAGS( - CMD_TAG_UI, - CMD_TAG_CHAT) - CMD_SYN( - "/history on|off") - CMD_DESC( - "Switch chat history on or off, /chlog will automatically be enabled when this setting is on. " - "When history is enabled, previous messages are shown in chat windows.") - CMD_ARGS( - { "on|off", "Enable or disable showing chat history." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_history_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_history) + CMD_TAGS( + CMD_TAG_UI, + CMD_TAG_CHAT) + CMD_SYN( + "/history on|off") + CMD_DESC( + "Switch chat history on or off, /chlog will automatically be enabled when this setting is on. " + "When history is enabled, previous messages are shown in chat windows.") + CMD_ARGS( + { "on|off", "Enable or disable showing chat history." }) + CMD_NOEXAMPLES + }, { "/log", - parse_args, 1, 2, &cons_log_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_log) - CMD_NOTAGS - CMD_SYN( - "/log where", - "/log rotate on|off", - "/log maxsize ", - "/log shared on|off") - CMD_DESC( - "Manage profanity log settings.") - CMD_ARGS( - { "where", "Show the current log file location." }, - { "rotate on|off", "Rotate log, default on." }, - { "maxsize ", "With rotate enabled, specifies the max log size, defaults to 1048580 (1MB)." }, - { "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename." }) - CMD_NOEXAMPLES }, + parse_args, 1, 2, &cons_log_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_log) + CMD_NOTAGS + CMD_SYN( + "/log where", + "/log rotate on|off", + "/log maxsize ", + "/log shared on|off") + CMD_DESC( + "Manage profanity log settings.") + CMD_ARGS( + { "where", "Show the current log file location." }, + { "rotate on|off", "Rotate log, default on." }, + { "maxsize ", "With rotate enabled, specifies the max log size, defaults to 1048580 (1MB)." }, + { "shared on|off", "Share logs between all instances, default: on. When off, the process id will be included in the log filename." }) + CMD_NOEXAMPLES + }, { "/carbons", - parse_args, 1, 1, &cons_carbons_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_carbons) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/carbons on|off") - CMD_DESC( - "Enable or disable message carbons. " - "Message carbons ensure that both sides of all conversations are shared with all the user's clients that implement this protocol.") - CMD_ARGS( - { "on|off", "Enable or disable message carbons." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_carbons_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_carbons) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/carbons on|off") + CMD_DESC( + "Enable or disable message carbons. " + "Message carbons ensure that both sides of all conversations are shared with all the user's clients that implement this protocol.") + CMD_ARGS( + { "on|off", "Enable or disable message carbons." }) + CMD_NOEXAMPLES + }, { "/receipts", - parse_args, 2, 2, &cons_receipts_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_receipts) - CMD_TAGS( - CMD_TAG_CHAT) - CMD_SYN( - "/receipts request on|off", - "/receipts send on|off") - CMD_DESC( - "Enable or disable message delivery receipts. The interface will indicate when a message has been received.") - CMD_ARGS( - { "request on|off", "Whether or not to request a receipt upon sending a message." }, - { "send on|off", "Whether or not to send a receipt if one has been requested with a received message." }) - CMD_NOEXAMPLES }, + parse_args, 2, 2, &cons_receipts_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_receipts) + CMD_TAGS( + CMD_TAG_CHAT) + CMD_SYN( + "/receipts request on|off", + "/receipts send on|off") + CMD_DESC( + "Enable or disable message delivery receipts. The interface will indicate when a message has been received.") + CMD_ARGS( + { "request on|off", "Whether or not to request a receipt upon sending a message." }, + { "send on|off", "Whether or not to send a receipt if one has been requested with a received message." }) + CMD_NOEXAMPLES + }, { "/reconnect", - parse_args, 1, 1, &cons_reconnect_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_reconnect) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/reconnect ") - CMD_DESC( - "Set the reconnect attempt interval for when the connection is lost.") - CMD_ARGS( - { "", "Number of seconds before attempting to reconnect, a value of 0 disables reconnect." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, &cons_reconnect_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_reconnect) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/reconnect ") + CMD_DESC( + "Set the reconnect attempt interval for when the connection is lost.") + CMD_ARGS( + { "", "Number of seconds before attempting to reconnect, a value of 0 disables reconnect." }) + CMD_NOEXAMPLES + }, { "/autoping", - parse_args, 2, 2, &cons_autoping_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_autoping) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/autoping set ", - "/autoping timeout ") - CMD_DESC( - "Set the interval between sending ping requests to the server to ensure the connection is kept alive.") - CMD_ARGS( - { "set ", "Number of seconds between sending pings, a value of 0 disables autoping." }, - { "timeout ", "Seconds to wait for autoping responses, after which the connection is considered broken." }) - CMD_NOEXAMPLES }, + parse_args, 2, 2, &cons_autoping_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_autoping) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/autoping set ", + "/autoping timeout ") + CMD_DESC( + "Set the interval between sending ping requests to the server to ensure the connection is kept alive.") + CMD_ARGS( + { "set ", "Number of seconds between sending pings, a value of 0 disables autoping." }, + { "timeout ", "Seconds to wait for autoping responses, after which the connection is considered broken." }) + CMD_NOEXAMPLES + }, { "/ping", - parse_args, 0, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_ping) - CMD_TAGS( - CMD_TAG_CONNECTION) - CMD_SYN( - "/ping []") - CMD_DESC( - "Sends an IQ ping stanza to the specified JID. " - "If no JID is supplied, your chat server will be pinged.") - CMD_ARGS( - { "", "The Jabber ID to send the ping request to." }) - CMD_NOEXAMPLES }, + parse_args, 0, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_ping) + CMD_TAGS( + CMD_TAG_CONNECTION) + CMD_SYN( + "/ping []") + CMD_DESC( + "Sends an IQ ping stanza to the specified JID. " + "If no JID is supplied, your chat server will be pinged.") + CMD_ARGS( + { "", "The Jabber ID to send the ping request to." }) + CMD_NOEXAMPLES + }, { "/autoaway", - parse_args_with_freetext, 2, 3, &cons_autoaway_setting, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_autoaway) - CMD_TAGS( - CMD_TAG_PRESENCE) - CMD_SYN( - "/autoaway mode idle|away|off", - "/autoaway time away|xa ", - "/autoaway message away|xa |off", - "/autoaway check on|off") - CMD_DESC( - "Manage autoaway settings for idle time.") - CMD_ARGS( - { "mode idle", "Sends idle time, status remains online." }, - { "mode away", "Sends away and xa presence as well as idle time." }, - { "mode off", "Disabled (default)." }, - { "time away ", "Number of minutes before the away presence is sent, default: 15." }, - { "time xa ", "Number of minutes before the xa presence is sent, default: 0 (disabled)." }, - { "message away ", "Optional message to send with the away presence, default: off (disabled)." }, - { "message xa ", "Optional message to send with the xa presence, default: off (disabled)." }, - { "message away off", "Send no message with away presence." }, - { "message xa off", "Send no message with xa presence." }, - { "check on|off", "When enabled, checks for activity and sends online presence, default: on." }) - CMD_EXAMPLES( - "/autoaway mode away", - "/autoaway time away 30", - "/autoaway message away Away from computer for a while", - "/autoaway time xa 120", - "/autoaway message xa Away from computer for a very long time", - "/autoaway check off") }, + parse_args_with_freetext, 2, 3, &cons_autoaway_setting, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_autoaway) + CMD_TAGS( + CMD_TAG_PRESENCE) + CMD_SYN( + "/autoaway mode idle|away|off", + "/autoaway time away|xa ", + "/autoaway message away|xa |off", + "/autoaway check on|off") + CMD_DESC( + "Manage autoaway settings for idle time.") + CMD_ARGS( + { "mode idle", "Sends idle time, status remains online." }, + { "mode away", "Sends away and xa presence as well as idle time." }, + { "mode off", "Disabled (default)." }, + { "time away ", "Number of minutes before the away presence is sent, default: 15." }, + { "time xa ", "Number of minutes before the xa presence is sent, default: 0 (disabled)." }, + { "message away ", "Optional message to send with the away presence, default: off (disabled)." }, + { "message xa ", "Optional message to send with the xa presence, default: off (disabled)." }, + { "message away off", "Send no message with away presence." }, + { "message xa off", "Send no message with xa presence." }, + { "check on|off", "When enabled, checks for activity and sends online presence, default: on." }) + CMD_EXAMPLES( + "/autoaway mode away", + "/autoaway time away 30", + "/autoaway message away Away from computer for a while", + "/autoaway time xa 120", + "/autoaway message xa Away from computer for a very long time", + "/autoaway check off") + }, { "/priority", - parse_args, 1, 1, NULL, - CMD_NOSUBFUNCS - CMD_MAINFUNC(cmd_priority) - CMD_TAGS( - CMD_TAG_PRESENCE) - CMD_SYN( - "/priority ") - CMD_DESC( - "Set priority for the current account. " - "See the /account command for specific priority settings per presence status.") - CMD_ARGS( - { "", "Number between -128 and 127, default: 0." }) - CMD_NOEXAMPLES }, + parse_args, 1, 1, NULL, + CMD_NOSUBFUNCS + CMD_MAINFUNC(cmd_priority) + CMD_TAGS( + CMD_TAG_PRESENCE) + CMD_SYN( + "/priority ") + CMD_DESC( + "Set priority for the current account. " + "See the /account command for specific priority settings per presence status.") + CMD_ARGS( + { "", "Number between -128 and 127, default: 0." }) + CMD_NOEXAMPLES + }, { "/account", - parse_args, 0, 4, NULL, - CMD_SUBFUNCS( - { "list", cmd_account_list }, - { "show", cmd_account_show }, - { "add", cmd_account_add }, - { "remove", cmd_account_remove }, - { "enable", cmd_account_enable }, - { "disable", cmd_account_disable }, - { "rename", cmd_account_rename }, - { "default", cmd_account_default }, - { "set", cmd_account_set }, - { "clear", cmd_account_clear }) - CMD_MAINFUNC(cmd_account) - CMD_TAGS( - CMD_TAG_CONNECTION, - CMD_TAG_PRESENCE, - CMD_TAG_CHAT, - CMD_TAG_GROUPCHAT) - CMD_SYN( - "/account", - "/account list", - "/account show ", - "/account enable|disable ", - "/account default set ", - "/account default off", - "/account add ", - "/account remove ", - "/account rename ", - "/account set jid ", - "/account set server ", - "/account set port ", - "/account set status ", - "/account set status last", - "/account set ", - "/account set resource ", - "/account set password ", - "/account set eval_password ", - "/account set muc ", - "/account set nick ", - "/account set otr ", - "/account set pgpkeyid ", - "/account set startscript