Zsh menu completion causes problems after zle reset-prompt

后端 未结 2 1138
太阳男子
太阳男子 2020-12-16 18:41

I have following code in my .zshrc:

TMOUT=1
TRAPALRM() { zle reset-prompt }

After triggering menu completion all items from menu, except hi

相关标签:
2条回答
  • 2020-12-16 19:27

    My solution for this issue is to check both $WIDGET and $_lastcomp[insert] values to know if menu-select is active at the moment more precisely.

    autoload -U is-at-least
    TMOUT=1
    if is-at-least 5.1; then
        # avoid menuselect to be cleared by reset-prompt
        redraw_tmout() {
            [ "$WIDGET" = "expand-or-complete" ] && [[ "$_lastcomp[insert]" =~ "^automenu$|^menu:" ]] || zle reset-prompt
        }
    else
        # evaluating $WIDGET in TMOUT may crash :(
        redraw_tmout() { zle reset-prompt }
    fi
    TRAPALRM() { redraw_tmout }
    

    The "expand-or-complete" might be "complete-word" or something, based on the key bind to your tab key. It can be checked by the bindkey "^I" command.

    0 讨论(0)
  • 2020-12-16 19:42

    I found this workaround, to basically prevent calling "reset-prompt" when in a menu selection :

    TRAPALRM() {
        if [ "$WIDGET" != "complete-word" ]; then
            zle reset-prompt
        fi
    }
    

    Note that complete-word may be different for you; I found it with an echo $WIDGET in the TRAPALRM call.

    0 讨论(0)
提交回复
热议问题