私はあなたが入力するzshプロンプト「外部」にテキストを表示することが可能であることを知っています。一般的な例は、次のように実行されます。
myhost Wed 8 10:06 ~/sandlot
$ e .py█
を押してTab待つ:
myhost Wed 8 10:06 ~/sandlot
$ e .py█
-- file --
lenum.py lexample.py otherticks.py
私が興味を持っているのは以下のテキストです--file--
。一種の「zsh_echo_below_zle」はありますか?私の目的は次のとおりですので、キーボードやショートカットは気にしません。走るzleの出力を使用してください。愛
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 --
答え1
tab_message
特定のコマンド()の完了スクリプト()に示すように、ZSH完了システム内でこの関数を使用して、コマンドの特定のパラメーターを混在させるとカスタムメッセージを生成できます。_foo
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
(カスタムディレクトリを含めるように変更する場合は、常にこれを実行してください。今後注文するautoload -U compinit && compinit
。 )
ただし、コマンドラインでecho $(foo bar)█
完了は次_foo
のようになります。いいえマッシングの場合、tabこれはコマンドの置き換えなのでいいえオートコンプリートのfoo
。
コマンド置換中に置き換えられたコマンドには、直接実行されたかコマンド置換で実行されたかは表示されません(ZSH_EVAL_CONTEXT
エクスポートにはtoplevel
関係がないことを示す特殊変数があるにもかかわらず)。端末に書き込んだ後にカーソル位置を復元するそれは複雑である:
% 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
混乱の危険があります。しかし、それはより多くのことです。
zsh
のコードは、タスクに対して特別なタスクを実行していないSrc/exec.c
ように見え、コマンドを置き換えるためのフック機能を呼び出しません。したがって。cmdsubst
preexec
zsh