Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH v2 (complete): Implement zle -P
- X-seq: zsh-workers 36430
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- Subject: Re: PATCH v2 (complete): Implement zle -P
- Date: Sun, 6 Sep 2015 13:51:57 +0200
- Cc: zsh workers <zsh-workers@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=hBMAlZ79EgOtHLmPM57eZBajqlY5oJRIQaG9s3Fg/w0=; b=akCy7rxj+RcrM/84CI8NkmIA+oUpbEiWcPEcB9ZkbUepE3RKDYYi8gjqE17XLCX2kr Wju88qPlgiAEdmZH/4J5SS/H9V6Q7z1tBNu0f0AXMAPB8ofT6ViL+aZNrbYQ3jtO/F1V kIs8GC8f9NQ5D7cDVr6iwzHebZ9VkTYHxpV68I+aa7NjnpWgBEKr12MztGLmyxYV3E2A e+EEm+SJGz4WecyFkJiOIFhljLQaWjuEEKBGbxXlKIgY7we6YbF8k4gShv0t/XIJFlIR Uk766aFw87rgNdIJpvFu8Tszz/hRlmjDJXY3WQhqwj/XLSvY4MRFwclnD3SstNdqjyyn L0KA==
- In-reply-to: <20150906095054.GC1895@tarsus.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>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <1441087664-9081-1-git-send-email-mikachu@gmail.com> <23177.1441101027@thecus.kiddle.eu> <20150901110331.437e4db8@pwslap01u.europe.root.pri> <20150906095054.GC1895@tarsus.local2>
On Sun, Sep 6, 2015 at 11:50 AM, Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
> Peter Stephenson wrote on Tue, Sep 01, 2015 at 11:03:31 +0100:
>> On Tue, 1 Sep 2015 11:50:27 +0200
>> Oliver Kiddle <okiddle@xxxxxxxxxxx> wrote:
>> > Mikael Magnusson wrote:
>> > > Indeed, I'm not sure if a user can figure out which widgets are useful
>> > > to override in this way. Would it be more useful to just do what Wayne
>> > > did originally and let zle -N take some flags that specify which specific
>> > > flags the new widget should have after all? The advantage of this method
>> > > is that if we add more flags, users can wrap those widgets without us
>> > > remembering to add a new zle -N flag as well.
>> >
>> > I think that approach is better than the prototypes.
>>
>> I'd be inclined to think this is both clearer and more powerful, too.
>
> The 'zle -P' form is nice when wrapping arbitrary widgets and wanting to
> preserve their properties. For example:
>
> zsh -f
> bindkey -e
> bkw-wrapper() { zle .backward-kill-word }
> zle -N backward-kill-word bkw-wrapper
> echo foo bar<^W><^W><^Y>
>
> This results in "echo foo <CURSOR>", but in "echo foo bar <CURSOR>"
> without the third line — because 'bkw-wrapper' lacks the ZLE_KILL flag
> which backward-kill-word has.
>
> When I wrap a built-in widget, I would rather just say "Make my widget
> like that other widget" than enumerate all flags my widget requires;
> but when I define a new widget from scratch, being able to enumerate all
> flags my widgets required would be good.
>
> So, in summary, I think both forms are useful: 'zle -P' is useful for
> wrapping widgets and 'zle -f' for defining new ones.
>
> Cheers,
>
> Daniel
>
> P.S. As a concrete example, in zsh-syntax-highlighting, the difference
> in flags between a built-in widget and a user-defined wrapper thereof
> leads to issues such as [1], where wrapping a widget causes it to change
> behaviour: https://github.com/zsh-users/zsh-syntax-highlighting/issues/150
> I believe using 'zle -P' to define the wrapper widget would immediately
> solve that issue.
You can believe it, but it's not the case. The code that handles most
of these flags first checks that the widget is internal, and not a
shell wrapper function. Some more changes would be needed to make this
work. The yank flag is the only one that does something useful at the
moment.
--
Mikael Magnusson
Messages sorted by:
Reverse Date,
Date,
Thread,
Author