diff options
Diffstat (limited to 'src/input_win.c')
-rw-r--r-- | src/input_win.c | 167 |
1 files changed, 17 insertions, 150 deletions
diff --git a/src/input_win.c b/src/input_win.c index 724b3a25..1c12e8a1 100644 --- a/src/input_win.c +++ b/src/input_win.c @@ -58,17 +58,11 @@ #include "preferences.h" #include "ui.h" -typedef char*(*autocomplete_func)(char *); - static WINDOW *inp_win; static int pad_start = 0; static int _handle_edit(const int ch, char *input, int *size); 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 create_input_window(void) @@ -171,12 +165,7 @@ inp_get_char(int *ch, char *input, int *size) } } - contact_list_reset_search_attempts(); - prefs_reset_login_search(); - prefs_reset_boolean_choice(); - cmd_help_reset_completer(); - cmd_notify_reset_completer(); - cmd_reset_completer(); + cmd_reset_autocomplete(); } } @@ -206,6 +195,19 @@ inp_put_back(void) 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 * 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; char *prev = NULL; char *next = NULL; - char *found = NULL; - char *auto_msg = NULL; int inp_y = 0; int inp_x = 0; - char inp_cpy[*size]; getmaxyx(stdscr, rows, cols); getyx(inp_win, inp_y, inp_x); @@ -307,7 +306,7 @@ _handle_edit(const int ch, char *input, int *size) case KEY_UP: prev = history_previous(input, size); if (prev) { - _replace_input(input, prev, size); + inp_replace_input(input, prev, size); pad_start = 0; 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: next = history_next(input, size); if (next) { - _replace_input(input, next, size); + inp_replace_input(input, next, size); pad_start = 0; 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; case 9: // tab - - // 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); - + cmd_autocomplete(input, size); return 1; default: @@ -396,96 +356,3 @@ _printable(const int ch) 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); - } - } -} |