From 573bc855a68766f38de2acb48bebc9d0adbf0a1f Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 18 Feb 2022 23:39:46 -0500 Subject: [PATCH] Simplify cursor positioning in input Do some extra work by adding the portion before the cursor to the input window twice, but simplify the interaction with the split point. This fixes the awkward behaviour when moving the cursor across colour codes where the code would be partially interpreted up to the cursor. --- ui.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ui.c b/ui.c index 369ed75..3df0cd6 100644 --- a/ui.c +++ b/ui.c @@ -791,6 +791,7 @@ static void inputUpdate(void) { skip = buf; } + int y, x; wmove(input, 0, 0); if (window->time && window->id != Network) { whline(input, ' ', uiTime.width); @@ -800,25 +801,24 @@ static void inputUpdate(void) { waddstr(input, prefix); waddstr(input, prompt); waddstr(input, suffix); - - int y, x; - const char *ptr = skip; - struct Style style = styleInput; - if (split && split < pos) { - ptr = inputStop(styleInput, &style, ptr, &buf[split]); - style = styleInput; - style.bg = Red; - } - ptr = inputStop(styleInput, &style, ptr, &buf[pos]); getyx(input, y, x); - if (split && split >= pos) { + + int posx; + struct Style style = styleInput; + inputStop(styleInput, &style, skip, &buf[pos]); + getyx(input, y, posx); + wmove(input, y, x); + + style = styleInput; + const char *ptr = skip; + if (split) { ptr = inputStop(styleInput, &style, ptr, &buf[split]); style = styleInput; style.bg = Red; } inputAdd(styleInput, &style, ptr); wclrtoeol(input); - wmove(input, y, x); + wmove(input, y, posx); } void uiWindows(void) {