昔は TERMCAP/TERMINFO でターミナルで使うべき制御コードが得られた。現在の端末はほぼ VT100 互換なので、その役割は薄れている。
一方、まだ自動では判別できない端末情報があり、一部のライブラリ・アプリケーションは次の環境変数からそれを取得している。
$RUNEWIDTH_EASTASIAN
Unicode の 「曖昧幅 (Ambiguous Width)」文字を、2セル幅として扱うか1セル幅として扱うかを指定する。
| $RUNEWIDTH_EASTASIAN | 意味 |
|---|---|
"1" |
2セル幅 |
"1" 以外の1文字以上 |
1セル幅 |
未定義もしくは "" |
指定なし |
- mattn/go-runewidth: wcwidth for golang
- Go言語でデファクトスタンダートの、文字の幅を算出するパッケージ
$NO_COLOR
色付きターミナル出力を無効化する指定
| $NO_COLOR | 意味 |
|---|---|
未定義もしくは "" |
指定なし |
| 1文字以上指定 | 無効化する |
- NO_COLOR: disabling ANSI color output by default
- NO_COLOR 標準が実装上の課題に直面、開発者間で適用範囲と有効性について議論が続く - BigGo ニュース
$COLORFGBG
「文字色:背景色」という値が GNOME Terminal や Konsole など、一部の X11 端末で自動設定される場合がある。例:
COLORFGBG="15;0"- 前景=白 (15), 背景=黒 (0)COLORFGBG="0;15"- 前景=黒 (0), 背景=白 (15)
ただし、普通に端末のデフォルトの前景色、背景色を使うだけならば、ESC[39m や ESC[49m を使えばよいので、前景色・背景色以外の色を決める時の参考情報くらいしか使えない。
端末種類を判別する環境変数
- VSCODE_PID - 定義されていたら Visual Studio Code 内シェル
- WT_SESSION とWT_PROFILE_ID - 定義されていたら Windows Terminal
- TERM_PROGRAM -
WezTermなら WezTerm - TERMINAL_NAME -
contourなら contour