在自定义ZSH完成程序运行时显示进度指示

在自定义ZSH完成程序运行时显示进度指示,zsh,zsh-completion,Zsh,Zsh Completion,我的一个工具有一个自定义的ZSH选项卡完成功能。它工作得很好,但是有时工具需要很长时间才能回答;有没有一种方法可以在工具运行时(以及在它完成运行之前)显示某种指示,表明发生了什么 例如,是否可以使其在当前行下方显示消息,如: prompt$ pypath /providers/conf<TAB> Completing... 您可以尝试使用zle-R“完成…” zle-R[-c][display string][string…] … -R[-c][display string][st

我的一个工具有一个自定义的ZSH选项卡完成功能。它工作得很好,但是有时工具需要很长时间才能回答;有没有一种方法可以在工具运行时(以及在它完成运行之前)显示某种指示,表明发生了什么

例如,是否可以使其在当前行下方显示消息,如:

prompt$ pypath /providers/conf<TAB>
Completing...

您可以尝试使用
zle-R“完成…”

zle-R[-c][display string][string…]


-R[-c][display string][string…]

重新显示命令行;这是从用户定义的小部件中调用的,以允许更改变得可见。如果给定的显示字符串不是空的,则该字符串将显示在状态行中(位于正在编辑的行的正下方)

如果给出了可选字符串,它们将以与打印完成列表相同的方式列在提示下方。如果没有给出字符串,但使用了-c选项,则清除该列表

请注意,此选项仅对使用后不会立即退出的小部件有用,因为从小部件返回后显示的字符串将立即被删除

这个命令可以安全地在用户定义的小部件外部调用;如果zle处于活动状态,将刷新显示,而如果zle未处于活动状态,则命令无效。在这种情况下,通常不会有其他论点

--
(我找不到好的锚,所以请在
zle-R
页面中查找/搜索)


您是否尝试过只使用
打印“正在完成…”而不是
\u消息
?是的,但之后不会删除它,这会使完成者在“正在完成…”的末尾添加完成项。在这种情况下,您可以尝试
打印-n“正在完成…”\r'
-n
阻止打印换行符,并且
\r
将光标移动到行首。打印完成列表后,应覆盖文本。当按下Tab键时,将执行上述完成代码,且光标仍在正在编辑的行上。打印\r将使完成符在行首添加正在完成的单词的其余部分,覆盖我的提示,并将光标留在一个陌生的位置。这样做很有效!它适用于我的所有情况:未找到完成项时,找到一个完成项并自动完成时,以及找到多个完成项并显示菜单时。在所有情况下,“完成…”都会显示,完成后会正确删除。谢谢
#compdef pypath

# This does not work; it is only added when the whole thing ends
# _message -r "Completing..."

IFS=$'\n' path_candidates=($(pypath "${PREFIX}*" | sed 's|.*/||' | sort -u))
compset -P '*/'

if [ -z "$path_candidates" ]; then
    compadd -x "No matches found."
else
    compadd -q -S '/' $path_candidates
fi