Dear OpenBSD developers,

On Aug 2 I reported this bug:

  https://marc.info/?l=openbsd-bugs&m=169100763926909&w=2

After fiddling around I found a solution that works for both vi base and
nvi from ports:

  https://marc.info/?l=openbsd-bugs&m=169269999218514&w=2

Since nobody answered me in bugs@ I sent a message to ports@ and Cc:
Anthony J. Bentley who told me to contact Zhihao Yuan, nvi developer
upstream.  I don't use github, I don't have a github account, luckily
after searching the web I found an email address of Zhihao.  He
understood the issue and answered me with what seems to be a more
consistent patch:

  https://marc.info/?l=openbsd-bugs&m=169277277928008&w=2

Which, needless to say, also works for both. vi on base and nvi on
ports.  Below I paste a cvs version of Zhihao's patch to use it with vi
on base.

So it only rests some OpenBSD developer here to take look.  It's not
going to take up much of your time, everything has already been chewed
up :-).


Zhihao's diff translated to cvs:

Index: vi/v_paragraph.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/vi/v_paragraph.c,v
retrieving revision 1.9
diff -u -p -r1.9 v_paragraph.c
--- vi/v_paragraph.c    18 Apr 2017 01:45:35 -0000      1.9
+++ vi/v_paragraph.c    23 Aug 2023 10:18:39 -0000
@@ -41,15 +41,20 @@
        if (p[0] == '\014') {                                           \
                if (!--cnt)                                             \
                        goto found;                                     \
+               if (pstate == P_INTEXT && !--cnt)                       \
+                       goto found;                                     \
                continue;                                               \
        }                                                               \
        if (p[0] != '.' || len < 2)                                     \
                continue;                                               \
        for (lp = VIP(sp)->ps; *lp != '\0'; lp += 2)                    \
                if (lp[0] == p[1] &&                                    \
-                   ((lp[1] == ' ' && len == 2) || lp[1] == p[2]) &&    \
-                   !--cnt)                                             \
-                       goto found;                                     \
+                   (lp[1] == ' ' && len == 2 || lp[1] == p[2])) {      \
+                       if (!--cnt)                                     \
+                               goto found;                             \
+                       if (pstate == P_INTEXT && !--cnt)               \
+                               goto found;                             \
+               }                                                       \
 }
 
 /*


-- 
Walter

Reply via email to