ターミナルとの互換性

fish はターミナルに対してさまざまな制御シーケンスを書き込みます。基本的な機能を有効にするために実装が必須なものもあれば、オプション機能を有効にするためのもので、ターミナル側で無視されてもよいものもあります。

ターミナルは、Control Sequence Introducer (CSI) コマンド、Operating System Commands (OSC)、および オプションで Device Control Strings (DCS) を解析できる必要があります。これらは ECMA-48 で定義されています。有効な CSI、OSC、または DCS シーケンスであっても、ターミナルに実装されていないコマンドを表す場合は、ターミナルはそれを無視しなければなりません。歴史的な理由により、OSC シーケンスは \e\\ の代わりに \x07 で終了する場合があります。

制御シーケンスは fish 風の構文で記述されています。 \ 以外の特殊文字はエスケープされません。スペースは可読性のために追加されているだけで、シーケンスの一部ではありません。プレースホルダーは、数値の場合は Ps 、任意の表示可能文字列の場合は Pt と表記されます。

注意: fish はシステムの terminfo データベースに依存しません。このドキュメントに含まれる terminfo (TI) コードは、参照用としてのみ記載されています。

必須コマンド

シーケンス

TI

説明

\r

なし

カーソルを行頭へ移動する

\n

cud1

カーソルを 1 行下へ移動する。

