入力している場所にzshプロンプトの「外側」にテキストを表示できることを知っています。一般的な例は完了です。
myhost Wed 8 10:06 ~/sandlot
$ e .py█
押す Tab、etvoilá:
myhost Wed 8 10:06 ~/sandlot
$ e .py█
-- file --
lenum.py lexample.py otherticks.py
私が興味を持っているのは、以下の--file--
からのテキストです。なんらかの「zsh_echo_below_zle」か何かがありますか。私の意図はrunであり、zleで出力を使用することなので、キーボードやショートカットについては気にしません。 S.a.
myhost Wed 8 10:06 ~/sandlot
$ some_command $(some_command_with_warning)█
押す Tab、および
myhost Wed 8 10:06 ~/sandlot
$ some_command some_output█
-- warning: some_output is about yadda yadda yadada --
ZSH完了システム内で、マッシング時のカスタムメッセージ tab コマンドの特定の引数については、特定のコマンド(foo
)のこの完了スクリプト(__message
_)に示すように、__foo
_関数を介して可能です。
_#compdef foo
local curcontext="$curcontext" state
_arguments -C -s \
'1: :->dofoo' \
&& return 0
case "$state" in
dofoo)
_message -r " -- warning: lp0 on fire"
_values "parameters" $(_call_program getparam echo aaa bbb)
;;
esac
_
例えば。
_% ls $fpath[*]/_foo 2>/dev/null
/Users/jdoe/.zsh/functions/_foo
% rm ~/.zcompdump && exec zsh
% function foo () { echo "$@" }
% foo █
-- warning: lp0 on fire
aaa bbb
_
(カスタムディレクトリを含めるように_$fpath
_を変更する場合は、必ずbefore_autoload -U compinit && compinit
_コマンドを実行してください。)
ただし、コマンドラインがecho $(foo bar)█
の場合、補完__foo
_はnot tab これはコマンド置換であり、notfoo
のオートコンプリートであるため、マッシュされます。
コマンド置換中、置換されるコマンドは、直接実行されているのか、コマンド置換として実行されているのかを示しません(エクスポートでは、toplevel
のみを示す特別な_ZSH_EVAL_CONTEXT
_変数があります)、および への書き込みターミナルからカーソル位置を復元する 複雑になります:
_% cat awkward
#!/bin/zsh
echo -ne "\e7\n -- warning: lp0 on fire\e[F\e8" >/dev/tty; echo blat
% ./awkward
blat
% echo $(./awkward)
_
...プロンプトが画面の下部に表示されているかのように、それはほとんど完璧ではありませんが、恐ろしいバグのあることが起こります。
_% echo -ne "\e[$LINES;0H"
...
% ./awkward
blatwarning: lp0 on fire
% echo $(./awkward )
-- warblat fire
_
より複雑なプログラムは、ターミナルの下部にあることを適切に処理する必要があります。または、移植性のためにncurses
を使用する必要があります。また、何らかの方法でzsh
に、書き込まれたカスタム行をクリアする必要があることを示す必要があります。表示は、後続のコマンドの出力で混乱するリスクはありません。しかし、それはもっと手間がかかります。
_Src/exec.c
_のzsh
コードは、cmdsubst
ジョブに対して特別なことをしているようには見えません。また、コマンド置換のためにpreexec
フック関数も呼び出されません。そのため、zsh
でのコマンド置換の実行中に、カスタムのプロンプト以下の端末メッセージングの単純なものは実際には見られません。