On Tue, 07 Feb 2023 20:35:10 -0700, Todd C. Miller wrote:

> On Tue, 07 Feb 2023 17:17:02 -0700, Todd C. Miller wrote:
>
> > Yes, the bug is that the number is not displayed.  The following
> > diff fixes that but there is still a bug because the resulting line
> > also lacks a line number.  In other words, instead of:
> >
> > :s/men/MEN/c
> >      1  Five women came to the party.
> >                ^^^[ynq]y
> > Five woMEN came to the party.
> >
> > it should look like this:
> >
> > :s/men/MEN/c
> >      1  Five women came to the party.
> >                ^^^[ynq]y
> >      1  Five woMEN came to the party.
>
> Here's an updated diff that prints line numbers when autoprint is
> set too.  This seems to match historic ex behavior and POSIX, but
> I'd appreciate other eyes on it.

Moving this from busg@ to tech@.  I noticed today I still have this
diff from Feb rotting in my tree.  The original thread is:
https://marc.info/?l=openbsd-bugs&m=167580085421828&w=2

OK?

Index: usr.bin/vi/ex/ex.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/ex/ex.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 ex.c
--- usr.bin/vi/ex/ex.c  20 Feb 2022 19:45:51 -0000      1.22
+++ usr.bin/vi/ex/ex.c  8 Feb 2023 03:28:32 -0000
@@ -1454,8 +1454,14 @@ addr_verify:
                LF_INIT(FL_ISSET(ecp->iflags, E_C_HASH | E_C_LIST | E_C_PRINT));
                if (!LF_ISSET(E_C_HASH | E_C_LIST | E_C_PRINT | E_NOAUTO) &&
                    !F_ISSET(sp, SC_EX_GLOBAL) &&
-                   O_ISSET(sp, O_AUTOPRINT) && F_ISSET(ecp, E_AUTOPRINT))
-                       LF_INIT(E_C_PRINT);
+                   O_ISSET(sp, O_AUTOPRINT) && F_ISSET(ecp, E_AUTOPRINT)) {
+
+                       /* Honor the number option if autoprint is set. */
+                       if (F_ISSET(ecp, E_OPTNUM))
+                               LF_INIT(E_C_HASH);
+                       else
+                               LF_INIT(E_C_PRINT);
+               }
 
                if (LF_ISSET(E_C_HASH | E_C_LIST | E_C_PRINT)) {
                        cur.lno = sp->lno;
Index: usr.bin/vi/ex/ex_subst.c
===================================================================
RCS file: /cvs/src/usr.bin/vi/ex/ex_subst.c,v
retrieving revision 1.30
diff -u -p -u -r1.30 ex_subst.c
--- usr.bin/vi/ex/ex_subst.c    18 Apr 2017 01:45:35 -0000      1.30
+++ usr.bin/vi/ex/ex_subst.c    8 Feb 2023 03:23:27 -0000
@@ -633,7 +633,9 @@ nextmatch:  match[0].rm_so = offset;
                                        goto lquit;
                                }
                        } else {
-                               if (ex_print(sp, cmdp, &from, &to, 0) ||
+                               const int flags =
+                                   O_ISSET(sp, O_NUMBER) ? E_C_HASH : 0;
+                               if (ex_print(sp, cmdp, &from, &to, flags) ||
                                    ex_scprint(sp, &from, &to))
                                        goto lquit;
                                if (ex_txt(sp, &tiq, 0, TXT_CR))

Reply via email to