about summary refs log tree commit diff stats
path: root/src/input_win.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_win.c')
-rw-r--r--src/input_win.c167
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);
-        }
-    }
-}