diff options
Diffstat (limited to 'src/command')
-rw-r--r-- | src/command/command.c | 38 | ||||
-rw-r--r-- | src/command/command.h | 4 | ||||
-rw-r--r-- | src/command/commands.c | 60 | ||||
-rw-r--r-- | src/command/commands.h | 1 |
4 files changed, 76 insertions, 27 deletions
diff --git a/src/command/command.c b/src/command/command.c index 05b047db..67a725f5 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -32,7 +32,7 @@ * */ -#include "config.h" +#include "prof_config.h" #include <assert.h> #include <errno.h> @@ -58,10 +58,11 @@ #include "xmpp/form.h" #include "log.h" #include "muc.h" -#ifdef HAVE_LIBOTR +#include "plugins/plugins.h" +#ifdef PROF_HAVE_LIBOTR #include "otr/otr.h" #endif -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME #include "pgp/gpg.h" #endif #include "profanity.h" @@ -1733,6 +1734,17 @@ static struct cmd_t command_defs[] = "/account rename me gtalk") }, + { "/plugins", + cmd_plugins, parse_args, 0, 0, NULL, + CMD_NOTAGS + CMD_SYN( + "/plugins") + CMD_DESC( + "Show currently installed plugins. ") + CMD_NOARGS + CMD_NOEXAMPLES + }, + { "/prefs", cmd_prefs, parse_args, 0, 1, NULL, CMD_NOTAGS @@ -2641,7 +2653,7 @@ cmd_exists(char *cmd) } void -cmd_autocomplete_add(char *value) +cmd_autocomplete_add(const char *const value) { if (commands_ac) { autocomplete_add(commands_ac, value); @@ -2687,7 +2699,7 @@ cmd_autocomplete_remove_form_fields(DataForm *form) } void -cmd_autocomplete_remove(char *value) +cmd_autocomplete_remove(const char *const value) { if (commands_ac) { autocomplete_remove(commands_ac, value); @@ -2756,7 +2768,7 @@ cmd_reset_autocomplete(ProfWin *window) tlscerts_reset_ac(); prefs_reset_boolean_choice(); presence_reset_sub_request_search(); -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME p_gpg_autocomplete_key_reset(); #endif autocomplete_reset(help_ac); @@ -2867,6 +2879,7 @@ cmd_reset_autocomplete(ProfWin *window) prefs_reset_room_trigger_ac(); win_reset_search_attempts(); win_close_reset_search_attempts(); + plugins_reset_autocomplete(); } gboolean @@ -2968,6 +2981,8 @@ _cmd_execute(ProfWin *window, const char *const command, const char *const inp) g_strfreev(args); return result; } + } else if (plugins_run_command(inp)) { + return TRUE; } else { gboolean ran_alias = FALSE; gboolean alias_result = cmd_execute_alias(window, inp, &ran_alias); @@ -3128,6 +3143,11 @@ _cmd_complete_parameters(ProfWin *window, const char *const input) } g_hash_table_destroy(ac_funcs); + result = plugins_autocomplete(input); + if (result) { + return result; + } + if (g_str_has_prefix(input, "/field")) { result = _form_field_autocomplete(window, input); if (result) { @@ -3190,7 +3210,7 @@ _who_autocomplete(ProfWin *window, const char *const input) } } - return NULL; + return result; } static char* @@ -3647,7 +3667,7 @@ _pgp_autocomplete(ProfWin *window, const char *const input) return found; } -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME gboolean result; gchar **args = parse_args(input, 2, 3, &result); if ((strncmp(input, "/pgp", 4) == 0) && (result == TRUE)) { @@ -4568,7 +4588,7 @@ _account_autocomplete(ProfWin *window, const char *const input) if (found) { return found; } -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME } else if ((g_strv_length(args) > 3) && (g_strcmp0(args[2], "pgpkeyid")) == 0) { g_string_append(beginning, " "); g_string_append(beginning, args[2]); diff --git a/src/command/command.h b/src/command/command.h index cbab33f4..76f9560e 100644 --- a/src/command/command.h +++ b/src/command/command.h @@ -47,8 +47,8 @@ void cmd_uninit(void); char* cmd_autocomplete(ProfWin *window, const char *const input); void cmd_reset_autocomplete(ProfWin *window); -void cmd_autocomplete_add(char *value); -void cmd_autocomplete_remove(char *value); +void cmd_autocomplete_add(const char *const value); +void cmd_autocomplete_remove(const char *const value); void cmd_autocomplete_add_form_fields(DataForm *form); void cmd_autocomplete_remove_form_fields(DataForm *form); void cmd_alias_add(char *value); diff --git a/src/command/commands.c b/src/command/commands.c index ee2e9c83..74633e99 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -32,7 +32,7 @@ * */ -#include "config.h" +#include "prof_config.h" #include <string.h> #include <stdlib.h> @@ -61,13 +61,14 @@ #include "jid.h" #include "log.h" #include "muc.h" -#ifdef HAVE_LIBOTR +#ifdef PROF_HAVE_LIBOTR #include "otr/otr.h" #endif -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME #include "pgp/gpg.h" #endif #include "profanity.h" +#include "plugins/plugins.h" #include "tools/autocomplete.h" #include "tools/parser.h" #include "tools/tinyurl.h" @@ -100,12 +101,19 @@ cmd_execute_default(ProfWin *window, const char *inp) return TRUE; } - // handle non commands in non chat windows - if (window->type != WIN_CHAT && window->type != WIN_MUC && window->type != WIN_PRIVATE) { + // handle non commands in non chat or plugin windows + if (window->type != WIN_CHAT && window->type != WIN_MUC && window->type != WIN_PRIVATE && window->type != WIN_PLUGIN) { cons_show("Unknown command: %s", inp); return TRUE; } + // handle plugin window + if (window->type == WIN_PLUGIN) { + ProfPluginWin *pluginwin = (ProfPluginWin*)window; + plugins_win_process_line(pluginwin->tag, inp); + return TRUE; + } + jabber_conn_status_t status = jabber_get_connection_status(); if (status != JABBER_CONNECTED) { ui_current_print_line("You are not currently connected."); @@ -167,7 +175,7 @@ gboolean cmd_tls(ProfWin *window, const char *const command, gchar **args) { if (g_strcmp0(args[0], "certpath") == 0) { -#ifdef HAVE_LIBMESODE +#ifdef PROF_HAVE_LIBMESODE if (g_strcmp0(args[1], "set") == 0) { if (args[2] == NULL) { cons_bad_cmd_usage(command); @@ -203,7 +211,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args) return TRUE; #endif } else if (g_strcmp0(args[0], "trust") == 0) { -#ifdef HAVE_LIBMESODE +#ifdef PROF_HAVE_LIBMESODE jabber_conn_status_t conn_status = jabber_get_connection_status(); if (conn_status != JABBER_CONNECTED) { cons_show("You are not currently connected."); @@ -232,7 +240,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args) return TRUE; #endif } else if (g_strcmp0(args[0], "trusted") == 0) { -#ifdef HAVE_LIBMESODE +#ifdef PROF_HAVE_LIBMESODE GList *certs = tlscerts_list(); GList *curr = certs; @@ -255,7 +263,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args) return TRUE; #endif } else if (g_strcmp0(args[0], "revoke") == 0) { -#ifdef HAVE_LIBMESODE +#ifdef PROF_HAVE_LIBMESODE if (args[1] == NULL) { cons_bad_cmd_usage(command); } else { @@ -274,7 +282,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args) } else if (g_strcmp0(args[0], "show") == 0) { return _cmd_set_boolean_preference(args[1], command, "TLS titlebar indicator", PREF_TLS_SHOW); } else if (g_strcmp0(args[0], "cert") == 0) { -#ifdef HAVE_LIBMESODE +#ifdef PROF_HAVE_LIBMESODE if (args[1]) { TLSCertificate *cert = tlscerts_get_trusted(args[1]); if (!cert) { @@ -654,7 +662,7 @@ cmd_account(ProfWin *window, const char *const command, gchar **args) } cons_show(""); } else if (strcmp(property, "pgpkeyid") == 0) { -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME char *err_str = NULL; if (!p_gpg_valid_key(value, &err_str)) { cons_show("Invalid PGP key ID specified: %s, see /pgp keys", err_str); @@ -1886,7 +1894,7 @@ cmd_msg(ProfWin *window, const char *const command, gchar **args) if (msg) { cl_ev_send_msg(chatwin, msg); } else { -#ifdef HAVE_LIBOTR +#ifdef PROF_HAVE_LIBOTR if (otr_is_secure(barejid)) { chatwin_otr_secured(chatwin, otr_is_trusted(barejid)); } @@ -2774,7 +2782,7 @@ cmd_resource(ProfWin *window, const char *const command, gchar **args) return TRUE; } -#ifdef HAVE_LIBOTR +#ifdef PROF_HAVE_LIBOTR if (otr_is_secure(chatwin->barejid)) { cons_show("Cannot choose resource during an OTR session."); return TRUE; @@ -5603,9 +5611,30 @@ cmd_xa(ProfWin *window, const char *const command, gchar **args) } gboolean +cmd_plugins(ProfWin *window, const char *const command, gchar **args) +{ + GSList *plugins = plugins_get_list(); + + GSList *curr = plugins; + if (curr == NULL) { + cons_show("No plugins installed."); + } else { + cons_show("Installed plugins:"); + while (curr) { + ProfPlugin *plugin = curr->data; + char *lang = plugins_get_lang_string(plugin); + cons_show(" %s (%s)", plugin->name, lang); + curr = g_slist_next(curr); + } + } + g_slist_free(curr); + return TRUE; +} + +gboolean cmd_pgp(ProfWin *window, const char *const command, gchar **args) { -#ifdef HAVE_LIBGPGME +#ifdef PROF_HAVE_LIBGPGME if (args[0] == NULL) { cons_bad_cmd_usage(command); return TRUE; @@ -5837,13 +5866,12 @@ cmd_pgp(ProfWin *window, const char *const command, gchar **args) cons_show("This version of Profanity has not been built with PGP support enabled"); return TRUE; #endif - } gboolean cmd_otr(ProfWin *window, const char *const command, gchar **args) { -#ifdef HAVE_LIBOTR +#ifdef PROF_HAVE_LIBOTR if (args[0] == NULL) { cons_bad_cmd_usage(command); return TRUE; diff --git a/src/command/commands.h b/src/command/commands.h index 14683115..4da3f762 100644 --- a/src/command/commands.h +++ b/src/command/commands.h @@ -153,6 +153,7 @@ gboolean cmd_script(ProfWin *window, const char *const command, gchar **args); gboolean cmd_export(ProfWin *window, const char *const command, gchar **args); gboolean cmd_charset(ProfWin *window, const char *const command, gchar **args); gboolean cmd_console(ProfWin *window, const char *const command, gchar **args); +gboolean cmd_plugins(ProfWin *window, const char *const command, gchar **args); gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args); |