I still don't understand what this conditonal is for:
1197 if (!sub)
1198 while (isu8cont((unsigned char)es->cbuf[--ncursor]))
1199 continue;
I realized that what I did in my diff works with any false condition,
and it also works just changing the "continue;" above with a "break;".
I fact removing the conditional and just resting one to ncursor also
makes the job:
Index: vi.c
===================================================================
RCS file: /cvs/src/bin/ksh/vi.c,v
diff -u -p -r1.60 vi.c
--- vi.c 12 Mar 2021 02:10:25 -0000 1.60
+++ vi.c 5 Apr 2025 07:55:33 -0000
@@ -1194,9 +1194,7 @@ domove(int argcnt, const char *cmd, int
if (!sub && es->cursor + 1 >= es->linelen)
return -1;
ncursor = (*cmd == 'e' ? endword : Endword)(argcnt);
- if (!sub)
- while (isu8cont((unsigned char)es->cbuf[--ncursor]))
- continue;
+ --ncursor;
break;
case 'f':
--
Walter