現在の xterm の色へのプログラムによるアクセス

現在の xterm の色へのプログラムによるアクセス

下のスレッドで

現在の xterm 背景色にプログラムでアクセスしますか?

Alex North-Keys は、現在の xterm の背景色を返す便利な bash スクリプトを提供しています。このスクリプトの出力を使用して、背景色が変更された後 (たとえば、リモート システムにログインした後) に背景色をリセットしたいと思います。

例えば、彼のスクリプトは次のようなものを返すかもしれません。

rgb:e0e0/ffff/ffff

残念ながら、背景色を設定するために使用するエスケープシーケンス

echo -ne "\033]11;!*\007"

アイボリーのような名前の付いた色を入力した場合にのみ機能するようです。

このコマンドを変更して、e0e0/ffff/ffff のようなものを引数として受け取るようにする方法はありますか?

ありがとう!

答え1

Emacs または Vim にコピーして貼り付けます。行の先頭の #????? を削除します。その行には、"^[" を含む sed ステートメントがあります。これは 2 文字のテキストであり、1 文字の ESC (^[) に置き換える必要があります。Vim では、C+v ESC と入力します。Emacs では、C+q ESC と入力します。

# filename: OSC_11_Pt_ST.sh
echo -e "\e[7m Reverse the FG/BG colors on this terminal as a visual aid. \e[0m"
y='\' # Add to end of $result (\e]11;rgb:??/??/??\e) to complete ST terminating
# OSC sequence.
# Query the background color using ST (string terminate) vice BEL (^G).Replies
# with a control sequence in RGB specification format using same terminator as
# the query (in this case, ST): "^[]11;rgb:4242/2525/5353^[\" (see file
# ctlseqs.txt). "^[" is ESC (\e); "^[]" is OSC; "^[\" is ST.
echo -en "\e]11;?\e\\"
# Read line from the standard input & assign to variable CSPEC (color specifi-
# cation as indicated by ctlseqs.txt). Do not echo input coming from terminal
# (-s); raw (-r); delimiter \ (-d).
read -s -r -d '\' CSPEC
#?????result=$(echo $CSPEC | sed 's/^[/\\\e/g')
# Set BG to "WebGrey" (decimal 128 128 128).
echo 'Set BG to "Webgrey" in 5 seconds...'
sleep 5
echo -en "\e]11;rgb:80/80/80\007"
echo "Return to original BG ($result$y) in 5 seconds..."
sleep 5
echo -en "$result$y"

関連情報