2017-02-23 9 views
0

私のツールの1つにカスタムZSHタブ補完機能があります。それはうまくいきますが、ツールが答えるのに時間がかかることがあります。ツールが実行されている間に(そして実行が完了する前に)何かが起こっているという何らかの表示を表示する方法はありますか?カスタムZSHコンプリータの実行中に進捗状況を表示

例えば、それはのように、現在の行の下のメッセージ、表示させることが可能である:

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

をここでの課題、私は「TAB」を打つ場所にカーソルが(その前の位置に戻らなければならないということです)完了したら、候補者が利用可能になります。私はZSHがこれを行うことができると知っていますが、ツールが実行を終了する前にメッセージを表示できますか?あなたはzle -R "Completing..."を使用しようとすることができ

#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 
+0

あなただけの 'プリントを使用しようとしました「完了しています...」' '_message'の代わりに? – Adaephon

+0

はい、それ以降は削除されません。これにより、コンプリータは「完了」の最後にコンプリートを追加します。 – Whyte

+0

その場合、 'print -n 'を試してみてください。完了... \ r"です。 '-n'は改行の印字を防止し、' \ r'はカーソルを改行の先頭に移動します。完了のリストが印刷されると、テキストを上書きする必要があります。 – Adaephon

答えて

0

は、ここに私の現在の完了スクリプトです。

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のページで/検索を見つけてください)

+0

それは動作します!補完が見つからないとき、完了が見つかったときに自動的に補完されたとき、複数の補完が見つかってメニューが表示されたとき、それはすべての私の場合に適用されます。すべての場合、「完了...」が表示され、完了すると正しく削除されます。ありがとう! – Whyte

関連する問題