私の標準入力を緑色で表示するようにzshを設定する

私の標準入力を緑色で表示するようにzshを設定する

エラーを赤色で表示し、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/ttystdout / 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/ttysudoパスワードプロンプトなど)echo test > /dev/ttyも緑色で表示されます。

一部のシェル(bashstderrが端末に接続されていない場合など)は対話的に実行されません。この問題を解決するために実行することができますが、bash -ibashのreadlineはstderrに入力エコーを出力するため、赤で表示されます。 readline(gdbやPythonなど)を使用する他のアプリケーションでは、stdoutまたはstderrを使用したり、/ dev / ttyを入力エコーYMMVで開くことができます。 TUIアプリの状況はさらに悪化する可能性があります。

おすすめ記事