Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: widget function must have zle codes



original simpe aim:
to nullify any std output in bind -s, (Bash bind-x default)



bindkey -s "^m" "\e[H   2>/dev/null [[ $- =~ x ]]&&{ set +x;echo Trace
OFF ;} ||{ set -x;echo Trace ON;};print -s '\e[F'\r\e[A"


How is the precise correct one ?

On 8/18/23, Budi <budikusasi@xxxxxxxxx> wrote:
> original simpe aim,
> to nullify any std output in bind -s, (Bash bind-x default)
>
>
>
> bindkey -s "^m" "\e[H   2>/dev/null [[ $- =~ x ]]&&{ set +x;echo Trace
> OFF ;} ||{ set -x;echo Trace ON;};print -s '\e[F'\r\e[A"
>
>
> How is the precise correct one ?
>
>
> On 8/18/23, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
>> On Thu, Aug 17, 2023 at 5:11 PM Budi <budikusasi@xxxxxxxxx> wrote:
>>>
>>> How can;t this work
>>> a widget function having zle codes
>>
>> I'm not entirely sure what you're attempting to accomplish here.
>>
>>> t:1: bad pattern: e[H
>>
>> You're getting that specific error because you haven't quoted the
>> string properly, but I don't think it would do what you want anyway.
>> It looks like you're trying to extrapolate Roman's "bind-x" example to
>> a case it wasn't meant to cover.  One would not normally create a
>> widget by assigning to the functions[] array, Roman did that
>> specifically in order to construct a new function body from the values
>> in the positional parameters of the "bind-x" function.
>>
>> Further, it's the "zle -N" command that creates a widget, the function
>> is the widget implementation.  Neither of them works without the
>> other.
>>
>> In ZLE widgets, you don't normally refer to an action by it's key
>> binding, instead you refer to it by its widget name, and use the "zle"
>> command to run it.  So instead of $'\e[H' (which would be the correct
>> quoting you were after), you would write
>>    zle beginning-of-line
>> (or whatever action you wanted).  Each built-in widget has a special
>> name starting with a "." that you can use to avoid calling some
>> user-defined replacement implementation, so you might see examples
>> like
>>   zle .beginning-of-line
>>
>>> functions[t]="zle -I; \e[H   2>/dev/null echo Test preceding word"
>>
>> I can't tell what you're expecting to have happen with that "echo".
>> If you meant for "Test preceding word" to become part of the line
>> being edited, you need to assign that to one of the BUFFER, LBUFFER,
>> or RBUFFER variables (please see the doc).
>>
>> I strongly suggest you look at some of the examples in Functions/Zle/
>> in the distribution.  Many are a bit esoteric but most have extensive
>> explanatory comments.  The easiest to understand might be
>>   Functions/Zle/history-search-end
>>   Functions/Zle/down-line-or-beginning-search
>>   Functions/Zle/up-line-or-beginning-search
>> Note these files are function bodies only, they expect to be turned
>> into actual widgets by (for example)
>>   autoload history-search-end
>>   Zle -N history-search-end
>>
>> There's also
>>   Functions/Zle/vi-pipe
>> but note that its setup commentary forgot to mention the "zle -N vi-pipe"
>> part.
>>
>




Messages sorted by: Reverse Date, Date, Thread, Author