From: Dave Yost <Dave@Yost.com>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: zsh-users@zsh.org
Subject: Re: accept-line question
Date: Thu, 2 Apr 2015 14:50:33 -0700 [thread overview]
Message-ID: <81DADC6E-8DFD-4FB4-9E5D-F3F4CF1EDC07@yost.com> (raw)
In-Reply-To: <E00A4521-8A4E-486C-BB2E-5D8D80639156@yost.com>
[-- Attachment #1: Type: text/plain, Size: 2712 bytes --]
That works.
I do want the executed command to be inserted into history.
I searched the manual in vain for a way to do that. Any chance you could illuminate further?
Thanks
Dave
> Bart Schaefer wrote:
>
> That's now how it works; accept-line in x1 does not run the command and
> then resume ZLE inside the x2 function, and even if it did it would not
> reprint the prompt in that way.
>
> All "accept-line" does is assert that the buffer is now in its final
> state, so that after ZLE finishes, the regular shell parser should read
> that line as the input. However, ZLE does not finish until the current
> active widget has also finished, so if accept-line is run again it can
> still change the previously-accepted buffer.
>
> You'd need something like this:
>
> --- 8< ---
> execute-now() {
> zle -I
> eval "$BUFFER"
> BUFFER=
> zle -R
> }
>
> zle -N execute-now
> --- 8< ---
>
> Then replace any "zle accept-line" with "zle execute-now".
>
> However, *that* does not push the buffer onto the history stack, so even
> more may be necessary depending on what you intend to accomplish.
>
> --
> Barton E. Schaefer
>
>
>> On 2015-04-02, at 10:12 AM, Dave Yost <Dave@Yost.com> wrote:
>>
>> Sorry, that email was flawed. Let me try again.
>>
>> Below, after sourcing a script, I type ^a then ^b.
>> The ^a works as expected, but not the ^b
>>
>> There must be something more I have to do besides “accept-line”. But what?
>>
>> 0 Thu 9:59:38 yost DaveBook ~
>> 206 Z% cat accept-line-test.zsh
>> function xxx {
>> BUFFER="$1"
>> zle -R
>> zle accept-line
>> }
>>
>> function x1 {
>> xxx echo\ 1
>> }
>>
>> function x2 {
>> xxx echo\ 2
>> xxx echo\ 3
>> }
>>
>> zle -N x1
>> zle -N x2
>>
>> bindkey ^a x1
>> bindkey ^b x2
>> 0 Thu 9:59:47 yost DaveBook ~
>> 207 Z% source accept-line-test.zsh
>> 0 Thu 9:59:54 yost DaveBook ~
>> 208 Z% echo 1
>> 1
>> 0 Thu 9:59:55 yost DaveBook ~
>> 209 Z% echo 3
>> 3
>> 0 Thu 9:59:59 yost DaveBook ~
>> 210 Z%
>>
>> The output I want from ^b is
>>
>> 0 Wed 0:30:03 yost DaveBook ~
>> 240 Z% echo 2
>> 2
>> 0 Wed 0:30:04 yost DaveBook ~
>> 241 Z% echo 3
>> 3
>> 0 Wed 0:30:04 yost DaveBook ~
>> 242 Z%
>>
>> Extra credit:
>>
>> Is there a way to write a function x3 that calls x2, such that I can issue x3 from the command line get the result above instead of the result below?
>>
>> 0 Thu 10:04:32 yost DaveBook ~
>> 216 Z% x2
>> xxx:zle:3: widgets can only be called when ZLE is active
>> xxx:zle:3: widgets can only be called when ZLE is active
>> 1 Thu 10:05:55 yost DaveBook ~
>> 217 Z%
>>
>> Thanks
>>
>
next prev parent reply other threads:[~2015-04-02 21:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <FF62FDC6-BDD8-4BF3-AD44-F36E834D3B4F@yost.com>
2015-04-01 15:39 ` Bart Schaefer
[not found] ` <E00A4521-8A4E-486C-BB2E-5D8D80639156@yost.com>
2015-04-02 20:58 ` Mikael Magnusson
2015-04-02 21:30 ` Bart Schaefer
2015-04-02 21:50 ` Dave Yost [this message]
2015-04-02 22:40 ` Bart Schaefer
2015-04-02 23:19 ` Mikael Magnusson
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=81DADC6E-8DFD-4FB4-9E5D-F3F4CF1EDC07@yost.com \
--to=dave@yost.com \
--cc=schaefer@brasslantern.com \
--cc=zsh-users@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).