Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: add-zle-hook-widget and multiple hooks
- X-seq: zsh-workers 46006
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- Subject: Re: add-zle-hook-widget and multiple hooks
- Date: Sat, 6 Jun 2020 13:58:40 +0200
- Cc: zsh-workers@xxxxxxx, Eric Freese <ericdfreese@xxxxxxxxx>
- In-reply-to: <20200606084054.GA31628@tarpaulin.shahaf.local2>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <20200606084054.GA31628@tarpaulin.shahaf.local2>
On 6/6/20, Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
> When two or more zle-line-pre-redraw hooks are registered using
> add-zle-hook-widget, the value of $LASTWIDGET when the each hook is
> called is the name of the former hook:
>
> [Eric Freese wrote in
> https://github.com/zsh-users/zsh-autosuggestions/issues/529#issuecomment-632113840]
> $ zsh -df
> % autoload add-zle-hook-widget
> % f() {}
> % g() { zle -M "$(typeset -p LASTWIDGET)" }
> % add-zle-hook-widget line-pre-redraw f
> % add-zle-hook-widget line-pre-redraw g
> % x<CURSOR>
> typeset -r LASTWIDGET=f
>
> The issue here is that g would like to to know what widget was invoked
> immediately before the redraw. In the example, that'd be self-insert.
>
> I've attached two proofs of concept. WDYT?
>
> I'll add docs, etc, once an approach is chosen.
>
> Cheers,
>
> Daniel
>
> P.S. For the latter patch, note that «zle $widget -f» is distinct from
> «zle -f».
I think the warning message when -f is not followed by nolast should
be phrased in the same way it would if there were other valid flags,
since it would have to change when more are added anyway (we will
probably not want to enumerate all possible flags in this warning
message).
Also, I think rather than reusing the concept of the -f option, it
would be better to use another flag (maybe -l for LASTWIDGET) which is
analogous to the existing -w option:
Normally, calling a widget in this way does not set the special
parameter WIDGET and related parameters, so that the environ‐
ment appears as if the top-level widget called by the user were
still active. With the option -w, WIDGET and related parame‐
ters are set to reflect the widget being executed by the zle
call.
--
Mikael Magnusson
Messages sorted by:
Reverse Date,
Date,
Thread,
Author