我在我的.zshrc文件中有以下代码:
TMOUT=1
TRAPALRM() { zle reset-prompt }
在触发菜单完成后,除了突出显示的项目之外,菜单中的所有项目都会在TRAPALRM
触发后消失,在菜单中导航一段时间后,zsh就会崩溃。
是否有任何修复或解决方法?
编辑:Linux Mint 17上的zsh版本为5.0.2
编辑:在Gentoo上的zsh版本5.0.7中我观察到相同的情况
我在我的.zshrc文件中有以下代码:
TMOUT=1
TRAPALRM() { zle reset-prompt }
在触发菜单完成后,除了突出显示的项目之外,菜单中的所有项目都会在TRAPALRM
触发后消失,在菜单中导航一段时间后,zsh就会崩溃。
是否有任何修复或解决方法?
编辑:Linux Mint 17上的zsh版本为5.0.2
编辑:在Gentoo上的zsh版本5.0.7中我观察到相同的情况
我发现了这个解决方法,基本上可以防止在菜单选择时调用“reset-prompt”:
TRAPALRM() {
if [ "$WIDGET" != "complete-word" ]; then
zle reset-prompt
fi
}
请注意,complete-word
可能与您的不同;我是通过在 TRAPALRM
调用中使用 echo $WIDGET
找到它的。
fzf-completion
,所以在我的情况下,这个条件是有效的:if ! [[ "$WIDGET" =~ ^(complete-word|fzf-completion)$ ]]; then
- grundicTRAPALRM() { ! [[ "$WIDGET" =~ ^(complete-word|fzf-completion|fzf-.*-widget)$ ]] && zle reset-prompt }
。请注意,Zsh函数和小部件可以列出,例如:functions + | grep -i fzf
。 - Faxopita对于这个问题,我的解决方案是同时检查$WIDGET和$_lastcomp[insert]的值,以更精确地了解菜单选择是否处于活动状态。
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 }
“expand-or-complete”可能是“complete-word”或其他内容,取决于您的Tab键绑定的按键。可以通过bindkey "^I"
命令进行检查。
$_lastcomp[insert]
文档的指针? - Linus Arver.zshrc
文件中:function _clear-line {
zle -K viins
zle reset-prompt
zle kill-whole-line
}
zle -N _clear-line
precmd() {
# Bind ctrl-b to the interrupt signal.
stty intr \^b
bindkey '^C' _clear-line
bindkey -M vicmd '^C' _clear-line
# Optionally, react differently from inside menuselect :
#bindkey -M menuselect '^C' undo
}
preexec() {
# Restore the ctrl-c binding.
stty intr \^c
}
您需要找出如何调用stty
来适应您的用例中的ALRM信号。