From 1746ed51956550beb3ea311d99d657221b3a8f1d Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sat, 22 Dec 2018 22:28:37 +0100 Subject: [PATCH] Fix i9e completion. i9e_print_completions() does not work as intended when the cursor is positioned right after a word. This patch should fix it. --- interactive.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/interactive.c b/interactive.c index 190cdf29..a8197308 100644 --- a/interactive.c +++ b/interactive.c @@ -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) -- 2.39.2