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

Re: A wrong bindkey command breaks the way bck-i-search (Ctrl+R) works



On 7/26/21, Peter Slížik <peter.slizik@xxxxxxxxx> wrote:
> Hello,
>
> I created a few useful helper functions and bound them to specified keys.
> For example, pressing " inserts a pair of quotes and puts the cursor inside
> them, like this: "|".
> Another example, pressing a space fixes some of the typos I'm inclined to
> do repeatedly, e.g. pyhton<Space> is expanded to python<Space>.
>
> The implementation is quite straightforward, the widget examines LBUFFER
> and RBUFFER and modifies LBUFFER accordingly.
>
> _expand_abbreviations ()
> {
>     if [[ LBUFFER =~ 'this' && RBUFFER == 'that' ]]; then
>         LBUFER+='something '    # mind the trailing space
>     fi
> }
>
> zle -N expand-abbreviations _expand_abbreviations
> bindkey ' ' expand-abbreviations
>
> The problem with this solution is that it breaks the way that Ctrl+R
> history search works.
> Before, typing a space inside Ctrl+R just underlined the space in the
> offered string:
>
> % abcd efgh
> zsh: command not found: abcd
> % <Ctrl+R>*abcd *efgh    # the space is underlined here
> bck-i-search: abcd<Space>
>
> After using the " bindkey ' ' expand-abbreviations" command, the space
> finishes the Ctrl+R editor and inserts itself in front of the offered text:
> % _abcd efgh    # a space prepended before abcd
> and I'm not able to continue with the bck-i-search widget any more.
>
> The behavior is identical for other bound keys, e.g. the double quote mark
> in the first example with quote duplication.
>
> I'm pretty sure there's something I'm missing in the bindkey command, but
> frankly, the documentation is quite complex and I'm not sure what to look
> for.
>
> Any suggestions are appreciated.

You can use bindkey -M isearch ' ' self-insert to restore the previous behavior.

-- 
Mikael Magnusson




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