エラーを赤色で表示し、zshから緑色で入力する簡単な方法が必要です。私が見つけたこの回答、うまく動作しますが、入力色を実装していません。私は実際にUnixの開発者ではないので、いくつか試してみましたが、うまくいきませんでした。この方法または類似の方法を使用して入力色を緑色に変更するにはどうすればよいですか?
これは私の本当の内容です.zshrc
。
setcolor()
{
case "$1" in
red)
tput setaf 1
;;
normal)
tput sgr0
;;
green)
tput setaf 2
;;
esac
}
# make standard error red
rederr()
{
while read -r line
do
setcolor $errorcolor
echo "$line"
setcolor normal
done
}
errorcolor=red
errfifo=${TMPDIR:-/tmp}/errfifo.$$
mkfifo $errfifo
# to silence the line telling us what job number the background job is
exec 2>/dev/null
rederr <$errfifo&
errpid=$!
disown %+
exec 2>$errfifo
答え1
標準入力は入力する流れ、そこには着色することはありません。緑色に塗りたいという意味だと思います。エコターミナルに入力する内容は、カーネルのターミナルデバイスドライバまたはアプリケーション自体(独自のラインエディタを実装している場合)によって行われます。
端末への出力はstdout、stderr、または入力エコー(カーネルを介して、または独自の行エディタを実装し、/dev/tty
stdout / stderrを使用する代わりにエコーされるアプリケーションを開く)を介してのみ実行できることがわかっている場合は、色を指定できますあります。 stdout/stderr プロセッサは何かを出力し、色を緑色に変更します。グリーン実際、stdoutやstderrを介していないすべての出力のデフォルトの色は次のとおりです。
zmodload zsh/system
autoload colors; colors
colour-stream() {
local buf output_colour=$fg[$1] after_colour=$fg[$2]
while sysread buf; do
syswrite -- $output_colour$buf$after_colour
done > /dev/tty
}
exec 1> >(colour-stream default green) \
2> >(colour-stream red green)
$TTY
端末を開いたり、自分で書いたもの/dev/tty
(sudo
パスワードプロンプトなど)echo test > /dev/tty
も緑色で表示されます。
一部のシェル(bash
stderrが端末に接続されていない場合など)は対話的に実行されません。この問題を解決するために実行することができますが、bash -i
bashのreadlineはstderrに入力エコーを出力するため、赤で表示されます。 readline(gdbやPythonなど)を使用する他のアプリケーションでは、stdoutまたはstderrを使用したり、/ dev / ttyを入力エコーYMMVで開くことができます。 TUIアプリの状況はさらに悪化する可能性があります。