Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: non-interactive set -m
- X-seq: zsh-workers 27110
- From: Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: non-interactive set -m
- Date: Thu, 9 Jul 2009 20:36:13 +0100
- In-reply-to: <loom.20090709T170937-567@xxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <loom.20090707T205334-50@xxxxxxxxxxxxxx> <200907080858.n688wXfc030608@xxxxxxxxxxxxxx> <loom.20090708T124251-758@xxxxxxxxxxxxxx> <200907081349.n68DneSv001850@xxxxxxxxxxxxxx> <loom.20090709T170937-567@xxxxxxxxxxxxxx>
On Thu, 9 Jul 2009 18:13:15 +0000 (UTC)
Eric Blake <ebb9@xxxxxxx> wrote:
> As-is, your 2-hunk patch accidentally sets monitor mode by default for
> non-interactive shells:
>
> $ Src/zsh -c 'echo $-'
> 569Xm
This is tricky: there's the knock-on effect from INTERACTIVE, and the
possibility it might be set or unset. I think the following does it.
Index: Src/init.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/init.c,v
retrieving revision 1.102
diff -u -r1.102 init.c
--- Src/init.c 8 Jul 2009 17:07:13 -0000 1.102
+++ Src/init.c 9 Jul 2009 19:33:44 -0000
@@ -233,6 +233,11 @@
* be changed. At the end of the function, a value of 2 gets *
* changed to 1. */
opts[INTERACTIVE] = isatty(0) ? 2 : 0;
+ /*
+ * MONITOR is similar: we initialise it to 2, and if it's
+ * still 2 at the end, we set it to the value of INTERACTIVE.
+ */
+ opts[MONITOR] = 2; /* may be unset in init_io() */
opts[SHINSTDIN] = 0;
opts[SINGLECOMMAND] = 0;
@@ -343,6 +348,8 @@
if(isset(SINGLECOMMAND))
opts[INTERACTIVE] &= 1;
opts[INTERACTIVE] = !!opts[INTERACTIVE];
+ if (opts[MONITOR] == 2)
+ opts[MONITOR] = opts[INTERACTIVE];
pparams = x = (char **) zshcalloc((countlinknodes(paramlist) + 1) * sizeof(char *));
while ((*x++ = (char *)getlinknode(paramlist)));
@@ -1395,7 +1402,6 @@
createoptiontable();
emulate(zsh_name, 1); /* initialises most options */
opts[LOGINSHELL] = (**argv == '-');
- opts[MONITOR] = 1; /* may be unset in init_io() */
opts[PRIVILEGED] = (getuid() != geteuid() || getgid() != getegid());
opts[USEZLE] = 1; /* may be unset in init_io() */
parseargs(argv); /* sets INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
--
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
Messages sorted by:
Reverse Date,
Date,
Thread,
Author