色指定ハッシュテーブルを作る
たとえ1色だけの変更でも、コマンドラインの色指定をするには、ハッシュテーブルを作る必要がある。ただし、コマンドライン内で「@{……}」を使って直接指定することは可能だ。
以下の表は、色指定の場合に使うハッシュテーブルのキーである。このそれぞれが構文解析されたコマンドラインの色分けに使われる。
このキーを持つハッシュテーブルに色指定をするわけだが、色指定の方法が複数ある。1つはカラー深度の違いで、ターミナルでは色指定に16色カラー、8bitカラー、24bit RGBカラーの3つの方法がある。
16色カラーは、基本となる8色に対して、輝度を落とした(または上げた)8色を文字色、背景色として使うもの。これに対して、8bitカラーは、256のインデックス値で色指定をする。
24bit RGBカラーは、RGB三原色のそれぞれが8bit値を持つカラー指定。一般に16進数表現の整数値や「#」を頭につけたRGB値、RGB各色の値、3つ組などの指定方法がある。
色を付ける対象は、文字色または背景色の2つ、また、文字には高輝度やイタリックといった文字属性を付加することも可能だ。VTエスケープシーケンスをサポートする端末ソフトウェアは、最低でも16色カラー指定が可能なものがほとんどだ。ただし文字属性に関しては、端末ソフトウェアの仕様に依存する。
具体的な色指定の方法としては、「エスケープシーケンス文字列」「$PSStyleによる指定」「色名による指定」の大きく3種類がある。
最も簡単なのが「色名による指定」で以下の表にある色の名前を使うことで文字色を指定できる。ただし、この方法では背景色を指定することができず、16色カラー以外のカラー深度も利用できない。しかし、簡易でわかりやすい方法だ。
これに対して、「エスケープシーケンス文字列」による指定は、もっとも柔軟性が高く、16色カラー、8bitカラー、24bitカラーのすべてのカラー深度を利用できる。そのほか、文字属性の設定も可能だ。
前述のように、複数のSGRエスケープシーケンスは、1つにまとめることが可能なので記述もコンパクトになる。ただし、コード部分は数値なので、ソフトウェアのドキュメントなどからコードの表を調べる必要がある。Windowsターミナルの場合、以下のURL(https://learn.microsoft.com/ja-jp/windows/console/console-virtual-terminal-sequences#text-formatting)にコードの表がある。
$PSStyleによる指定
色名とエスケープシーケンスの間に位置するのが「$PSStyle」による色指定だ。$PSStyleには、さまざまな文字属性や色定義があり、プロパティやメソッドがエスケープシーケンスを出力できる。必要に応じてこれらを連結していくことで、文字色、背景色、文字属性を定義できる。
$PSStyleには、プロパティ名で指定できる文字色、背景色、文字属性があり、さらに機能ごとに定義された色指定もある。基本的に、プロパティ、メソッドとも、文字列として対応するエスケープシーケンスを出力する。このため、出力を「+」記号で連結することで、複数の指定(たとえば、文字色と背景色)などを指定することが可能だ。
また、RGB値からエスケープシーケンスを出力するメソッドもあるため、文字色、背景色を24bitカラーで指定することも可能だ。しかし、8bitカラーを出力する機能はなく、$PSStyleからは、8bitカラーによる色指定はできない。
以下のリストは、色指定を実際にするコマンドを示すもの。
$ColorSet=@{
Command='DarkRed';
Comment="`e[48;5;40m";
ContinuationPrompt="`e[48;5;218m";
Default='DarkGreen';
Emphasis='Red';
Error='Yellow';
InlinePrediction='DarkYellow';
Keyword='DarkBlue';
ListPrediction="`e[48;5;196m";
ListPredictionSelected="`e[48;5;88m";
ListPredictionTooltip="`e[48;5;63m";
Member='DarkMagenta';
Number='DarkCyan';
Operator='DarkGray';
Parameter='Gray';
Selection='Blue';
String=$PSStyle.Foreground.FromRgb(0xFFFFFF)+$PSStyle.Background.FromRgb(0x0);
Type='Cyan';
Variable='White';
}
Set-PSReadLineOption -Colors $ColorSet
プロファイルなどから設定する場合、あとから修正が可能なように1回ハッシュテーブルを定義して、これを使って色指定をするのがいいだろう。
なお、色指定をリセットする機能はないが、プロファイルを読み込まなければ色指定は変更されない。既定値とカスタマイズ指定を切り替えたいというのであれば、デフォルト値を設定したハッシュテーブルを作っておくといいだろう。
コマンドラインウィンドウでは、暗い背景に明るい文字という組み合わせがよく使われるが、明るい背景も悪くない。色指定を変更できるのなら、背景を自由に切り替えることができる。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ
















