1
0
Fork 0

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

View File

@ -32,6 +32,7 @@ core_sources = \
src/ui/xmlwin.c \
src/command/command.h src/command/command.c \
src/command/commands.h src/command/commands.c \
src/command/cmd_autocomplete.h src/command/cmd_autocomplete.c \
src/tools/parser.c \
src/tools/parser.h \
src/tools/http_upload.c \
@ -69,6 +70,7 @@ unittest_sources = \
src/pgp/gpg.h \
src/command/command.h src/command/command.c \
src/command/commands.h src/command/commands.c \
src/command/cmd_autocomplete.h src/command/cmd_autocomplete.c \
src/tools/parser.c \
src/tools/parser.h \
src/tools/p_sha1.h src/tools/p_sha1.c \

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);
}

View File

@ -36,6 +36,7 @@
#include <stdlib.h>
#include "command/command.h"
#include "command/cmd_autocomplete.h"
#include "plugins/callbacks.h"
#include "plugins/plugins.h"
#include "tools/autocomplete.h"
@ -72,9 +73,8 @@ void
callbacks_add_command(PluginCommand *command)
{
p_commands = g_slist_append(p_commands, command);
cmd_autocomplete_add(command->command_name);
cmd_help_autocomplete_add(&command->command_name[1]);
cmd_ac_add(command->command_name);
cmd_ac_add_help(&command->command_name[1]);
}
void

View File

@ -56,6 +56,7 @@
#include "chat_session.h"
#include "command/command.h"
#include "command/cmd_autocomplete.h"
#include "common.h"
#include "config/preferences.h"
#include "config/theme.h"
@ -651,12 +652,12 @@ ui_focus_win(ProfWin *window)
ProfWin *old_current = wins_get_current();
if (old_current->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*)old_current;
cmd_autocomplete_remove_form_fields(confwin->form);
cmd_ac_remove_form_fields(confwin->form);
}
if (window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
cmd_autocomplete_add_form_fields(confwin->form);
cmd_ac_add_form_fields(confwin->form);
}
int i = wins_get_num(window);
@ -679,7 +680,7 @@ ui_close_win(int index)
if (window && window->type == WIN_MUC_CONFIG) {
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
if (confwin->form) {
cmd_autocomplete_remove_form_fields(confwin->form);
cmd_ac_remove_form_fields(confwin->form);
}
}

View File

@ -53,7 +53,7 @@
#include <ncurses.h>
#endif
#include "command/command.h"
#include "command/cmd_autocomplete.h"
#include "common.h"
#include "config/accounts.h"
#include "config/preferences.h"
@ -452,7 +452,7 @@ _inp_rl_getc(FILE *stream)
int ch = rl_getc(stream);
if (_inp_printable(ch)) {
ProfWin *window = wins_get_current();
cmd_reset_autocomplete(window);
cmd_ac_reset(window);
}
return ch;
}
@ -482,7 +482,7 @@ _inp_rl_tab_handler(int count, int key)
}
} else if (strncmp(rl_line_buffer, "/", 1) == 0) {
ProfWin *window = wins_get_current();
char *result = cmd_autocomplete(window, rl_line_buffer);
char *result = cmd_ac_complete(window, rl_line_buffer);
if (result) {
rl_replace_line(result, 1);
rl_point = rl_end;

View File

@ -15,6 +15,7 @@
#include "command/command.h"
#include "command/commands.h"
#include "command/cmd_autocomplete.h"
#define CMD_ALIAS "/alias"
@ -77,7 +78,7 @@ void cmd_alias_add_shows_message_when_exists(void **state)
cmd_init();
prefs_add_alias("hc", "/help commands");
cmd_autocomplete_add("/hc");
cmd_ac_add("/hc");
expect_cons_show("Command or alias '/hc' already exists.");