mirror of
https://github.com/profanity-im/profanity.git
synced 2024-09-01 19:24:15 -04:00
Add cmd_autocomplete.c
This commit is contained in:
parent
458f9edbb0
commit
eaf2901b01
@ -32,6 +32,7 @@ core_sources = \
|
|||||||
src/ui/xmlwin.c \
|
src/ui/xmlwin.c \
|
||||||
src/command/command.h src/command/command.c \
|
src/command/command.h src/command/command.c \
|
||||||
src/command/commands.h src/command/commands.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.c \
|
||||||
src/tools/parser.h \
|
src/tools/parser.h \
|
||||||
src/tools/http_upload.c \
|
src/tools/http_upload.c \
|
||||||
@ -69,6 +70,7 @@ unittest_sources = \
|
|||||||
src/pgp/gpg.h \
|
src/pgp/gpg.h \
|
||||||
src/command/command.h src/command/command.c \
|
src/command/command.h src/command/command.c \
|
||||||
src/command/commands.h src/command/commands.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.c \
|
||||||
src/tools/parser.h \
|
src/tools/parser.h \
|
||||||
src/tools/p_sha1.h src/tools/p_sha1.c \
|
src/tools/p_sha1.h src/tools/p_sha1.c \
|
||||||
|
2917
src/command/cmd_autocomplete.c
Normal file
2917
src/command/cmd_autocomplete.c
Normal file
File diff suppressed because it is too large
Load Diff
57
src/command/cmd_autocomplete.h
Normal file
57
src/command/cmd_autocomplete.h
Normal 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
@ -44,24 +44,12 @@ GHashTable *commands;
|
|||||||
void cmd_init(void);
|
void cmd_init(void);
|
||||||
void cmd_uninit(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_valid_tag(const char *const str);
|
||||||
gboolean cmd_has_tag(Command *pcmd, const char *const tag);
|
gboolean cmd_has_tag(Command *pcmd, const char *const tag);
|
||||||
|
|
||||||
gboolean cmd_process_input(ProfWin *window, char *inp);
|
gboolean cmd_process_input(ProfWin *window, char *inp);
|
||||||
void cmd_execute_connect(ProfWin *window, const char *const account);
|
void cmd_execute_connect(ProfWin *window, const char *const account);
|
||||||
|
|
||||||
gboolean cmd_exists(char *cmd);
|
|
||||||
|
|
||||||
GSList* cmd_get_basic_help(void);
|
GSList* cmd_get_basic_help(void);
|
||||||
GSList* cmd_get_settings_help(void);
|
GSList* cmd_get_settings_help(void);
|
||||||
GSList* cmd_get_presence_help(void);
|
GSList* cmd_get_presence_help(void);
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
#include "chat_session.h"
|
#include "chat_session.h"
|
||||||
#include "command/commands.h"
|
#include "command/commands.h"
|
||||||
#include "command/command.h"
|
#include "command/command.h"
|
||||||
|
#include "command/cmd_autocomplete.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config/accounts.h"
|
#include "config/accounts.h"
|
||||||
#include "config/account.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 ((g_strcmp0(args[0], "submit") == 0) || (g_strcmp0(args[0], "cancel") == 0)) {
|
||||||
if (confwin->form) {
|
if (confwin->form) {
|
||||||
cmd_autocomplete_remove_form_fields(confwin->form);
|
cmd_ac_remove_form_fields(confwin->form);
|
||||||
}
|
}
|
||||||
|
|
||||||
int num = wins_get_num(window);
|
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);
|
cons_bad_cmd_usage(command);
|
||||||
g_string_free(ac_value, TRUE);
|
g_string_free(ac_value, TRUE);
|
||||||
return 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);
|
cons_show("Command or alias '%s' already exists.", ac_value->str);
|
||||||
g_string_free(ac_value, TRUE);
|
g_string_free(ac_value, TRUE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else {
|
} else {
|
||||||
prefs_add_alias(alias_p, value);
|
prefs_add_alias(alias_p, value);
|
||||||
cmd_autocomplete_add(ac_value->str);
|
cmd_ac_add(ac_value->str);
|
||||||
cmd_alias_add(alias_p);
|
cmd_ac_add_alias_value(alias_p);
|
||||||
cons_show("Command alias added %s -> %s", ac_value->str, value);
|
cons_show("Command alias added %s -> %s", ac_value->str, value);
|
||||||
g_string_free(ac_value, TRUE);
|
g_string_free(ac_value, TRUE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -4655,8 +4656,8 @@ cmd_alias(ProfWin *window, const char *const command, gchar **args)
|
|||||||
} else {
|
} else {
|
||||||
GString *ac_value = g_string_new("/");
|
GString *ac_value = g_string_new("/");
|
||||||
g_string_append(ac_value, alias);
|
g_string_append(ac_value, alias);
|
||||||
cmd_autocomplete_remove(ac_value->str);
|
cmd_ac_remove(ac_value->str);
|
||||||
cmd_alias_remove(alias);
|
cmd_ac_remove_alias_value(alias);
|
||||||
g_string_free(ac_value, TRUE);
|
g_string_free(ac_value, TRUE);
|
||||||
cons_show("Command alias removed -> /%s", alias);
|
cons_show("Command alias removed -> /%s", alias);
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "command/command.h"
|
#include "command/command.h"
|
||||||
|
#include "command/cmd_autocomplete.h"
|
||||||
#include "plugins/callbacks.h"
|
#include "plugins/callbacks.h"
|
||||||
#include "plugins/plugins.h"
|
#include "plugins/plugins.h"
|
||||||
#include "tools/autocomplete.h"
|
#include "tools/autocomplete.h"
|
||||||
@ -72,9 +73,8 @@ void
|
|||||||
callbacks_add_command(PluginCommand *command)
|
callbacks_add_command(PluginCommand *command)
|
||||||
{
|
{
|
||||||
p_commands = g_slist_append(p_commands, command);
|
p_commands = g_slist_append(p_commands, command);
|
||||||
cmd_autocomplete_add(command->command_name);
|
cmd_ac_add(command->command_name);
|
||||||
cmd_help_autocomplete_add(&command->command_name[1]);
|
cmd_ac_add_help(&command->command_name[1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
|
|
||||||
#include "chat_session.h"
|
#include "chat_session.h"
|
||||||
#include "command/command.h"
|
#include "command/command.h"
|
||||||
|
#include "command/cmd_autocomplete.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config/preferences.h"
|
#include "config/preferences.h"
|
||||||
#include "config/theme.h"
|
#include "config/theme.h"
|
||||||
@ -651,12 +652,12 @@ ui_focus_win(ProfWin *window)
|
|||||||
ProfWin *old_current = wins_get_current();
|
ProfWin *old_current = wins_get_current();
|
||||||
if (old_current->type == WIN_MUC_CONFIG) {
|
if (old_current->type == WIN_MUC_CONFIG) {
|
||||||
ProfMucConfWin *confwin = (ProfMucConfWin*)old_current;
|
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) {
|
if (window->type == WIN_MUC_CONFIG) {
|
||||||
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
|
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
|
||||||
cmd_autocomplete_add_form_fields(confwin->form);
|
cmd_ac_add_form_fields(confwin->form);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = wins_get_num(window);
|
int i = wins_get_num(window);
|
||||||
@ -679,7 +680,7 @@ ui_close_win(int index)
|
|||||||
if (window && window->type == WIN_MUC_CONFIG) {
|
if (window && window->type == WIN_MUC_CONFIG) {
|
||||||
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
|
ProfMucConfWin *confwin = (ProfMucConfWin*)window;
|
||||||
if (confwin->form) {
|
if (confwin->form) {
|
||||||
cmd_autocomplete_remove_form_fields(confwin->form);
|
cmd_ac_remove_form_fields(confwin->form);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "command/command.h"
|
#include "command/cmd_autocomplete.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config/accounts.h"
|
#include "config/accounts.h"
|
||||||
#include "config/preferences.h"
|
#include "config/preferences.h"
|
||||||
@ -452,7 +452,7 @@ _inp_rl_getc(FILE *stream)
|
|||||||
int ch = rl_getc(stream);
|
int ch = rl_getc(stream);
|
||||||
if (_inp_printable(ch)) {
|
if (_inp_printable(ch)) {
|
||||||
ProfWin *window = wins_get_current();
|
ProfWin *window = wins_get_current();
|
||||||
cmd_reset_autocomplete(window);
|
cmd_ac_reset(window);
|
||||||
}
|
}
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
@ -482,7 +482,7 @@ _inp_rl_tab_handler(int count, int key)
|
|||||||
}
|
}
|
||||||
} else if (strncmp(rl_line_buffer, "/", 1) == 0) {
|
} else if (strncmp(rl_line_buffer, "/", 1) == 0) {
|
||||||
ProfWin *window = wins_get_current();
|
ProfWin *window = wins_get_current();
|
||||||
char *result = cmd_autocomplete(window, rl_line_buffer);
|
char *result = cmd_ac_complete(window, rl_line_buffer);
|
||||||
if (result) {
|
if (result) {
|
||||||
rl_replace_line(result, 1);
|
rl_replace_line(result, 1);
|
||||||
rl_point = rl_end;
|
rl_point = rl_end;
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "command/command.h"
|
#include "command/command.h"
|
||||||
#include "command/commands.h"
|
#include "command/commands.h"
|
||||||
|
#include "command/cmd_autocomplete.h"
|
||||||
|
|
||||||
#define CMD_ALIAS "/alias"
|
#define CMD_ALIAS "/alias"
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ void cmd_alias_add_shows_message_when_exists(void **state)
|
|||||||
|
|
||||||
cmd_init();
|
cmd_init();
|
||||||
prefs_add_alias("hc", "/help commands");
|
prefs_add_alias("hc", "/help commands");
|
||||||
cmd_autocomplete_add("/hc");
|
cmd_ac_add("/hc");
|
||||||
|
|
||||||
expect_cons_show("Command or alias '/hc' already exists.");
|
expect_cons_show("Command or alias '/hc' already exists.");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user