コマンドラインからxtermの色(背景、フォント、前景)を変更したいと思います。これはANSIエスケープシーケンスを使用して行うことができると聞きました。
これが可能な場合:
- どうやって?
- 色の名前を使用できますか、またはRGBコードを使用する必要がありますか?
コマンドラインからxtermの色(背景、フォント、前景)を変更したいと思います。これはANSIエスケープシーケンスを使用して行うことができると聞きました。
これが可能な場合:
回答:
ANSIエスケープシーケンスは、エスケープ文字である文字27で始まる文字のシーケンスで構成されています。次の文字は、多くの場合(常にではありませんが)角かっこです:[
echoコマンドは、エスケープに指定-e
して使用する場合、エスケープ文字を送信できます\e
。
ANSI規格では、8色とブライトモードが定義されており、合計16の可能性があります。シーケンスは次のとおりです。
\e[<number>m
次の<number>
いずれかです。
前景:
バックグラウンド:
47ホワイト
0すべてリセット
したがって、前景を赤、背景を黄色にするには:
$ echo -e "\e[31m\e[43m"
そして太字を有効にするには:
$ echo -e "\e[1m"
もちろん、それらをすべて組み合わせることができます。
$ echo -e "\e[31m\e[43m\e[1m"
他のことを行うための他の多くのエスケープコードがあります。
たとえば、画面をクリアし、カーソルを左上に移動します。
$ echo -e "\e[2J\e[1;1H"
色を変更するときに便利です:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
色が変わり、画面がクリアされ、左上にカーソルが置かれます。まあ、ほぼ左上。Echoはキャリッジリターンを挿入するため、1行下に移動します。-n
うるさい場合は、エコーを追加してこれを防ぐことができます。
あなたがそれをすべて台無しにし、あなたが入力しているものを見ることができないなら、あなたは押すことによって、ターミナルの色を通常にリセットすることができます:
Ctrl+v [ 0 m Return
あなたが望むのはコマンドプロンプトです。未知のコマンドについてうなりますが、あなたは再び何をしているかを見ることができます。
echo -ne '\e[31;43m'
には、(上記の代わりにecho -e "\e[31m\e[43m"
)短いものを使用することもできます。
最新のXtermは32ビットカラーをサポートしていることに注意してください!
簡単な例。値#53186fの素敵な濃い紫色の背景(それぞれ、彼自身のもの)を設定するには、次のようにします。
echo -ne "\033]11;#53186f\007"
これにより、後続のテキストだけでなく、ウィンドウ全体の色が即座に変更されることに注意してください。これは、たとえば、サーバーにsshした後にウィンドウを明らかに異なるものにする場合に特に便利です。上記の「エコー」を.bashrcに入れると、そのサーバーにログインすると端末の色が自動的に変更されます(ただし、Ctrl-Dを押したときに元に戻りません)
あなたはこれを探してネット上で何時間も過ごすことができます-ほとんどのドキュメントは、オリジナルの16 ANSIカラーについてのみ話します。
ソース:http : //www.steike.com/code/xterm-colors/ およびhttp://rtfm.etla.org/xterm/ctlseq.html(「オペレーティングシステムコントロール」の下を参照)
注:上記のエスケープシーケンスはXTermsで有効であり、XTermのように見える「XTermのような」ウィンドウターミナルエミュレータの他の実装では機能しない場合があります。たとえば、「gnome-terminal」または「konsole」には異なるエスケープシーケンスがあるか、色の変更がまったく実装されていない場合があります。
はい。ANSI端末はANSIエスケープコードをサポートしています。次の形式の各Control Sequence Introducer
(CSI
)コード:
ESC[<<<CODE>>>
アスキー文字27
(ESC
文字)または1b
16進数で、その後に左角括弧と、使用するアクションを示す文字が続きます。
;
分離されたパラメーターのリストは、<<<CODE>>>
パラメーターの直前に指定できることに注意してください。
現在、色はCSI
コードのサブセットであるコードを使用していSelect Graphic Rendition
ます。これらは次の形式です。
ESC[<<<SGR>>>m
SGR
コードは、パラメータとして渡されますCSI
。あなたの質問に関連するのはSGR
コード30-49です。コード30〜39は前景色を設定します。コード40〜49は背景色を設定します。
30 - Foreground Black
31 - Foreground Red
32 - Foreground Green
33 - Foreground Yellow
34 - Foreground Blue
35 - Foreground Magenta
36 - Foreground Cyan
37 - Foreground White
40 - Background Black
41 - Background Red
42 - Background Green
43 - Background Yellow
44 - Background Blue
45 - Background Magenta
46 - Background Cyan
47 - Background White
コード38と48は特別なコードです。これらは、RGB値を使用できるようにするものです。これらの形式は次のとおりです。
ESC[38;2;<r>;<g>;<b>m (Foreground)
ESC[48;2;<r>;<g>;<b>m (Background)
注:別の用途にはが含まれます\x1b[<3 or 4>8;5;<web safe color index>m
。この使用法では、まったく異なるカラーエンコーディングがあります。詳細については、この回答の上部にあるリンクを参照してください。
コード39および49は、前景色と背景色をデフォルトに設定します。デフォルトは、端末ごとに定義されています。
実際には、色30〜37、40〜47は、ラベルが示す色とわずかに異なります。
0 - Black
1 - Darker Red
2 - Darker Green
3 - Dark/Yellow or Brown (varies between terminals)
4 - Dark Blue
5 - Dark Magenta
6 - Dark Cyan
7 - Light Grey
明るい色を得るには、太字のSGIを使用します1
。太字は誤解を招く名前です。フォントを太字にしません。実際にテキストの明るさを増加させます。ボールドを適用すると、色は次のようになります。
0 - Dark Grey
1 - Bright Red
2 - Bright Green
3 - Bright Yellow
4 - Bright Blue
5 - Bright Magenta
6 - Bright Cyan
7 - White
注意:色の最後の2つのブロックは、前面と背景の両方に関連しています(<index> + (30 or 40)
)。
すべてのスタイルを削除するには(デフォルト/通常モードに戻す)、SGR
0を使用します。
CSI
コードはすべてグラフィカルではありません。たとえばESC[2J
、端末をクリアします。ESC[<y>;<x>H
カーソル位置を設定します(1-indexed)。詳細については、ウィキペディアの記事を参照してください。
注:これらをテストするには、echo -e
またはを使用しますprintf
。
注:「^ [」はエスケープ文字であり、CTRL-V、CTRL- [で挿入されます。^ Gはベル文字で、CTRL-V、CTRL-Gで挿入されます
次のブロックは.bash_profileにあり、色を変更した可能性のある別のシステムにログオンした後でも、このシステム上のxtermが常に白地に黒になるようにします。
perl -e '$e=chr(27);print "${e}[37m ${e}[40m ${e}[2J ${e}[1;1H";'
export PS1='^[[37m^[]0;${HOST}: ${PWD}^G^[[40m${USER}@${HOST}:${PWD}
--> '
また、ここで
はubuntu用のパッケージを備え
たbashスクリプトで完全に作成されたプロジェクトScriptEchoColorを確認し
ますが、方法を知っていればこれらのスクリプトを任意のディストリビューションにインストールできます(最新のgitからもダウンロードできます)。
次のような短縮色名または拡張色名を使用できます。
echoc "@rRedFg@{/blue}BlueFg@{/GREEN}GreenBg"
サンプル:
また、xtermを(文字だけでなく)それ自体でより広範囲に制御するために、xtermcontrolを必ず確認してください。
多くのANSI CSIコードには、SGRまたはSelect Graphic Renditionと呼ばれるものがあります。これはESC、、[
parameters、m
で、パラメーターはセミコロンで区切られたASCII形式の1つ以上の整数です。多くの異なるSGRパラメーターが上記のウィキペディアのページにリストされています(ただし、すべてのパラメーターの詳細は説明していません)。
1
(太字または輝度増加)や31
(赤のテキスト)などの一部のパラメーターはスタンドアロンであり、標準の赤と太字の赤の前景テキストをそれぞれ、ESC[31m
またはそのESC[1;31m
ように個別に使用するか、組み合わせて使用できます。
他のパラメーターは、パラメーターの後に、セミコロンで区切られた数値としてコードの後に単純に提供されます。したがって、たとえば、ESC[38;5;219m
前景テキストを拡張色番号219でESC[38;2;150;100;50m
表示し、RGB値38
150、100、50 の色で表示します。この場合、「extended set foreground color」コマンドは、常に次のようになります。サブコマンド。サブコマンド2
は、赤、緑、青のコンポーネントの値の3つのパラメーターを取ります。別の方法として、サブコマンド5
はもう1つだけの値を取ります。0〜255の数値は、端末が構成されているテーブルの色を指定します。
次のシェル関数は、これらのコードを使用するのに便利です。
sgr() {
local codes=${1:-0}; shift
for c in "$@"; do codes="$codes;$c"; done
echo -n -e "\e[${codes}m"
}
次のように使用できます。
normal=$(sgr 0)
red=$(sgr 31)
echo "Text can be $(sgr 1)made boldface$(sgr 0)" \
" or ${red}colored red${normal}" \
" or $(sgr 31 1)even both at the same time$(sgr)."
パラメーターを指定しない場合sgr()
、デフォルトはSGRコード0になります。つまり、すべての属性がオフになり、テキストがその端末のデフォルトにリセットされます。
ESC[38
... m
そしてESC[38
... m
缶/べき(情報のソースに依存-究極の1があること、私は、信じてitu.int/rec/T-REC-T.416-199303-Iこと)、を使用する必要がありますそれ以外の場合は、文字予約:
(分離するパラメータ要素をことを)ので、;
唯一の完全な間で使用されるパラメータ文字列 -つまりはESC[38;2;150;100;50m
記述する必要がありますESC[38:2::150:100:50m
...
2
と150
-無一つとして、私が知っていること、これまでに定義されているそこに行くべき値空のデフォルトが使用されるべきである-しかし、それは多くの場合、オフ逃していますまた;
、セパレータとしてのみ使用すると、仕様に従って情報を確実に処理することができなくなります。