\e[ Ps A

cuu

カーソルを Ps 行上へ移動する(パラメータがない場合は 1 行)。

\e[ Ps C

cuf

カーソルを Ps 列右へ移動する(パラメータがない場合は 1 列)。

\x08

cub1

カーソルを 1 列左へ移動する。

\e[ Ps D

cub

カーソルを Ps 回左へ移動する。

\e[H

cup

カーソル位置を設定する(パラメータがない場合は 1 行 1 列へ移動)。

\e[K

el

行末までを消去する。

\e[J

ed

画面末尾までを消去する。

\e[2J

clear

画面全体を消去する。

\e[0c

プライマリ・デバイス属性(Primary Device Attribute)をリクエストします。ターミナルは、 ? パラメータバイトで始まり(つまり \e[? で始まるシーケンス)、末尾のバイトが c である CSI コマンドを返さなければなりません。

これが実装されていない場合、起動時にわずかな一時停止が発生し、その後に警告が表示されます。当面の間、これらはいずれも query-terminal 機能フラグ(feature flag) をオフにすることで無効化できます。

なし

am

画面幅に合わせてテキストを自動的に折り返す(ソフトラップ)。

なし

xenl

最終列に文字を出力しても、カーソルが次の行へ移動しません。 printf %0"$COLUMNS"d 0; sleep 3 を実行することでこれを確認できます。

オプションのコマンド

シーケンス

TI

説明

\t

it

カーソルを次のタブストップ(8 列ごと)へ移動します。これは主に、プロンプトにタブが含まれている場合に関係します。

\e[m

sgr0

太字、薄字、イタリック、下線、打ち消し線、反転といった属性モードをオフにし、デフォルトの色を選択します。

\e[1m

bold

太字モードに入ります。

\e[2m

dim

薄暗い(dim)モードに入ります。

\e[3m

sitm

イタリック(斜体)モードに入ります。

\e[4m

smul

下線モードに入ります。

\e[4:2m

Su

二重下線モードに入ります。

\e[4:3m

Su

波状下線モードに入ります。

\e[4:4m

Su

点線下線モードに入ります。

\e[4:5m

Su

破線下線モードに入ります。

\e[7m

rev

反転表示モード(前景色と背景色を入れ替える)に入ります。

\e[9m

smxx

取り消し線モードに入ります。

\e[23m

ritm

イタリック(斜体)モードを終了します。

\e[24m

rmul

下線モードを終了します。

\e[29m

rmxx

取り消し線モードを終了します。

\e[38;5; Ps m

setaf

256色パレットから前景色 Ps を選択します。

\e[48;5; Ps m

setab

256色パレットから背景色 Ps を選択します。

\e[58:5: Ps m (Note: セミコロンではなくコロン)

Su

256色パレットから下線の色 Ps を選択します。

\e[ Ps m

setaf setab

前景色/背景色を選択します。これは、パラメータが含まれる範囲に基づいて、前述の256色パレット内の色を使用します。30-37は前景色0-7、40-47は背景色0-7、90-97は前景色8-15、100-107は背景色8-15に対応します。

\e[38;2; Ps ; Ps ; Ps m

24ビットRGBカラーから前景色を選択します。

\e[48;2; Ps ; Ps ; Ps m

24ビットRGBカラーから背景色を選択します。

\e[39m

ターミナルの前景色をデフォルトに戻します。

\e[49m

背景色をターミナルのデフォルトに戻します。

\e[58:2:: Ps : Ps : Ps m (Note: セミコロンではなくコロン)

Su

24ビットRGBカラーから下線の色を選択します。

\e[59m

Su

下線の色をデフォルト(前景色に従う)に戻します。

\e[ Ps S

indn

コンテンツ(ビューポートではなく)を Ps 行分上にスクロールします(ECMA-48では SCROLL UP / SU 、terminfoでは "scroll forward" と呼ばれます)。fishがこの機能のサポートを検出すると、status test-terminal-features scroll-content-up は0を返し、これにより ctrl-l バインドが scrollback-push 特殊入力関数を使用できるようになります。

\e[= Ps u, \e[? Ps u

なし

kitty キーボードプロトコルを有効にします。

\e[6n

なし

カーソル位置のレポートを要求します。レスポンスは \e[ Ps ; Ps R の形式である必要があり、最初のパラメータは行番号、2番目のパラメータは列番号です。どちらも1から始まります。

これは、画面の下端で複数行のオートサジェスチョン(自動提案)を切り詰めるために、scrollback-push 特殊入力関数や、OSC 133 click_events 機能を実装しているターミナル内部で使用されます。

\e[ \x20 q

Se

カーソルのスタイルをターミナルのデフォルトにリセットします。現時点では使用されていませんが、将来的に使用される可能性があります。

\e[ Ps \x20 q

Ss

カーソルのスタイルを設定します (DECSCUSR)。Ps が 2 の場合はブロック、4 の場合は下線、6 の場合は垂直線の形状になります。

\e[ Ps q

なし

ターミナルの名称とバージョンを要求します (XTVERSION)。これは、互換性のないターミナルに対する一時的な回避策(ワークアラウンド)としてのみ使用されます。

\e[?25h

cvvis

カーソルの表示を有効にします (DECTCEM)。

\e[?1004h

なし

フォーカスレポートを有効にします。

\e[?1004l

なし

フォーカスレポートを無効にします。

\e[?1049h

なし

代替画面バッファを有効にします。

\e[?1049l

なし

代替画面バッファを無効にします。

\e[?2004h

ブラケット付きペースト(bracketed paste)を有効にします。

\e[?2004l

ブラケット付きペースト(bracketed paste)を無効にします。

\e[?2031h

非要請の`カラーテーマレポート <https://contour-terminal.org/vt-extensions/color-palette-update-notifications/>`_を有効にします。有効にすると、ターミナルはカラーテーマが変更されるたびに \e[?997;1n\e[?997;2n を送信するようになります。これにより、fishは 背景色 の問い合わせを行います。

\e[?2031l

非要請のカラーテーマレポートを無効にします。

\e]0; Pt \e\\

ts

ターミナルウィンドウのタイトルを設定します (OSC 0)。 fish_title で使用されます。

\e]2; Pt \e\\

ts

ターミナルのタブタイトルを設定します (OSC 1)。 fish_tab_title で使用されます。

\e]7;file:// Pt / Pt \e\\

作業ディレクトリを報告します (OSC 7)。ターミナルが(リモート)シェルのあるシステムとは別のシステムで動作している可能性があるため、ホスト名(最初のパラメータ)は localhost には*なりません*。

\e]8;; Pt \e\\

ハイパーリンク (OSC 8) を作成します。これはfishのmanページで使用されています。

\e]11;?\e\\

なし

背景色を問い合わせます。

有効なレスポンスの形式は \e]11;rgb: Pt / Pt / Pt \e\\\e]11;rgba: Pt / Pt / Pt / Pt\e\\ です。最初の3つのパラメータは、それぞれ1〜4桁の16進数で構成され、赤・青・緑の成分を表します。

これは fish_terminal_color_theme に値を格納するために使用され、ターミナルのカラーテーマに最適化された テーマバリアント を選択するために利用されます。

\e]52;c; Pt \e\\

クリップボードへコピーします (OSC 52)。 fish_clipboard_copy で使用されます。

\e]133;A; click_events=1\e\\

kittyの click_events 拡張機能を用いてプロンプトの開始をマークします (OSC 133)。click_events 拡張機能により、 カーソル位置のレポート が利用可能であることを前提として、マウスクリックによるカーソル移動やページャ項目の選択が可能になります。

\e]133;B\e\\

プロンプトの終了をマークします (OSC 133)。

\e]133;C; cmdline_url= Pt \e\\

kittyの cmdline_url 拡張機能を用いてコマンドの開始をマークします (OSC 133)。パラメータはURLエンコードされたコマンドラインです。

\e]133;D; Ps \e\\

コマンドの終了をマークします (OSC 133)。 Ps は終了ステータスです。

\eP+q Pt \e\\

terminfoケーパビリティを要求します (XTGETTCAP)。パラメータは、16進エンコードされたterminfoコードです。

レスポンスは \eP1+q Pt \e\\ (boolean) 、 \eP1+q Pt = Pt \e\\ (string) の形式である必要があります。どちらの場合も、最初のパラメータはリクエストパラメータと同じでなければなりません。

fishは以下の文字列ケーパビリティを照会します。

  • indn

    レスポンスの2番目のパラメータは無視されます。

  • query-os-name (status terminal-os 用)

    Unix上で動作しているターミナルは、2番目のパラメータとして $(uname -s) を16進エンコードしたものを返すべきです。

DCSコマンドとGNU screen

DCSコマンドを印刷する前にfishが一時的に代替画面に切り替えるため、DCSの解析は任意(オプショナル)です。しかし、GNU screenはデフォルトで代替画面バッファを有効にすることを許可しておらず、DCSコマンドを互換性のある方法で扱わないため、fishの初期プロンプトが +q696e646e のようなDCSペイロードによって文字化けする可能性があります。当面の間、fishは STY 環境変数の存在をチェックすることでこれを回避しています。何らかの理由でそれが機能しない場合は、 ~/.screenrc に以下を追加してください。

altscreen on

または、 config.fish に以下を追加してください。

function GNU-screen-workaround --on-event fish_prompt
    commandline -f repaint
    functions --erase GNU-screen-workaround
end

Unicodeコードポイント

デフォルトでは、fishは以下の非ASCII文字を出力します。

×       μ         

また、制御文字記号(U+2400からU+241F)、および 翻訳された文字列 内のロケール固有の文字も出力されます。