Here's a silly ed(1) session:

$ ed -p ":> "
:> P
P
*q
$

Notice how the prompt string changed from the custom prompt ":> " to
the default prompt "*".

This behavior seems to contradict both the man page and POSIX:

>From ed(1):
     -p string  Specifies a command prompt.  This may be toggled on and off
                with the P command.

>From POSIX:
       The P command shall cause ed to prompt with an <asterisk> ('*') (or
       string, if -p is specified) for all subsequent commands. The P command
       alternatively shall turn this mode on and off; it shall be initially on
       if the -p option is specified; otherwise, off.

With the patch below, the above session becomes

$ ed -p ":> "
:> P 
P
:> q 
$

which, I believe, is closer to both the documentation and POSIX.

This also matches the behavior of GNU Ed 1.10.

Index: bin/ed/main.c
===================================================================
RCS file: /cvs/src/bin/ed/main.c,v
retrieving revision 1.43
diff -u -p -r1.43 main.c
--- bin/ed/main.c       16 Jan 2015 06:39:32 -0000      1.43
+++ bin/ed/main.c       18 Jun 2015 10:33:21 -0000
@@ -110,7 +110,7 @@ top:
        while ((c = getopt(argc, argv, "p:sx")) != -1)
                switch (c) {
                case 'p':                               /* set prompt */
-                       prompt = optarg;
+                       dps = prompt = optarg;
                        break;
                case 's':                               /* run script */
                        scripted = 1;

Reply via email to