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.

 - todd

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