From: Mikael Magnusson <mikachu@gmail.com>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: zsh workers <zsh-workers@zsh.org>
Subject: Re: "{ } always { }" construct and return in called functions
Date: Tue, 19 May 2015 08:31:48 +0200 [thread overview]
Message-ID: <CAHYJk3Q48Okyw7WXfeJgQRSoZzMJ1yRMQpFLi2YeALtwpG96ug@mail.gmail.com> (raw)
In-Reply-To: <CAHYJk3Qgm=Mc3_d+kC-1hB7ybxcqU43nnr7Hw=N-opXj7nDa8A@mail.gmail.com>
On Tue, May 19, 2015 at 8:22 AM, Mikael Magnusson <mikachu@gmail.com> wrote:
> On Tue, May 19, 2015 at 7:04 AM, Bart Schaefer
> <schaefer@brasslantern.com> wrote:
>> On May 18, 1:47pm, Peter Stephenson wrote:
>> } Subject: Re: "{ } always { }" construct and return in called functions
>> }
>> } Hmmm... I'm wondering if the fact you've started jobs is important. It
>> } shouldn't be, with the "&|", and the doshfunc() code is supposed
>> } to make it irrelevant anyway by setting "stopmsg = 1".
>>
>> If you have some other job running in the background, the shell does
>> not exit when 'exit' is called from a zle widget:
>>
>> torch% unsetopt correct
>> torch% function _accept_and_quit() {
>> function> local -a buf
>> function> buf=(${(z)BUFFER})
>> function> if which $buf[1] >& /dev/null; then
>> function then> zsh -c "${BUFFER}" &|
>> function then> exit
>> function then> else
>> function else> zle -M "Command $buf[1] not found"
>> function else> fi
>> function> }
>> torch% zle -N _accept_and_quit
>> torch% { echo BG: $RANDOM; sleep 30; } &
>> [1] 7442
>> BG: 12801
>> torch% bindkey "^M" _accept_and_quit
>> torch% { echo Here: $RANDOM; sleep 10 }
>> _accept_and_quit:5: you have running jobs.
>> torch% { echo Here: $RANDOM; sleep 10 }
>> torch% Here: 29846
>> echo not exited
>> torch%
>> zsh: warning: 1 jobs SIGHUPed
>>
>>
>> It's the same effect as this:
>>
>> torch% { sleep 30 } &
>> [1] 7457
>> torch% exit
>> zsh: you have running jobs.
>> torch% exit
>> zsh: warning: 1 jobs SIGHUPed
>>
>> The difference is that the "you have running jobs" message is suppressed
>> when exit is called from a zle widget.
>>
>> If Mikael adds "unsetopt checkjobs" he should get the effect he wants.
>> He might also want "setopt nohup" to prevent the death of whatever it
>> is that's keeping the shell alive.
>
> A good theory, but
> zshrun ~> echo $options[checkjobs]
> off
> I've always had that option turned off.
>
> Also, since the command is run with &| then surely there are no jobs either way?
>
>> The part about "commands are randomly ran two or three times" does not
>> happen for me -- though I don't know exactly what it means. Does it
>> mean you can invoke _accept_and_quit two or three times, or does it
>> mean that running _accept_and_quit once mysteriously launches the same
>> job two or three times?
>
> It seems to be run once in the background by the widget, and then
> another one in the foreground that I can ctrl-c out of. I only press
> enter the one time.
If I comment out the exit in my widget, then the command is only run
once, and the commandline stays as it is.
If I put set -x at the head of the function, I get this output when
pressing enter with also the zsh -c line commented out first:
+_accept_and_quit:2> local -a buf
+_accept_and_quit:3> buf=( urxvt )
+_accept_and_quit:4> which urxvt
+_accept_and_quit:6> exit
when the last line is printed, urxvt is run in the foreground. After
exiting that terminal, our zsh exits.
--
Mikael Magnusson
next prev parent reply other threads:[~2015-05-19 6:31 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAHfspHmUOgLjnEMtLBBoeU31Z2GKu8uD5MYE4jsogMKbf+ag9g@mail.gmail.com>
[not found] ` <20150513155915.71f3daaa@pwslap01u.europe.root.pri>
2015-05-18 11:38 ` Mikael Magnusson
2015-05-18 12:14 ` Peter Stephenson
2015-05-18 12:24 ` Mikael Magnusson
2015-05-18 12:47 ` Peter Stephenson
2015-05-19 5:04 ` Bart Schaefer
2015-05-19 6:22 ` Mikael Magnusson
2015-05-19 6:31 ` Mikael Magnusson [this message]
2015-05-20 17:31 ` Bart Schaefer
2015-05-22 22:31 ` Peter Stephenson
2015-05-22 22:46 ` Bart Schaefer
2015-05-23 10:49 ` Daniel Shahaf
2015-05-23 15:13 ` Mikael Magnusson
2015-05-27 2:20 ` Dave Yost
2015-05-30 0:31 ` Bang-four (Re: "{ } always { }" construct and return in called functions) Bart Schaefer
2015-05-23 22:32 ` Release blocker (was: " Daniel Hahler
2015-05-24 12:54 ` Peter Stephenson
2015-05-26 9:03 ` Peter Stephenson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHYJk3Q48Okyw7WXfeJgQRSoZzMJ1yRMQpFLi2YeALtwpG96ug@mail.gmail.com \
--to=mikachu@gmail.com \
--cc=schaefer@brasslantern.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).