junegunn / fzf

:cherry_blossom: A command-line fuzzy finder
https://junegunn.github.io/fzf/
MIT License
61.95k stars 2.34k forks source link

Can't bind C-z to a readline function without getting 'readline: maximum macro execution nesting level exceeded' with fzf-cd - Alt-C #3838

Open excited-bore opened 1 month ago

excited-bore commented 1 month ago

Checklist

Output of fzf --version

0.52.1 (6432f00)

OS

Shell

Problem / Steps to reproduce

bind -m emacs-standard  '"\C-z": vi-undo'
bind -m vi-command      '"\C-z": vi-undo'
bind -m vi-insert       '"\C-z": vi-undo'
``` $: readline: maximum macro execution nesting level exceeded ``` This only seems to happen with readline functions for whatever reason. 'bind -x '"\C-z": exit' works without a hitch
excited-bore commented 1 month ago

Upon further inspection it seems like it had something to do with the order that i sourced my ~/.bashrc files more then a fzf bug.

First readline (bind) keybinds, then fzf, then 'complete -F _complete_alias "${!BASH_ALIASES[@]}"'

EDIT: Nevermind, it still seems to be a pure fzf issue and only comes up if I bind Ctrl-Z to something after sourceing ~/.fzf.bash

junegunn commented 1 month ago

Can't reproduce.

bash --noprofile --rcfile <(fzf --bash)

bind -m emacs-standard  '"\C-z": vi-undo'
bind -m vi-command      '"\C-z": vi-undo'
bind -m vi-insert       '"\C-z": vi-undo'
excited-bore commented 1 month ago

I forgot a relevant line. Also set this in your .bashrc (bash --noprofile --rcfile <(fzf --bash) isn't completely similar):

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

# Unset suspend signal shortcut (Ctrl+z)
stty susp undef

bind -m emacs-standard  '"\C-z": vi-undo'
bind -m vi-command      '"\C-z": vi-undo'
bind -m vi-insert       '"\C-z": vi-undo' 

in your .bashrc gives the 'readline: maximum macro execution nesting level exceeded' when using Alt-C

Sourcing [ -f ~/.fzf.bash ] && source ~/.fzf.bash after these lines will fix this mostly

# Unset suspend signal shortcut (Ctrl+z)
stty susp undef

bind -m emacs-standard  '"\C-z": vi-undo'
bind -m vi-command      '"\C-z": vi-undo'
bind -m vi-insert       '"\C-z": vi-undo' 

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

Now Alt-C works, but Ctrl-z will now be bound to changing editing-modes (vi/emacs). Removing stty susp undef stops this behaviour but also breaks `vi-undo

junegunn commented 1 month ago

Found out that it can only be reproduced in vi mode (which I don't use).

$ bash --noprofile --rcfile <(fzf --bash)
bash-5.2$ bind -m emacs-standard  '"\C-z": vi-undo'
bind -m vi-command      '"\C-z": vi-undo'
bind -m vi-insert       '"\C-z": vi-undo'
bash-5.2$
bash-5.2$ set -o vi
bash-5.2$ readline: maximum macro execution nesting level exceeded

Related: https://github.com/junegunn/fzf/pull/1876#issuecomment-587998534

So the current implementation relies on its internal C-Z binding, and overriding it breaks it. Patches are welcome.

sebastiancarlos commented 3 weeks ago

I'm having the exact same issue.