Add cmd_autocomplete.c

This commit is contained in:
James Booth
2016-05-20 00:19:03 +01:00
parent 458f9edbb0
commit eaf2901b01
10 changed files with 3010 additions and 2877 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
/*
* cmd_autocomplete.h
*
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
*
* This file is part of Profanity.
*
* Profanity is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Profanity is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give permission to
* link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file, and
* distribute linked combinations including the two.
*
* You must obey the GNU General Public License in all respects for all of the
* code used other than OpenSSL. If you modify file(s) with this exception, you
* may extend this exception to your version of the file(s), but you are not
* obligated to do so. If you do not wish to do so, delete this exception
* statement from your version. If you delete this exception statement from all
* source files in the program, then also delete it here.
*
*/
#include "config/preferences.h"
#include "command/commands.h"
void cmd_ac_init(void);
void cmd_ac_uninit(void);
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_alias_value(char *value);
gboolean cmd_ac_exists(char *cmd);
void cmd_ac_add_form_fields(DataForm *form);
void cmd_ac_remove_form_fields(DataForm *form);
char* cmd_ac_complete(ProfWin *window, const char *const input);
void cmd_ac_reset(ProfWin *window);

File diff suppressed because it is too large Load Diff

View File

@@ -44,24 +44,12 @@ GHashTable *commands;
void cmd_init(void);
void cmd_uninit(void);
char* cmd_autocomplete(ProfWin *window, const char *const input);
void cmd_reset_autocomplete(ProfWin *window);
void cmd_help_autocomplete_add(const char *const 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);
void cmd_alias_remove(char *value);
gboolean cmd_valid_tag(const char *const str);
gboolean cmd_has_tag(Command *pcmd, const char *const tag);
gboolean cmd_process_input(ProfWin *window, char *inp);
void cmd_execute_connect(ProfWin *window, const char *const account);
gboolean cmd_exists(char *cmd);
GSList* cmd_get_basic_help(void);
GSList* cmd_get_settings_help(void);
GSList* cmd_get_presence_help(void);

View File

@@ -52,6 +52,7 @@
#include "chat_session.h"
#include "command/commands.h"
#include "command/command.h"
#include "command/cmd_autocomplete.h"
#include "common.h"
#include "config/accounts.h"
#include "config/account.h"
@@ -3882,7 +3883,7 @@ cmd_form(ProfWin *window, const char *const command, gchar **args)
if ((g_strcmp0(args[0], "submit") == 0) || (g_strcmp0(args[0], "cancel") == 0)) {
if (confwin->form) {
cmd_autocomplete_remove_form_fields(confwin->form);
cmd_ac_remove_form_fields(confwin->form);
}
int num = wins_get_num(window);
@@ -4627,14 +4628,14 @@ cmd_alias(ProfWin *window, const char *const command, gchar **args)
cons_bad_cmd_usage(command);
g_string_free(ac_value, TRUE);
return TRUE;
} else if (cmd_exists(ac_value->str)) {
} else if (cmd_ac_exists(ac_value->str)) {
cons_show("Command or alias '%s' already exists.", ac_value->str);
g_string_free(ac_value, TRUE);
return TRUE;
} else {
prefs_add_alias(alias_p, value);
cmd_autocomplete_add(ac_value->str);
cmd_alias_add(alias_p);
cmd_ac_add(ac_value->str);
cmd_ac_add_alias_value(alias_p);
cons_show("Command alias added %s -> %s", ac_value->str, value);
g_string_free(ac_value, TRUE);
return TRUE;
@@ -4655,8 +4656,8 @@ cmd_alias(ProfWin *window, const char *const command, gchar **args)
} else {
GString *ac_value = g_string_new("/");
g_string_append(ac_value, alias);
cmd_autocomplete_remove(ac_value->str);
cmd_alias_remove(alias);
cmd_ac_remove(ac_value->str);
cmd_ac_remove_alias_value(alias);
g_string_free(ac_value, TRUE);
cons_show("Command alias removed -> /%s", alias);
}