Fix i9e completion.
authorAndre Noll <maan@tuebingen.mpg.de>
Sat, 22 Dec 2018 21:28:37 +0000 (22:28 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 10 Feb 2019 18:50:17 +0000 (19:50 +0100)
i9e_print_completions() does not work as intended when the cursor is
positioned right after a word. This patch should fix it.

interactive.c

index 190cdf295130a2d711074e7c5f5927174b312076..a8197308e8323c8fe78546117cc2e9479df0fbfd 100644 (file)
@@ -762,17 +762,25 @@ int i9e_print_completions(struct i9e_completer *completers)
        ci.argc = create_argv(ci.buffer, " ", &ci.argv);
        ci.word_num = compute_word_num(ci.buffer, " ", ci.point);
 
+       /* determine the current word to complete */
        end = ci.buffer + ci.point;
+
+       if (*end == ' ') {
+               if (ci.point == 0 || ci.buffer[ci.point - 1] == ' ') {
+                       ci.word = para_strdup(NULL);
+                       goto create_matches;
+               } else /* The cursor is positioned right after a word */
+                       end--;
+       }
        for (p = end; p > ci.buffer && *p != ' '; p--)
                ; /* nothing */
        if (*p == ' ')
                p++;
-
        n = end - p + 1;
        ci.word = para_malloc(n + 1);
        strncpy(ci.word, p, n);
        ci.word[n] = '\0';
-
+create_matches:
        PARA_DEBUG_LOG("line: %s, point: %d (%c), wordnum: %d, word: %s\n",
                ci.buffer, ci.point, ci.buffer[ci.point], ci.word_num, ci.word);
        if (ci.word_num == 0)