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.
master
June McEnroe 2022-02-18 23:39:46 -05:00
parent 0036e6e9f0
commit 573bc855a6
1 changed files with 12 additions and 12 deletions

24
ui.c
View File

@ -791,6 +791,7 @@ static void inputUpdate(void) {
skip = buf; skip = buf;
} }
int y, x;
wmove(input, 0, 0); wmove(input, 0, 0);
if (window->time && window->id != Network) { if (window->time && window->id != Network) {
whline(input, ' ', uiTime.width); whline(input, ' ', uiTime.width);
@ -800,25 +801,24 @@ static void inputUpdate(void) {
waddstr(input, prefix); waddstr(input, prefix);
waddstr(input, prompt); waddstr(input, prompt);
waddstr(input, suffix); 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); 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]); ptr = inputStop(styleInput, &style, ptr, &buf[split]);
style = styleInput; style = styleInput;
style.bg = Red; style.bg = Red;
} }
inputAdd(styleInput, &style, ptr); inputAdd(styleInput, &style, ptr);
wclrtoeol(input); wclrtoeol(input);
wmove(input, y, x); wmove(input, y, posx);
} }
void uiWindows(void) { void uiWindows(void) {