mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge branch 'master' into chatstates
This commit is contained in:
commit
90606141a9
246
src/command.c
246
src/command.c
@ -38,11 +38,14 @@
|
|||||||
#include "tinyurl.h"
|
#include "tinyurl.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
|
||||||
|
typedef char*(*autocomplete_func)(char *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Command structure
|
* Command structure
|
||||||
*
|
*
|
||||||
* cmd - The command string including leading '/'
|
* cmd - The command string including leading '/'
|
||||||
* func - The function to execute for the command
|
* func - The function to execute for the command
|
||||||
|
* complete_func - Function to autcomplete parameters
|
||||||
* help - A help struct containing usage info etc
|
* help - A help struct containing usage info etc
|
||||||
*/
|
*/
|
||||||
struct cmd_t {
|
struct cmd_t {
|
||||||
@ -58,6 +61,19 @@ static gboolean _cmd_set_boolean_preference(const char * const inp,
|
|||||||
struct cmd_help_t help, const char * const cmd_str, const char * const display,
|
struct cmd_help_t help, const char * const cmd_str, const char * const display,
|
||||||
void (*set_func)(gboolean));
|
void (*set_func)(gboolean));
|
||||||
|
|
||||||
|
static char *_cmd_complete(char *inp);
|
||||||
|
static void _cmd_reset_command_completer(void);
|
||||||
|
static char *_cmd_who_complete(char *inp);
|
||||||
|
static void _cmd_reset_who_completer(void);
|
||||||
|
static char *_cmd_help_complete(char *inp);
|
||||||
|
static void _cmd_help_reset_completer(void);
|
||||||
|
static char *_cmd_notify_complete(char *inp);
|
||||||
|
static void _cmd_notify_reset_completer(void);
|
||||||
|
static void _cmd_complete_parameters(char *input, int *size);
|
||||||
|
static void _notify_autocomplete(char *input, int *size);
|
||||||
|
static void _parameter_autocomplete(char *input, int *size, char *command,
|
||||||
|
autocomplete_func func);
|
||||||
|
|
||||||
// command prototypes
|
// command prototypes
|
||||||
static gboolean _cmd_quit(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_quit(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_help(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_help(const char * const inp, struct cmd_help_t help);
|
||||||
@ -380,6 +396,7 @@ static struct cmd_t status_commands[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static PAutocomplete commands_ac;
|
static PAutocomplete commands_ac;
|
||||||
|
static PAutocomplete who_ac;
|
||||||
static PAutocomplete help_ac;
|
static PAutocomplete help_ac;
|
||||||
static PAutocomplete notify_ac;
|
static PAutocomplete notify_ac;
|
||||||
|
|
||||||
@ -390,12 +407,16 @@ void
|
|||||||
cmd_init(void)
|
cmd_init(void)
|
||||||
{
|
{
|
||||||
log_info("Initialising commands");
|
log_info("Initialising commands");
|
||||||
|
|
||||||
commands_ac = p_autocomplete_new();
|
commands_ac = p_autocomplete_new();
|
||||||
|
who_ac = p_autocomplete_new();
|
||||||
|
|
||||||
help_ac = p_autocomplete_new();
|
help_ac = p_autocomplete_new();
|
||||||
p_autocomplete_add(help_ac, strdup("basic"));
|
p_autocomplete_add(help_ac, strdup("basic"));
|
||||||
p_autocomplete_add(help_ac, strdup("status"));
|
p_autocomplete_add(help_ac, strdup("status"));
|
||||||
p_autocomplete_add(help_ac, strdup("settings"));
|
p_autocomplete_add(help_ac, strdup("settings"));
|
||||||
p_autocomplete_add(help_ac, strdup("navigation"));
|
p_autocomplete_add(help_ac, strdup("navigation"));
|
||||||
|
|
||||||
notify_ac = p_autocomplete_new();
|
notify_ac = p_autocomplete_new();
|
||||||
p_autocomplete_add(notify_ac, strdup("message"));
|
p_autocomplete_add(notify_ac, strdup("message"));
|
||||||
p_autocomplete_add(notify_ac, strdup("typing"));
|
p_autocomplete_add(notify_ac, strdup("typing"));
|
||||||
@ -418,6 +439,7 @@ cmd_init(void)
|
|||||||
struct cmd_t *pcmd = status_commands+i;
|
struct cmd_t *pcmd = status_commands+i;
|
||||||
p_autocomplete_add(commands_ac, (gchar *)strdup(pcmd->cmd));
|
p_autocomplete_add(commands_ac, (gchar *)strdup(pcmd->cmd));
|
||||||
p_autocomplete_add(help_ac, (gchar *)strdup(pcmd->cmd+1));
|
p_autocomplete_add(help_ac, (gchar *)strdup(pcmd->cmd+1));
|
||||||
|
p_autocomplete_add(who_ac, (gchar *)strdup(pcmd->cmd+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
history_init();
|
history_init();
|
||||||
@ -427,48 +449,48 @@ void
|
|||||||
cmd_close(void)
|
cmd_close(void)
|
||||||
{
|
{
|
||||||
p_autocomplete_clear(commands_ac);
|
p_autocomplete_clear(commands_ac);
|
||||||
|
p_autocomplete_clear(who_ac);
|
||||||
p_autocomplete_clear(help_ac);
|
p_autocomplete_clear(help_ac);
|
||||||
p_autocomplete_clear(notify_ac);
|
p_autocomplete_clear(notify_ac);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Command autocompletion functions
|
// Command autocompletion functions
|
||||||
|
void
|
||||||
char *
|
cmd_autocomplete(char *input, int *size)
|
||||||
cmd_complete(char *inp)
|
|
||||||
{
|
{
|
||||||
return p_autocomplete_complete(commands_ac, inp);
|
int i = 0;
|
||||||
|
char *found = NULL;
|
||||||
|
char *auto_msg = NULL;
|
||||||
|
char inp_cpy[*size];
|
||||||
|
|
||||||
|
if ((strncmp(input, "/", 1) == 0) && (!str_contains(input, *size, ' '))) {
|
||||||
|
for(i = 0; i < *size; i++) {
|
||||||
|
inp_cpy[i] = input[i];
|
||||||
|
}
|
||||||
|
inp_cpy[i] = '\0';
|
||||||
|
found = _cmd_complete(inp_cpy);
|
||||||
|
if (found != NULL) {
|
||||||
|
auto_msg = (char *) malloc((strlen(found) + 1) * sizeof(char));
|
||||||
|
strcpy(auto_msg, found);
|
||||||
|
inp_replace_input(input, auto_msg, size);
|
||||||
|
free(auto_msg);
|
||||||
|
free(found);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_cmd_complete_parameters(input, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_reset_completer(void)
|
cmd_reset_autocomplete()
|
||||||
{
|
{
|
||||||
p_autocomplete_reset(commands_ac);
|
contact_list_reset_search_attempts();
|
||||||
}
|
prefs_reset_login_search();
|
||||||
|
prefs_reset_boolean_choice();
|
||||||
// Command help autocomplete
|
_cmd_help_reset_completer();
|
||||||
char *
|
_cmd_notify_reset_completer();
|
||||||
cmd_help_complete(char *inp)
|
_cmd_reset_command_completer();
|
||||||
{
|
_cmd_reset_who_completer();
|
||||||
return p_autocomplete_complete(help_ac, inp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cmd_help_reset_completer(void)
|
|
||||||
{
|
|
||||||
p_autocomplete_reset(help_ac);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Command notify autcomplete
|
|
||||||
char *
|
|
||||||
cmd_notify_complete(char *inp)
|
|
||||||
{
|
|
||||||
return p_autocomplete_complete(notify_ac, inp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cmd_notify_reset_completer(void)
|
|
||||||
{
|
|
||||||
p_autocomplete_reset(notify_ac);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GSList *
|
GSList *
|
||||||
@ -545,6 +567,84 @@ cmd_execute_default(const char * const inp)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_cmd_complete(char *inp)
|
||||||
|
{
|
||||||
|
return p_autocomplete_complete(commands_ac, inp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmd_reset_command_completer(void)
|
||||||
|
{
|
||||||
|
p_autocomplete_reset(commands_ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_cmd_who_complete(char *inp)
|
||||||
|
{
|
||||||
|
return p_autocomplete_complete(who_ac, inp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmd_reset_who_completer(void)
|
||||||
|
{
|
||||||
|
p_autocomplete_reset(who_ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_cmd_help_complete(char *inp)
|
||||||
|
{
|
||||||
|
return p_autocomplete_complete(help_ac, inp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmd_help_reset_completer(void)
|
||||||
|
{
|
||||||
|
p_autocomplete_reset(help_ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_cmd_notify_complete(char *inp)
|
||||||
|
{
|
||||||
|
return p_autocomplete_complete(notify_ac, inp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmd_notify_reset_completer(void)
|
||||||
|
{
|
||||||
|
p_autocomplete_reset(notify_ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmd_complete_parameters(char *input, int *size)
|
||||||
|
{
|
||||||
|
_parameter_autocomplete(input, size, "/beep",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/intype",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/flash",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/showsplash",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/chlog",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/history",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
_parameter_autocomplete(input, size, "/vercheck",
|
||||||
|
prefs_autocomplete_boolean_choice);
|
||||||
|
|
||||||
|
_parameter_autocomplete(input, size, "/msg",
|
||||||
|
contact_list_find_contact);
|
||||||
|
_parameter_autocomplete(input, size, "/connect",
|
||||||
|
prefs_find_login);
|
||||||
|
_parameter_autocomplete(input, size, "/help",
|
||||||
|
_cmd_help_complete);
|
||||||
|
_parameter_autocomplete(input, size, "/who",
|
||||||
|
_cmd_who_complete);
|
||||||
|
|
||||||
|
_notify_autocomplete(input, size);
|
||||||
|
}
|
||||||
|
|
||||||
// The command functions
|
// The command functions
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -1114,3 +1214,85 @@ _cmd_get_command(const char * const command)
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_parameter_autocomplete(char *input, int *size, char *command,
|
||||||
|
autocomplete_func func)
|
||||||
|
{
|
||||||
|
char *found = NULL;
|
||||||
|
char *auto_msg = NULL;
|
||||||
|
char inp_cpy[*size];
|
||||||
|
int i;
|
||||||
|
char *command_cpy = malloc(strlen(command) + 2);
|
||||||
|
sprintf(command_cpy, "%s ", command);
|
||||||
|
int len = strlen(command_cpy);
|
||||||
|
if ((strncmp(input, command_cpy, len) == 0) && (*size > len)) {
|
||||||
|
for(i = len; i < *size; i++) {
|
||||||
|
inp_cpy[i-len] = input[i];
|
||||||
|
}
|
||||||
|
inp_cpy[(*size) - len] = '\0';
|
||||||
|
found = func(inp_cpy);
|
||||||
|
if (found != NULL) {
|
||||||
|
auto_msg = (char *) malloc((len + (strlen(found) + 1)) * sizeof(char));
|
||||||
|
strcpy(auto_msg, command_cpy);
|
||||||
|
strcat(auto_msg, found);
|
||||||
|
inp_replace_input(input, auto_msg, size);
|
||||||
|
free(auto_msg);
|
||||||
|
free(found);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(command_cpy);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_notify_autocomplete(char *input, int *size)
|
||||||
|
{
|
||||||
|
char *found = NULL;
|
||||||
|
char *auto_msg = NULL;
|
||||||
|
char inp_cpy[*size];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ((strncmp(input, "/notify message ", 16) == 0) && (*size > 16)) {
|
||||||
|
for(i = 16; i < *size; i++) {
|
||||||
|
inp_cpy[i-16] = input[i];
|
||||||
|
}
|
||||||
|
inp_cpy[(*size) - 16] = '\0';
|
||||||
|
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
||||||
|
if (found != NULL) {
|
||||||
|
auto_msg = (char *) malloc((16 + (strlen(found) + 1)) * sizeof(char));
|
||||||
|
strcpy(auto_msg, "/notify message ");
|
||||||
|
strcat(auto_msg, found);
|
||||||
|
inp_replace_input(input, auto_msg, size);
|
||||||
|
free(auto_msg);
|
||||||
|
free(found);
|
||||||
|
}
|
||||||
|
} else if ((strncmp(input, "/notify typing ", 15) == 0) && (*size > 15)) {
|
||||||
|
for(i = 15; i < *size; i++) {
|
||||||
|
inp_cpy[i-15] = input[i];
|
||||||
|
}
|
||||||
|
inp_cpy[(*size) - 15] = '\0';
|
||||||
|
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
||||||
|
if (found != NULL) {
|
||||||
|
auto_msg = (char *) malloc((15 + (strlen(found) + 1)) * sizeof(char));
|
||||||
|
strcpy(auto_msg, "/notify typing ");
|
||||||
|
strcat(auto_msg, found);
|
||||||
|
inp_replace_input(input, auto_msg, size);
|
||||||
|
free(auto_msg);
|
||||||
|
free(found);
|
||||||
|
}
|
||||||
|
} else if ((strncmp(input, "/notify ", 8) == 0) && (*size > 8)) {
|
||||||
|
for(i = 8; i < *size; i++) {
|
||||||
|
inp_cpy[i-8] = input[i];
|
||||||
|
}
|
||||||
|
inp_cpy[(*size) - 8] = '\0';
|
||||||
|
found = _cmd_notify_complete(inp_cpy);
|
||||||
|
if (found != NULL) {
|
||||||
|
auto_msg = (char *) malloc((8 + (strlen(found) + 1)) * sizeof(char));
|
||||||
|
strcpy(auto_msg, "/notify ");
|
||||||
|
strcat(auto_msg, found);
|
||||||
|
inp_replace_input(input, auto_msg, size);
|
||||||
|
free(auto_msg);
|
||||||
|
free(found);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -34,16 +34,13 @@ struct cmd_help_t {
|
|||||||
|
|
||||||
void cmd_init(void);
|
void cmd_init(void);
|
||||||
void cmd_close(void);
|
void cmd_close(void);
|
||||||
char * cmd_complete(char *inp);
|
|
||||||
void cmd_reset_completer(void);
|
void cmd_autocomplete(char *input, int *size);
|
||||||
|
void cmd_reset_autocomplete(void);
|
||||||
|
|
||||||
gboolean cmd_execute(const char * const command, const char * const inp);
|
gboolean cmd_execute(const char * const command, const char * const inp);
|
||||||
gboolean cmd_execute_default(const char * const inp);
|
gboolean cmd_execute_default(const char * const inp);
|
||||||
|
|
||||||
// command help
|
|
||||||
char * cmd_help_complete(char *inp);
|
|
||||||
char * cmd_notify_complete(char *inp);
|
|
||||||
void cmd_help_reset_completer(void);
|
|
||||||
void cmd_notify_reset_completer(void);
|
|
||||||
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_status_help(void);
|
GSList * cmd_get_status_help(void);
|
||||||
|
167
src/input_win.c
167
src/input_win.c
@ -58,17 +58,11 @@
|
|||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
|
||||||
typedef char*(*autocomplete_func)(char *);
|
|
||||||
|
|
||||||
static WINDOW *inp_win;
|
static WINDOW *inp_win;
|
||||||
static int pad_start = 0;
|
static int pad_start = 0;
|
||||||
|
|
||||||
static int _handle_edit(const int ch, char *input, int *size);
|
static int _handle_edit(const int ch, char *input, int *size);
|
||||||
static int _printable(const int ch);
|
static int _printable(const int ch);
|
||||||
static void _replace_input(char *input, const char * const new_input, int *size);
|
|
||||||
static void _parameter_autocomplete(char *input, int *size, char *command,
|
|
||||||
autocomplete_func func);
|
|
||||||
static void _notify_autocomplete(char *input, int *size);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
create_input_window(void)
|
create_input_window(void)
|
||||||
@ -171,12 +165,7 @@ inp_get_char(int *ch, char *input, int *size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contact_list_reset_search_attempts();
|
cmd_reset_autocomplete();
|
||||||
prefs_reset_login_search();
|
|
||||||
prefs_reset_boolean_choice();
|
|
||||||
cmd_help_reset_completer();
|
|
||||||
cmd_notify_reset_completer();
|
|
||||||
cmd_reset_completer();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,6 +195,19 @@ inp_put_back(void)
|
|||||||
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
inp_replace_input(char *input, const char * const new_input, int *size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
strcpy(input, new_input);
|
||||||
|
*size = strlen(input);
|
||||||
|
inp_clear();
|
||||||
|
for (i = 0; i < *size; i++)
|
||||||
|
waddch(inp_win, input[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deal with command editing, return 1 if ch was an edit
|
* Deal with command editing, return 1 if ch was an edit
|
||||||
* key press: up, down, left, right or backspace
|
* key press: up, down, left, right or backspace
|
||||||
@ -217,11 +219,8 @@ _handle_edit(const int ch, char *input, int *size)
|
|||||||
int i, rows, cols;
|
int i, rows, cols;
|
||||||
char *prev = NULL;
|
char *prev = NULL;
|
||||||
char *next = NULL;
|
char *next = NULL;
|
||||||
char *found = NULL;
|
|
||||||
char *auto_msg = NULL;
|
|
||||||
int inp_y = 0;
|
int inp_y = 0;
|
||||||
int inp_x = 0;
|
int inp_x = 0;
|
||||||
char inp_cpy[*size];
|
|
||||||
|
|
||||||
getmaxyx(stdscr, rows, cols);
|
getmaxyx(stdscr, rows, cols);
|
||||||
getyx(inp_win, inp_y, inp_x);
|
getyx(inp_win, inp_y, inp_x);
|
||||||
@ -307,7 +306,7 @@ _handle_edit(const int ch, char *input, int *size)
|
|||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
prev = history_previous(input, size);
|
prev = history_previous(input, size);
|
||||||
if (prev) {
|
if (prev) {
|
||||||
_replace_input(input, prev, size);
|
inp_replace_input(input, prev, size);
|
||||||
pad_start = 0;
|
pad_start = 0;
|
||||||
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
||||||
}
|
}
|
||||||
@ -316,7 +315,7 @@ _handle_edit(const int ch, char *input, int *size)
|
|||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
next = history_next(input, size);
|
next = history_next(input, size);
|
||||||
if (next) {
|
if (next) {
|
||||||
_replace_input(input, next, size);
|
inp_replace_input(input, next, size);
|
||||||
pad_start = 0;
|
pad_start = 0;
|
||||||
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
prefresh(inp_win, 0, pad_start, rows-1, 0, rows-1, cols-1);
|
||||||
}
|
}
|
||||||
@ -337,46 +336,7 @@ _handle_edit(const int ch, char *input, int *size)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case 9: // tab
|
case 9: // tab
|
||||||
|
cmd_autocomplete(input, size);
|
||||||
// autocomplete command
|
|
||||||
if ((strncmp(input, "/", 1) == 0) && (!str_contains(input, *size, ' '))) {
|
|
||||||
for(i = 0; i < *size; i++) {
|
|
||||||
inp_cpy[i] = input[i];
|
|
||||||
}
|
|
||||||
inp_cpy[i] = '\0';
|
|
||||||
found = cmd_complete(inp_cpy);
|
|
||||||
if (found != NULL) {
|
|
||||||
auto_msg = (char *) malloc((strlen(found) + 1) * sizeof(char));
|
|
||||||
strcpy(auto_msg, found);
|
|
||||||
_replace_input(input, auto_msg, size);
|
|
||||||
free(auto_msg);
|
|
||||||
free(found);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_parameter_autocomplete(input, size, "/msg",
|
|
||||||
contact_list_find_contact);
|
|
||||||
_parameter_autocomplete(input, size, "/connect",
|
|
||||||
prefs_find_login);
|
|
||||||
_parameter_autocomplete(input, size, "/help",
|
|
||||||
cmd_help_complete);
|
|
||||||
_parameter_autocomplete(input, size, "/beep",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/intype",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/flash",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/showsplash",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/chlog",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/history",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
_parameter_autocomplete(input, size, "/vercheck",
|
|
||||||
prefs_autocomplete_boolean_choice);
|
|
||||||
|
|
||||||
_notify_autocomplete(input, size);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -396,96 +356,3 @@ _printable(const int ch)
|
|||||||
ch != KEY_IC && ch != KEY_EIC && ch != KEY_RESIZE);
|
ch != KEY_IC && ch != KEY_EIC && ch != KEY_RESIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_replace_input(char *input, const char * const new_input, int *size)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
strcpy(input, new_input);
|
|
||||||
*size = strlen(input);
|
|
||||||
inp_clear();
|
|
||||||
for (i = 0; i < *size; i++)
|
|
||||||
waddch(inp_win, input[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_parameter_autocomplete(char *input, int *size, char *command,
|
|
||||||
autocomplete_func func)
|
|
||||||
{
|
|
||||||
char *found = NULL;
|
|
||||||
char *auto_msg = NULL;
|
|
||||||
char inp_cpy[*size];
|
|
||||||
int i;
|
|
||||||
char *command_cpy = malloc(strlen(command) + 2);
|
|
||||||
sprintf(command_cpy, "%s ", command);
|
|
||||||
int len = strlen(command_cpy);
|
|
||||||
if ((strncmp(input, command_cpy, len) == 0) && (*size > len)) {
|
|
||||||
for(i = len; i < *size; i++) {
|
|
||||||
inp_cpy[i-len] = input[i];
|
|
||||||
}
|
|
||||||
inp_cpy[(*size) - len] = '\0';
|
|
||||||
found = func(inp_cpy);
|
|
||||||
if (found != NULL) {
|
|
||||||
auto_msg = (char *) malloc((len + (strlen(found) + 1)) * sizeof(char));
|
|
||||||
strcpy(auto_msg, command_cpy);
|
|
||||||
strcat(auto_msg, found);
|
|
||||||
_replace_input(input, auto_msg, size);
|
|
||||||
free(auto_msg);
|
|
||||||
free(found);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(command_cpy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_notify_autocomplete(char *input, int *size)
|
|
||||||
{
|
|
||||||
char *found = NULL;
|
|
||||||
char *auto_msg = NULL;
|
|
||||||
char inp_cpy[*size];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if ((strncmp(input, "/notify message ", 16) == 0) && (*size > 16)) {
|
|
||||||
for(i = 16; i < *size; i++) {
|
|
||||||
inp_cpy[i-16] = input[i];
|
|
||||||
}
|
|
||||||
inp_cpy[(*size) - 16] = '\0';
|
|
||||||
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
|
||||||
if (found != NULL) {
|
|
||||||
auto_msg = (char *) malloc((16 + (strlen(found) + 1)) * sizeof(char));
|
|
||||||
strcpy(auto_msg, "/notify message ");
|
|
||||||
strcat(auto_msg, found);
|
|
||||||
_replace_input(input, auto_msg, size);
|
|
||||||
free(auto_msg);
|
|
||||||
free(found);
|
|
||||||
}
|
|
||||||
} else if ((strncmp(input, "/notify typing ", 15) == 0) && (*size > 15)) {
|
|
||||||
for(i = 15; i < *size; i++) {
|
|
||||||
inp_cpy[i-15] = input[i];
|
|
||||||
}
|
|
||||||
inp_cpy[(*size) - 15] = '\0';
|
|
||||||
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
|
||||||
if (found != NULL) {
|
|
||||||
auto_msg = (char *) malloc((15 + (strlen(found) + 1)) * sizeof(char));
|
|
||||||
strcpy(auto_msg, "/notify typing ");
|
|
||||||
strcat(auto_msg, found);
|
|
||||||
_replace_input(input, auto_msg, size);
|
|
||||||
free(auto_msg);
|
|
||||||
free(found);
|
|
||||||
}
|
|
||||||
} else if ((strncmp(input, "/notify ", 8) == 0) && (*size > 8)) {
|
|
||||||
for(i = 8; i < *size; i++) {
|
|
||||||
inp_cpy[i-8] = input[i];
|
|
||||||
}
|
|
||||||
inp_cpy[(*size) - 8] = '\0';
|
|
||||||
found = cmd_notify_complete(inp_cpy);
|
|
||||||
if (found != NULL) {
|
|
||||||
auto_msg = (char *) malloc((8 + (strlen(found) + 1)) * sizeof(char));
|
|
||||||
strcpy(auto_msg, "/notify ");
|
|
||||||
strcat(auto_msg, found);
|
|
||||||
_replace_input(input, auto_msg, size);
|
|
||||||
free(auto_msg);
|
|
||||||
free(found);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
1
src/ui.h
1
src/ui.h
@ -136,5 +136,6 @@ void inp_put_back(void);
|
|||||||
void inp_non_block(void);
|
void inp_non_block(void);
|
||||||
void inp_block(void);
|
void inp_block(void);
|
||||||
void inp_get_password(char *passwd);
|
void inp_get_password(char *passwd);
|
||||||
|
void inp_replace_input(char *input, const char * const new_input, int *size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user