about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2022-04-01 12:52:54 +0200
committerGitHub <noreply@github.com>2022-04-01 12:52:54 +0200
commitba3d5e8de926a6a35177e71ed190e5db356cc666 (patch)
treeb1ef2d016c6fc2192f2a2de76de461c973732844
parent129886454c34b4d60531a0ebc3c74286d0961f6a (diff)
parent3b40da854d51e136b4a6ddc82942ab2043e2594b (diff)
downloadprofani-tty-ba3d5e8de926a6a35177e71ed190e5db356cc666.tar.gz
Merge pull request #1664 from paulfertser/tab-completion-cleanup
Tab completion code simplification
-rw-r--r--src/ui/inputwin.c52
1 files changed, 11 insertions, 41 deletions
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index e23c865c..4a6cae27 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -596,7 +596,7 @@ _inp_rl_win_close_handler(int count, int key)
 }
 
 static int
-_inp_rl_tab_handler(int count, int key)
+_inp_rl_tab_com_handler(int count, int key, gboolean previous)
 {
     if (rl_point != rl_end || !rl_line_buffer) {
         return 0;
@@ -604,7 +604,7 @@ _inp_rl_tab_handler(int count, int key)
 
     if (strncmp(rl_line_buffer, "/", 1) == 0) {
         ProfWin* window = wins_get_current();
-        char* result = cmd_ac_complete(window, rl_line_buffer, FALSE);
+        char* result = cmd_ac_complete(window, rl_line_buffer, previous);
         if (result) {
             rl_replace_line(result, 1);
             rl_point = rl_end;
@@ -615,7 +615,7 @@ _inp_rl_tab_handler(int count, int key)
 
     if (strncmp(rl_line_buffer, ">", 1) == 0) {
         ProfWin* window = wins_get_current();
-        char* result = win_quote_autocomplete(window, rl_line_buffer, FALSE);
+        char* result = win_quote_autocomplete(window, rl_line_buffer, previous);
         if (result) {
             rl_replace_line(result, 1);
             rl_point = rl_end;
@@ -626,7 +626,7 @@ _inp_rl_tab_handler(int count, int key)
 
     ProfWin* current = wins_get_current();
     if (current->type == WIN_MUC) {
-        char* result = muc_autocomplete(current, rl_line_buffer, FALSE);
+        char* result = muc_autocomplete(current, rl_line_buffer, previous);
         if (result) {
             rl_replace_line(result, 1);
             rl_point = rl_end;
@@ -638,45 +638,15 @@ _inp_rl_tab_handler(int count, int key)
 }
 
 static int
-_inp_rl_shift_tab_handler(int count, int key)
+_inp_rl_tab_handler(int count, int key)
 {
-    if (rl_point != rl_end || !rl_line_buffer) {
-        return 0;
-    }
-
-    if (strncmp(rl_line_buffer, "/", 1) == 0) {
-        ProfWin* window = wins_get_current();
-        char* result = cmd_ac_complete(window, rl_line_buffer, TRUE);
-        if (result) {
-            rl_replace_line(result, 1);
-            rl_point = rl_end;
-            free(result);
-            return 0;
-        }
-    }
-
-    if (strncmp(rl_line_buffer, ">", 1) == 0) {
-        ProfWin* window = wins_get_current();
-        char* result = win_quote_autocomplete(window, rl_line_buffer, TRUE);
-        if (result) {
-            rl_replace_line(result, 1);
-            rl_point = rl_end;
-            free(result);
-            return 0;
-        }
-    }
-
-    ProfWin* current = wins_get_current();
-    if (current->type == WIN_MUC) {
-        char* result = muc_autocomplete(current, rl_line_buffer, TRUE);
-        if (result) {
-            rl_replace_line(result, 1);
-            rl_point = rl_end;
-            free(result);
-        }
-    }
+    return _inp_rl_tab_com_handler(count, key, FALSE);
+}
 
-    return 0;
+static int
+_inp_rl_shift_tab_handler(int count, int key)
+{
+    return _inp_rl_tab_com_handler(count, key, TRUE);
 }
 
 static void