今回は、PowerShellのコマンドラインで使われている構文表示の色指定を変更する方法を解説する。
通常はそのままでも構わないが、ターミナルの背景色などを明るい色にすると、見えづらくなることがある。しかし、その変更が結構面倒なのだ。
現在の設定値は、Get-PSReadLineOptionで得られる。色を変更するには、指定されたキーを持つハッシュテーブルを作り、これをSet-PSReadLineOptionで設定する。色指定にはターミナル標準の16色から8bitカラー、24bit RGBカラーの3種類が利用できるほか、文字属性なども設定が可能だ。
Windowsターミナルの場合、「設定」→「プロファイル」→「既定値」→「外観」→「見分けがつかないテキストの明るさを自動的に調整する」を、「なし」にしないと背景色によっては文字色が正しく表示されないことがある。色が正しく設定されていないと感じたら、この項目をチェックしたほうがいいだろう。
なお、検証は、PowerShell Ver.7.5.0、Windowsターミナル Ver.1.22.11141.0の組み合わせでしている。
色指定を確認する
現在の色指定は、Get-PSReadLineOptionで見ることができる。
コマンド出力の後方にある「CommandColor」から「VariableColor」までが、解析されたコマンドラインの色分けになっている。後述するどのような指定方法を使っても、ここでは、すべてエスケープシーケンスによって「色」(文字色、背景色および文字属性)によって表示される。
このエスケープシーケンスは、SGR(Select Graphic Rendition)と呼ばれ、Escコードと「[」(これをCSIと呼ぶ)から始まり、小文字の「m」で終わる。この間に、数値をセミコロンで区切ったパラメーターが並ぶ。
先頭は必ず属性や色を表すコードで、必要に応じて、RGB値や8bitカラー値などがやはりセミコロンで区切って追加される。なお、複数のコードを同居させることができるため、文字色、背景色、文字属性を1つのSGRシーケンスで表現できる。
なお、エクスケープシーケンス自体は文字列なので、単純な文字列連結によっても複数のコードを指定することが可能だ。
なお、16色カラーの場合、端末側の設定で、色名や色番号はそのままでRGB値を変更することができる。Windowsターミナルでは、この機能をカラースキーマと呼ぶ。

この連載の記事
-
第492回
PC
PowerShellで列挙値を使う -
第491回
PC
最近見かけることが増えた「Markdown」とはそもそも何? -
第490回
PC
WindowsのPowerToysにおけるプレビューハンドラのバグがようやく取れた -
第489回
PC
大きく分けて3種類あるWindowsのライセンス形態 -
第488回
PC
Windowsのサウンド設定をコマンドラインで調べる -
第487回
PC
気づけば随分数が増えているWindowsのファイル属性 -
第486回
PC
Excelがあればなんでもできる -
第485回
PC
Windows Subsystem for Linux(WSL)のソースコードが公開された -
第484回
PC
WindowsのコマンドラインでGrapheme Clusterを正しく扱うには -
第483回
PC
Microsoftが作るコンソールエディタがこの時代に復活 -
第482回
PC
WSL(Windows Subsystem for Linux)向けにFedoraディストリビューション登場 - この連載の一覧へ