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

时间:2017-02-23 10:01:56

标签: zsh zsh-completion

我为我的某个工具提供了自定义ZSH制表符完成功能。它工作得很好,但有时工具需要很长时间才能回答;有没有办法在工具运行时(以及在它完成运行之前)显示某些事情正在发生的事情?

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

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

这里的挑战是,一旦完成候选者可用,光标必须返回其先前的位置(我点击'TAB')。我知道ZSH可以做到这一点,但它可以在工具运行之前显示一条消息吗?

这是我目前的完成脚本:

#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

1 个答案:

答案 0 :(得分:0)

您可以尝试使用zle -R "Completing..."

  

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

     

重新显示命令行;这是从用户定义的小部件中调用,以允许更改变为可见。如果给出了显示字符串而非为空,则会在状态行中显示(紧接在正在编辑的行的下方)。

     

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

     

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

     

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

     

- zshzle(1): Zsh Line Editor, Zle Bulitins, zle -R
  (我无法找到一个好的锚点,所以请在页面中找到/搜索zle -R