zsh-workers
 help / color / mirror / code / Atom feed
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


  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).