システム モニターhtop、ncurses アプリケーション ( SGRおよびその他の ANSI/ISO 制御シーケンスを使用) の出力。 | |
| 標準 |
|
|---|---|
| 分類 | ISO/IEC 2022ベースの制御コードと制御シーケンスセット |
| その他の関連エンコーディング |
その他の制御機能規格: |
ANSI エスケープ シーケンスは、ビデオテキスト ターミナルおよびターミナル エミュレーターのカーソル位置、色、フォント スタイル、およびその他のオプションを制御するためのインバンド シグナリングの標準です。ほとんどがASCII エスケープ文字と括弧文字で始まる特定のバイトシーケンスがテキストに埋め込まれます。ターミナルはこれらのシーケンスをテキストとしてではなくコマンドとして解釈し、そのまま表示します。
ANSI シーケンスは、ベンダー固有のシーケンスを置き換えるために 1970 年代に導入され、1980 年代初頭までにコンピュータ機器市場で広く普及しました。21 世紀にはハードウェア テキスト端末はますます少なくなっていますが、大多数の端末エミュレーターとコマンド コンソールが ANSI 標準の少なくとも一部を解釈するため、ANSI 標準の重要性は依然として残っています。
歴史
ビデオ端末のほぼすべてのメーカーは、画面上の任意の位置にカーソルを配置するなどの操作を実行するために、ベンダー固有のエスケープ シーケンスを追加しました。1 つの例はVT52ESC端末で、文字、文字Y、および x,y 位置 + 32 に等しい数値を表す 2 つの文字 (したがって、ASCII スペース文字から始まり、制御文字は回避されます) を送信することで、画面上の x,y 位置にカーソルを配置できます。Hazeltine 1500にも同様の機能があり、 を使用し~、DC1次にコンマで区切られた X 位置と Y 位置を使用して呼び出されます。2 つの端末はこの点で同一の機能を持っていましたが、呼び出すには異なる制御シーケンスを使用する必要がありました。
これらのシーケンスは端末ごとに異なるため、プログラムが同じAPI を使用してどの端末でも動作できるように、 termcap (「端末機能」) などの複雑なライブラリやtputなどのユーティリティを作成する必要がありました。さらに、これらの端末の多くでは、文字のバイナリ値として数字 (行や列など) を送信する必要がありました。一部のプログラミング言語や、内部で ASCII を使用していないシステムでは、数字を正しい文字に変換することが難しい場合がよくありました。
ANSI 規格は、すべての端末が使用するコマンド セットを作成し、すべての数値情報を ASCII 数値として送信することを義務付けることによって、これらの問題に対処しようとしました。このシリーズの最初の規格は、1976 年に採用された ECMA-48 でした。[1]これは、一連の文字コーディング規格の続きであり、最初の規格は1965 年のECMA-6で、これはISO 646 の元となった7 ビット規格です。「ANSI エスケープ シーケンス」という名前は、ANSI がANSI X3.64 を採用した 1979 年にさかのぼります。ANSI X3L2 委員会は、ECMA委員会 TC 1 と協力して、ほぼ同一の規格を作成しました。これらの 2 つの規格は、国際規格 ISO 6429 に統合されました。[1] 1994 年、ANSI は国際規格を支持して、その規格を撤回しました。

これらのシーケンスをサポートする最初の人気ビデオ端末は、1978年に発売されたDigital VT100でした。 [2]このモデルは市場で大成功を収め、さまざまな VT100 クローンが生まれました。その中で最も初期かつ最も人気のあるのは、1979年のはるかに手頃な価格のZenith Z-19でした。 [3] 他には、Qume QVT-108、Televideo TVI-970、Wyse WY-99GT があり、オプションの「VT100」または「VT103」または「ANSI」モードがあり、他の多くのブランドとさまざまなレベルの互換性がありました。これらの人気により、エスケープシーケンスが機能することを前提とするソフトウェア (特に掲示板システムやその他のオンラインサービス) が徐々に増え、ほぼすべての新しい端末とエミュレータプログラムがエスケープシーケンスをサポートするようになりました。
1981年、ANSI X3.64はFIPS出版物86によって米国政府での使用に採用されました。その後、米国政府は業界標準の複製を中止したため、FIPS出版物86は撤回されました。[4]
ECMA-48は数回更新されており、現在は1991年の第5版です。また、ISOおよびIECによってISO/IEC 6429規格として採用されています。[5]バージョンは、 JIS X 0211として日本工業規格として採用されています。
関連する標準には、テレテックス標準のITU T.61や、オープン ドキュメント アーキテクチャ標準のISO/IEC 8613 (主に ISO/IEC 8613-6 または ITU T.416) などがあります。この 2 つのシステムは、コンピュータ端末にとって必ずしも意味のあるものではない拡張機能を含む、多くのエスケープ コードを ANSI システムと共有しています。どちらのシステムもすぐに使用されなくなりましたが、ECMA-48 では、それらで使用される拡張機能を予約済みとしてマークしています。
プラットフォームサポート

1980 年代初頭、大量のソフトウェアがこれらのシーケンスを直接使用して画面表示を更新していました。これには、VMS (DEC 端末を前提としている) 上のすべてのもの、 CP/Mホーム コンピュータに移植できるように設計されたほとんどのソフトウェア、さらには、termcap ライブラリよりも使いやすい多くの Unix ソフトウェア (この記事の以下のシェル スクリプトの例など) も含まれていました。
リモート マシンと通信するためのターミナル エミュレータは、ほとんどの場合、ANSI エスケープ コードを実装します。これには、家庭用およびパーソナル コンピュータの掲示板システムと通信するために作成されたものも含まれます。Unix では、xtermなどのターミナル エミュレータは同じマシンで実行されているソフトウェアと通信できるため、ターミナル エミュレータの下の X11 で実行されるソフトウェアは、これらのシーケンスを記述できると考えられます。
コンピュータが高性能になるにつれ、内蔵ディスプレイもエスケープシーケンスをサポートするようになり、CP/Mシステム間でソフトウェアを移植できるようになりました。エスケープシーケンスを拡張してプリンタをサポートする試みもありました[6]。また、初期のPDFのようなドキュメント保存形式として、オープンドキュメントアーキテクチャがありました。[要出典]
DOS と Windows
1983 年に発表された IBM PC は、画面を更新するためのこれらのエスケープ シーケンスやその他のエスケープ シーケンスをサポートしていませんでした。基盤となる BIOS によって解釈されるのは、いくつかの制御文字( BEL、CR、LF、BS ) だけでした。表示効果は、非常に遅いことで知られる BIOS 呼び出しを使用するか、IBM PC ハードウェアを直接操作して行う必要がありました。このため、興味深いソフトウェアは移植不可能になり、PC クローンでディスプレイ ハードウェアの詳細を複製する必要が生じました。
DOS バージョン 2.0 には、ANSI.SYSというオプションのデバイス ドライバーが含まれていました。パフォーマンスが低く、デフォルトではインストールされなかったため、ソフトウェアがこれを利用することはほとんどありませんでした (まったく利用されなかった場合もあります)。
WindowsコンソールはANSI エスケープ シーケンスをサポートしておらず、Microsoft もそれを有効にする方法を提供していません。JP Software のTCC (旧 4NT)、Michael J. Mefford の ANSI.COM、Jason Hood のANSICON [7]、Maximus5 のConEmuなどの代替品は ANSI エスケープ シーケンスを有効にしました。Python colorama パッケージ[8]やCygwinなどのソフトウェアは、コンソールに送信されたテキストをインプロセスで変更し、ANSI エスケープ シーケンスを抽出して Windows 呼び出しでエミュレートしました。
2016年、マイクロソフトはWindows 10 バージョン1511のアップデートをリリースし、Windowsの登場から30年以上を経て、ANSIエスケープシーケンスのサポートを予期せず実装しました。[9]これはWindows Subsystem for Linuxと並行して行われ、 UnixライクなターミナルベースのソフトウェアがWindowsコンソールを使用できるようにするために行われたようです。Windows PowerShell 5.1ではこれがデフォルトで有効になり、PowerShell 6では必要なESC文字を で文字列に埋め込むことが可能になりました`e。[10]
2019年に導入されたWindowsターミナルは、デフォルトでシーケンスをサポートしており、マイクロソフトはWindowsコンソールをWindowsターミナルに置き換える予定です。[11]
C0 制御コード
ほとんどすべてのユーザーは、一部のシングルバイト文字の機能を想定しています。デフォルトの C0 制御コード セットは、当初は ASCII の一部として定義されていましたが、現在は ISO 6429 (ECMA-48) で定義されており、ANSI エスケープ シーケンスによって呼び出される C1 セットと同じ標準の一部になっています (ただし、ISO 2022では、0x1B が常に ESC である場合、ISO 6429 C0 セットを ISO 6429 C1 セットなしで使用することも、その逆も可能です)。これは、送信されるデータの量を短縮するため、またはエスケープ シーケンスから利用できないいくつかの機能を実行するために使用されます。
エスケープシーケンスの長さは様々です。ANSI準拠のエスケープシーケンスの一般的な形式は、ANSI X3.41(ECMA-35またはISO/IEC 2022に相当)で定義されています。[12] :13.1 エスケープシーケンスは、0x20〜0x7F(すべての非制御ASCII文字)の範囲のバイトのみで構成され、先読みせずに解析できます。制御文字、上位ビットが設定されたバイト、または有効なシーケンスの一部ではないバイトが末尾の前に検出された場合の動作は未定義です。
Feエスケープシーケンス
ESCの後に0x40から0x5Fの範囲のバイトが続く場合、エスケープシーケンスのタイプは ですFe。その解釈は、該当するC1制御コード標準に委任されます。[12] : 13.2.1 したがって、ANSI X3.64 / ECMA-48のC1制御コードに対応するすべてのエスケープシーケンスはこの形式に従います。[5] : 5.3.a
標準では、8ビット環境では、型エスケープシーケンス( C1制御コードFeのセットのもの)に対応する制御機能は、0x80〜0x9Fの範囲の単一バイトとして表現できるとされています。[5] :5.3.b これは、 ISO 8859シリーズなど、ISO 2022で作成された8ビットコードの規定に準拠した文字エンコーディングでは可能です。ただし、 UTF-8やCP-1252などの最新のデバイスで使用される文字エンコーディングでは、それらのコードは他の目的に使用されることが多いため、通常は2バイトシーケンスのみが使用されます。UTF-8の場合、C1制御コードをC1制御およびLatin-1補足ブロックで表すと、異なる2バイトコード(たとえば、U+008Eの場合は0xC2,0x8E)になりますが、この方法ではスペースが節約されません。
制御シーケンスイントロデューサコマンド
制御シーケンスイントロデューサ(CSI)コマンドの場合、ESC [(いくつかのプログラミング言語では\e[またはと表記される)の後に、0x30~0x3F(ASCII )の範囲の「パラメータバイト」が任意数(0バイトを含む)続き、次に0x20~0x2F(ASCIIスペースと)の範囲の「中間バイト」が任意数続き、最後に0x40~0x7E(ASCII)の範囲の「最終バイト」が1つ続きます。[5] : 5.4 \033[0–9:;<=>?!"#$%&'()*+,-./@A–Z[\]^_`a–z{|}~
一般的なシーケンスはすべて、パラメータを のようにセミコロンで区切られた一連の数字として使います1;2;3。[5] : 5.4.2 欠けている数字は として扱われます0(1;;3は真ん中の数字のように動作し0、 にパラメータがない場合はリセットコードESC[mのように動作します0)。一部のシーケンス (CUU など) では、欠けているパラメータを有効活用するために を0として扱います。 [5] : F.4.2 1
端末メーカーが標準に抵触することなく独自のシーケンスを挿入できるように、配列のサブセットが「プライベート」と宣言されました。パラメータ バイト<=>?または最終バイト 0x70~0x7E ( p–z{|}~) を含むシーケンスはプライベートです。
CSI シーケンスに 0x20~0x7E の範囲外の文字が含まれている場合、端末の動作は未定義です。これらの不正な文字は、C0 制御文字 (範囲 0~0x1F)、DEL (0x7F)、または上位ビットが設定されたバイトのいずれかです。可能な応答は、バイトを無視するか、すぐに処理するか、さらに CSI シーケンスを続行するか、すぐに中止するか、残りの部分を無視するかのいずれかです。[引用が必要]
グラフィックレンディションパラメータを選択
Select Graphic Rendition (SGR)と呼ばれる制御シーケンスは、表示属性を設定します。複数の属性を同じシーケンスでセミコロンで区切って設定できます。[21]各表示属性は、次のSGRの発生によってリセットされるまで有効です。[5]コードが指定されていない場合は、 (リセット/通常)として扱われます。
CSI n mCSI mCSI 0 m
色
3ビットと4ビット
元の仕様では 8 色しかなく、名前だけが付けられていました。SGR パラメータ 30 ~ 37 は前景色を選択し、40 ~ 47 は背景色を選択しました。多くの端末では、別のフォントではなく明るい色として「太字」(SGR コード 1) を実装しているため、前景色が 8 色追加されました。通常、これらを背景色として使用することはできませんが、反転表示 (SGR コード 7) ではそれが可能な場合があります。例: 白地に黒の文字を表示するには を使用しESC[30;47m、赤にするには を使用しESC[31m、明るい赤にするには を使用しますESC[1;31m。色をデフォルトにリセットするにはESC[39;49m(一部の端末ではサポートされていません)、または ですべての属性をリセットしますESC[0m。後の端末では、90 ~ 97 および 100 ~ 107 を使用して「明るい」色を直接指定する機能が追加されました。
以下の表は、VGA 標準および最新の端末エミュレータが4 ビットのカラー コードを 24 ビットのカラー コードに変換する方法の例をいくつか示しています。
8ビット
グラフィック カードで256 色のルックアップ テーブルが一般的になるにつれて、定義済みの 256 色のセットから選択するためのエスケープ シーケンスが追加されました。[引用が必要]
ESC[38;5; ⟨n⟩ m 前景色を選択する。nは下の表の数字である。 ESC[48;5; ⟨n⟩ m 背景色を選択 0~7: 標準色(ESC [ 30~37 m の場合) 8- 15: 高輝度色(ESC [90–97 m) 16-231: 6 × 6 × 6 立方体 (216 色): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 232-255: 暗い色から明るい色まで24段階のグレースケール
ITUのT.416情報技術 - オープンドキュメントアーキテクチャ(ODA)および交換フォーマット:文字コンテンツアーキテクチャ[34]では、区切り文字として「:」が使用されています 。
ESC[38:5: ⟨n⟩ m 前景色を選択する。nは下の表の数字である。 ESC[48:5: ⟨n⟩ m 背景色を選択
rxvtおよびに見られるように、同じエスケープ シーケンスを使用した、類似しているが互換性のない 88 色のエンコードもありますxterm-88color。このスキームについては、カラー コード以外はあまり知られていません。4×4×4 のカラー キューブを使用します。
24ビット
16~24ビットカラーの「トゥルーカラー」グラフィックカードが一般的になるにつれ、アプリケーションは24ビットカラーをサポートするようになりました。エスケープシーケンスを使用して24ビットの前景色と背景色を設定できる端末エミュレーターには、Xterm、[13] KDEのKonsole、[35] [36] iTerm、およびGNOME Terminalを含むすべてのlibvteベースの端末[37]などがあります。[38]
ESC[38;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m RGB前景色を選択 ESC[48;2; ⟨r⟩ ; ⟨g⟩ ; ⟨b⟩ m RGB背景色を選択
この構文は、 ITUのT.416オープンドキュメントアーキテクチャ(ODA)と交換フォーマット:文字コンテンツアーキテクチャに基づいていると思われます。 [34]これはISO/IEC 8613-6として採用されましたが、商業的には失敗に終わりました。[要出典] ODAバージョンはより複雑であるため、互換性がありません。
- 「2」の後のパラメータ (r、g、b) はオプションであり、空のままにすることができます。
- 上記のように、セミコロンはコロンに置き換えられます。
- 先頭に「カラースペースID」があります。[13]カラースペースIDの定義はその仕様には含まれていないため、指定されていないデフォルトを表すために空白になる場合があります。CMYKカラー仕様の場合、minttyはカラースペースIDパラメータを、チャネル値が与えられる最大値(例:100または255)を指定するものとして解釈します。[29]
- 48 の後の '2' 値は赤緑青形式を指定する (および上記の '5' は 0-255 のインデックス色) ほかに、実装定義の '0' と透明の '1' という選択肢があるが、どちらもそれ以上のパラメータはない。'3' はシアンマゼンタイエロースキームを使用する色を指定し、'4' はシアンマゼンタイエローブラックスキームを使用する色を指定する。後者はブラックコンポーネントに「未使用」とマークされた位置を使用する: [34]
ESC[38:2: ⟨カラースペースID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨未使用⟩ : ⟨CS許容値⟩ : ⟨許容値に関連付けられたカラースペース: 0 は「CIELUV」、1 は「CIELAB」⟩ m RGB前景色を選択 ESC[48:2: ⟨カラースペースID⟩ : ⟨r⟩ : ⟨g⟩ : ⟨b⟩ : ⟨未使用⟩ : ⟨CS許容値⟩ : ⟨許容値に関連付けられたカラースペース: 0 は「CIELUV」、1 は「CIELAB」⟩ m RGB背景色を選択
ITU-RGBバリエーションはxtermでサポートされており、カラースペースIDと許容値パラメータは無視されます。セミコロンを使用したよりシンプルなスキームは、Konsoleで最初に見つかりました。[13] : 番号で色を設定できますか?
色のサポートに関連する Unix 環境変数
SVr3.2 (1987) で導入された termcap と terminfo のカラーサポートを使用する代わりに、[39] S-Lang ライブラリ (バージョン 0.99-32、1996 年 6 月) は、$COLORTERMターミナルエミュレータがカラーを使用できるかどうかを示す別の環境変数を使用し、後に 24 ビットカラーをサポートしているかどうかを示す値を追加しました。[40] [41]このシステムは十分に文書化されていませんでしたが、Fedora と RHEL では、現在更新されているライブラリを照会するよりもシンプルで汎用的な検出メカニズムとして使用することを検討するほど普及しました。[42]
一部の端末エミュレータ (urxvt、konsole) は、$COLORFGBG端末の配色 (主に明るい背景と暗い背景) を報告するように設定されています。この動作は S-Lang [41]に由来し、vim で使用されています。Gnome-terminal では、値の構文が合意されていないこと、実行時にパレットが変更されても値を変更できないこと、およびより「適切な」xterm OSC 4/10/11 シーケンスがすでに存在することから、この動作の追加を拒否しています。[43]
オペレーティング システム コマンド シーケンス
ほとんどのオペレーティングシステムコマンドシーケンスはXtermによって定義されていますが、他の端末エミュレーターでもサポートされているものが多くあります。歴史的な理由により、Xtermは標準の(0x9Cまたは0x1B 0x5C)BELだけでなく、(0x07)でコマンドを終了することもできます。 [13]たとえば、Xtermではウィンドウタイトルを で設定できます。
STESC ]0;this is the window title BEL
xterm以外の拡張機能としては、ESC ]8;;link ST2017年からVTE [44] [議論]、 iTerm2 [44]、mintty [45]などで使用されているハイパーリンクがあります。[46]
LinuxコンソールはESC ] P n rr gg bbパレットを変更するために使用しますが、これをアプリケーションにハードコードすると、他の端末がハングする可能性があります。[47]ただし、追加はSTLinuxによって無視され、他の端末に対しては適切で無視可能なシーケンスを形成します。[引用が必要]
Fs エスケープシーケンス
の後に0x60〜0x7EESCの範囲のバイトが続く場合、エスケープシーケンスのタイプは です。このタイプは、ISO-IRレジストリに個別に登録された制御機能に使用されます。[48]これらの表はISO/IEC 2022に記載されています。
Fs
Fp エスケープシーケンス
の後に0x30〜0x3FESCの範囲のバイトが続く場合、エスケープシーケンスは最大16個の私的使用制御機能用に設定されたタイプである。[12] :6.5.3 Fp
nF エスケープシーケンス
の後に0x20〜0x2F のESC範囲のバイトが続く場合、エスケープシーケンスのタイプは です。このバイトの後には、この範囲の任意の数の追加バイトが続き、その後に0x30〜0x7Eの範囲のバイトが続きます。これらのエスケープシーケンスは、最初のバイトの下位 2 ビットによってさらにサブカテゴリ化されます (例:最初のバイトが0x22のシーケンスの場合は "type ")。また、最後のバイトが0x30〜0x3F の範囲にあるかどうかによってサブカテゴリ化されます (例: "type ")。これは、私的使用を示します (例: "type ")。[12] : 13.2.1 nF2F2Fp2Ft
シーケンスのほとんどはnFt現在の文字セットを変更するためのもので、ISO/IEC 2022にリストされています。 他にも次のようなシーケンスがあります。
最初のバイトが「#」の場合、公開シーケンスは追加のISO-IR登録個別制御機能用に予約されています。[12] : 6.5.2 現在、そのようなシーケンスは登録されていません。[48]タイプ3Fpシーケンス(「#」で始まるシーケンスを含む)は、私的使用の制御機能に使用できます。[12] : 6.5.3
例
CSI 2 J— これにより画面がクリアされ、一部のデバイスではカーソルが y,x 位置 1,1 (左上隅) に配置されます。
CSI 32 m— これにより、テキストが緑色になります。緑は暗く鈍い緑色になる可能性があるため、CSI 1 m明るい緑色になるシーケンスで太字を有効にするか、 と組み合わせることをお勧めしますCSI 32 ; 1 m。実装によっては、太字状態を使用して文字を明るくします。
CSI 0 ; 6 8 ; "DIR" ; 13 p— これにより、F10 キーがキーボード バッファーに文字列 "DIR" と ENTER を送信するように再割り当てされ、DOS コマンド ラインで現在のディレクトリの内容が表示されます。(MS-DOS ANSI.SYS のみ) これは、ANSI 爆弾に使用されることがありました。これは、非標準の拡張機能を使用して文字列値のパラメーターを含める、私的使用コード (文字 p で示される) です。標準の文字に続いて、シーケンスは文字 D で終了すると見なされます。
CSI s— カーソル位置を保存します。 シーケンスを使用すると、CSI uカーソルを の位置に戻します。現在のカーソル位置が 7(y) と 10(x) であるとします。 シーケンスはCSI sこれら 2 つの数値を保存します。CSI 20 ; 3 Hまたはシーケンスを使用して、20(y) や 3(x) などの別のカーソル位置に移動できますCSI 20 ; 3 f。 ここで、シーケンス CSI u を使用すると、カーソル位置は 7(y) と 10(x) に戻ります。 一部の端末では、より広くサポートされている DEC シーケンスESC 7/ をESC 8代わりに必要とします。
シェルスクリプトでは
ANSI エスケープ コードは、構文の強調表示のためにUNIXおよび UNIX ライクな端末でよく使用されます。たとえば、互換性のある端末では、次のlistコマンドはファイル名とディレクトリ名をタイプ別に色分けします。
ls --色
ユーザーは、スクリプト内でエスケープ コードを標準出力または標準エラーの一部として組み込むことができます。たとえば、次の GNU sedコマンドは、 makeコマンドの出力を装飾し、"WARN" で始まる単語を含む行を反転表示し、"ERR" で始まる単語を含む行を濃い赤の背景に明るい黄色で表示します (大文字と小文字は無視されます)。コードの表現は強調表示されています。[53]
make 2>&1 | sed -e 's/.*\bWARN.*/ \x1b[7m & \x1b[0m /i' -e 's/.*\bERR.*/ \x1b[93;41m & \x1b[0m /i'
次のBash関数は、ユーザーがキーを押すまで、端末をフラッシュします(反転ビデオモードコードと通常ビデオモードコードを交互に送信します)。[54]
flasher () { while true; do printf\\e[?5h \\e[?5l; sleep 0.1; printf; read -s -n1 -t1 && break; done; }
これは、長いコマンドが終了したときにプログラマーに警告するために使用できますmake ; flasher 。[55]
printf \\ 033c
これは、最新の Linux システムのコマンドと同様にコンソールをリセットしますresetが、古い Linux システムや他の (Linux 以外の) UNIX バリアントでも機能するはずです。
C言語
次のプログラムは、0 から 109 までの数字のテーブルを作成します。各数字は、その数字をグラフィック レンディション コードとして使用し、Select Graphic Rendition エスケープ シーケンスで指定された形式で表示されます。

#include <stdio.h>
int main ( void )
{
整数i , j , n ;
( i = 0 ; i < 11 ; i ++ )の場合{
( j = 0 ; j < 10 ; j ++ )の場合{
n = 10 * i + j ;
( n > 108 )の場合、中断します。
printf ( " \033 [%dm %3d \033 [m" , n , n );
}
printf ( " \n " );
}
0 を返します。
}
端末入力シーケンス
キーボードの特殊キーを押すと、多くの xterm CSI、DCS、または OSC シーケンスが出力されるだけでなく、多くの場合、CSI、DCS、または OSC シーケンスが生成され、ユーザーが入力したかのように端末からコンピューターに送信されます。
端末で入力する場合、通常のメインの英数字キーボード領域外でのキー押下は、ANSI シーケンスとしてホストに送信されることがあります。カーソル キーなど、同等の出力機能を持つキーの場合、多くの場合、出力シーケンスが反映されます。ただし、ほとんどのキー押下には、使用できる同等の出力シーケンスはありません。
エンコード方式は複数ありますが、残念ながらほとんどの端末では異なる方式のシーケンスが混在しているため、ホスト ソフトウェアはどの方式を使用しても入力シーケンスを処理できる必要があります。さらに複雑なことに、VT 端末自体には、アプリケーションで切り替え可能な通常モードとアプリケーション モードという 2 つの入力方式があります。
(草稿部分)
<文字> -> 文字
<esc> <nochar> -> esc
<esc> <esc> -> esc
<esc> <char> -> Alt キーまたはキーコードシーケンス
<esc> '[' <nochar> -> Alt-[
<esc> '[' (<modifier>) <char> -> キーコードシーケンス、<modifier> は 10 進数で、デフォルトは 1 (xterm)
<esc> '[' (<keycode>) (';'<modifier>) '~' -> キーコードシーケンス、<keycode> と <modifier> は 10 進数で、デフォルトは 1 (vt) です。
終了文字が '~' の場合、最初の数字は必ず存在し、キーコード番号です。2 番目の数字はオプションの修飾子値です。終了文字が文字の場合、文字はキーコード値であり、オプションの数字は修飾子値です。
修飾子の値はデフォルトで 1 に設定され、1 を減算すると、押された修飾子キーのビットマップ ( Meta+ Ctrl+ Alt+ )になります⇧ Shift。つまり、たとえば、<esc>[4;2~は
+ 、はファンクション キー、は+ となります。
⇧ ShiftEnd<esc>[20~F9<esc>[5CCtrl→
つまり、修飾子は次の数値の合計です。
vtシーケンス: <esc>[1~ - ホーム <esc>[16~ - <esc>[31~ - F17] <esc>[2~ - 挿入 <esc>[17~ - F6 <esc>[32~ - F18 <esc>[3~ - 削除 <esc>[18~ - F7 <esc>[33~ - F19] <esc>[4~ - 終了 <esc>[19~ - F8 <esc>[34~ - F20] <esc>[5~ - PgUp <esc>[20~ - F9 <esc>[35~ - <esc>[6~ - ページダウン <esc>[21~ - F10 <esc>[7~ - ホーム <esc>[22~ - <esc>[8~ - 終了 <esc>[23~ - F11 <esc>[9~ - <esc>[24~ - F12 <esc>[10~ - F0 <esc>[25~ - F13] <esc>[11~ - F1 <esc>[26~ - F14] <esc>[12~ - F2 <esc>[27~ - <esc>[13~ - F3 <esc>[28~ - F15] <esc>[14~ - F4 <esc>[29~ - F16 <esc>[15~ - F5 <esc>[30~ - xterm シーケンス: <esc>[A - 上 <esc>[K - <esc>[U - <esc>[B - 下 <esc>[L - <esc>[V - <esc>[C - 右 <esc>[M - <esc>[W - <esc>[D - 左 <esc>[N - <esc>[X - <esc>[E - <esc>[O - <esc>[Y - <esc>[F - 終了 <esc>[1P - F1 <esc>[Z - <esc>[G - キーパッド 5 <esc>[1Q - F2 <esc>[H - ホーム <esc>[1R - F3 <esc>[I - <esc>[1S - F4 <esc>[J - <esc>[T -
<esc>[Aは<esc>[DANSI出力シーケンスと同じです。 は<modifier>通常、修飾キーが押されていない場合は省略されますが、ほとんどの実装では常に を出力します<modifier>。(ドラフトセクション)
F1F4
Xtermには、DECのVT端末やエミュレートする他のさまざまな端末のさまざまなファンクションキーとマウス入力シーケンススキームに関する包括的なドキュメントページがあります。[13] Thomas Dickeyは時間をかけてこれに多くのサポートを追加してきました。[56]彼は比較のために他の端末エミュレータで使用されるデフォルトキーのリストも管理しています。[57]
- Linux コンソールでは、特定のファンクション キーが という形式のシーケンスを生成します。CSI シーケンスは で終了する必要があります。
CSI [ char[ - 古いバージョンのTerminatorでは、修飾キーとともに–が押されると、次のエラーが発生します。この不具合はGNOME Terminalからコピーされたものです。[引用が必要]
SS3 1; modifiers charF1F4 - xterm は、カーソル位置を尋ねられた場合や、キーが修飾子とともに押された場合に応答しますが、 の場合、これらの修飾子は衝突します。 これは、 として?プライベート修飾子を使用することで回避でき、応答では として反映されます。
CSI row ; column RCSI 1 ; modifiers RF3row == 1CSI ? 6 nCSI ? row ; column R - 多くの端末では、Alt キーを押しながら入力された文字の前に文字が追加されます。これにより、C1 コードを形成する
ESC大文字と記号があいまいになります。 [説明が必要]@[\]^_ - Konsole は、修飾子とともに–が押されたときに生成します。[説明が必要]
SS3 modifiers charF1F4 - iTerm2は拡張CSI uモードを介して追加キーの報告をサポートしています。[58]
参照
注記
- ^ PC を起動してテキスト モードにしたときに使用される一般的な色。16 エントリのカラー テーブルを使用します。EGA/VGA グラフィック モードでは色が異なります。
- ^ Windows XP から Windows 8.1 までで見られる
- ^ PowerShellのデフォルトのショートカット.lnkは、10年以上変更されておらず、黄色とマゼンタを再マッピングして、コマンドプロンプトと比較してPowerShellに独特の前景色と背景色を与えています。[30] PowerShell 7は影響を受けません。
- ^ デバッグ コンソール、「Dark+」テーマ
- ^ Campbell テーマ、Windows 10 バージョン 1709 以降で使用されています。
- ^ 仮想端末の場合は、/etc/vtrgb から。
- ^ DOS上で動作するANSI.SYSなどのCGA互換ハードウェアベースの端末では、この通常の強度の前景色はオレンジ色としてレンダリングされます。CGA RGBIモニターには、緑の成分を減らすことで暗い黄色をオレンジ/茶色に変更するハードウェアが含まれていました[31]
参考文献
- ^ ab 「標準 ECMA-48: 文字イメージング I/O デバイスの制御機能」(PDF) (第 2 版)。Ecma International。1979年 8 月。簡単な歴史。
- ^ Williams, Paul (2006). 「Digital のビデオ端末」. VT100.net . 2011 年8 月 17 日閲覧。
- ^ Heathkit Company (1979). 「Heathkit Catalog 1979」. Heathkit Company. 2012年1月13日時点のオリジナルよりアーカイブ。 2011年11月4日閲覧。
- ^ 「撤回されたFIPSリスト番号」(PDF)。米国国立標準技術研究所。2016年12月15日。 2022年1月2日閲覧。
- ^ abcdefghijklmnop 「標準 ECMA-48: コード化文字セットの制御関数」(PDF) (第 5 版)。Ecma International。1991年 6 月。
- ^ 「Amiga プリンターコマンド定義」。Commodore。2013年7 月 10 日閲覧。
- ^ Hood, Jason (2005). 「Windows コンソール プログラムの ANSI エスケープ シーケンスを処理する」. Jason Hood のホームページ. 2013 年5 月 9 日閲覧。
- ^ "colorama · PyPI". Python パッケージ インデックス。2022年2 月 27 日閲覧。
- ^ bitcrazed. 「コンソール仮想ターミナル シーケンス - Windows コンソール」. docs.microsoft.com . 2018 年5 月 30 日閲覧。
- ^ 「PowerShell ヘルプ: 特殊文字について」。2023 年 1 月 12 日。
- ^ 「Windows コンソールおよびターミナル エコシステムのロードマップ」。Microsoft。2018 年。2021 年3 月 13 日閲覧。
これには、従来のコンソール ホスト ユーザー インターフェイスを既定の位置から廃止し、Windows ターミナル、ConPTY、および仮想ターミナル シーケンスを採用することが含まれます。
- ^ abcdefghi 「標準 ECMA-35: 文字コード構造および拡張テクニック」(PDF) (第 6 版)。Ecma International。1994年。
- ^ abcdefghijklmn Moy, Edward; Gildea, Stephen; Dickey, Thomas (2019). 「XTerm 制御シーケンス (ctlseqs)」. Invisible Island .
- ^ Frank da Cruz、Christine Gianone (1997)。C-Kermit の使用。Digital Press。p. 278。ISBN 978-1-55558-164-0。
- ^ 「SCOSC—現在のカーソル位置を保存」。VT510ビデオ端末プログラマ情報。12月。
- ^ 「DECSLRM—左余白と右余白の設定」。VT510ビデオ端末プログラマ情報。DEC 。
- ^ 「SCORC—保存されたカーソル位置の復元」。VT510ビデオ端末プログラマ情報。12月。
- ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. 「XTerm Control Sequences」。CSI を使用する関数、最終文字順に並べられています。2022年2 月 4 日閲覧。
- ^ Conrad Irwin (2013 年 4 月). 「括弧付き貼り付けモード」. cirw.in .
- ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas. 「XTerm Control Sequences」. 括弧付き貼り付けモード. 2022年2月4日閲覧。
- ^ 「console_codes(4) - Linuxマニュアルページ」man7.org . 2018年3月23日閲覧。
- ^ ab "screen(HW)". SCO OpenServerリリース5.0.7マニュアル。2003年2月11日。
- ^ 「バグ 791596 – faint (SGR 2) についての考察」。bugzilla.gnome.org。
- ^ abc 「カーリーと色付きの下線 (#6382) · Issues · George Nachman / iterm2」。GitLab。2017年12月11日。
- ^ abc 「xterm プロトコルの拡張」。kitty ドキュメント。 2020 年7 月 1 日閲覧。
- ^ 「カールした色付きの下線」KDEバグトラッカー。2022年8月27日。
- ^ 「console-termio-realizer」. jdebp.uk .
- ^ "console_codes(4)". Linuxプログラマーズマニュアル. 5.10. Linux man-pagesプロジェクト.
- ^ abc 「mintty/mintty: テキスト属性とレンダリング」。GitHub。
- ^ 「Windows の既定のショートカットは ANSI カラー 35,36 を再マップします · 問題 #4266 · PowerShell/PowerShell」。GitHub。2022年12月 21 日閲覧。
- ^ 「IBM 5153の真のCGAパレットとカラー出力」VileR. 2022年6月11日。 2024年5月18日閲覧。
- ^ 2004 年 7 月の 0, 0, 205 から変更されました"Patch #192 – 2004/7/12 – XFree86 4.4.99.9"。
- ^ 2004 年 7 月の 0, 0, 255 から変更されました。「パッチ #192 – 2004/7/12 – XFree86 4.4.99.9」。
- ^ abc 「T.416 情報技術 - オープン ドキュメント アーキテクチャ (ODA) および交換フォーマット: 文字コンテンツ アーキテクチャ」。
- ^ 「color-spaces.pl (1999-07-11 日付の xterm の 256colors2.pl のコピー)」KDE。2006 年 12 月 6 日。[永久リンク切れ ]
- ^ “README.moreColors”. KDE。 2010 年 4 月 22 日。
- ^ 「libvte のバグレポートとパッチ: 1600 万色のサポート」GNOME Bugzilla。2014 年 4 月 4 日。2016 年6 月 5 日閲覧。
- ^ 「Gnome ターミナルで 24 ビットの True Color サポートを有効にする方法」。
- ^ 「履歴」。curs_color(3X) - curses を使用して端末の色を操作します。
- ^ 「Midnight Commander: lib/tty/color-slang.c」. Fossies .
- ^ ab Dickey, Thomas E. (2017). 「NCURSES — S-Lang に関するコメント」. invisible-island.net .
- ^ 「Features/256 Color Terminals - Fedora Project Wiki」。Fedora Project。2012年10月4日時点のオリジナルよりアーカイブ。
- ^ 「バグ 733423 – 自動カラー検出のために COLORFGBG 環境変数を設定してください」。bugzilla.gnome.org。
- ^ ab Koblinger、Egmont。「ターミナル エミュレーターのハイパーリンク (別名 HTML のようなアンカー)」。GitHub Gists。
- ^ 「mintty/mintty: 制御シーケンス」。GitHub。
- ^ Koblinger、Egmont。「ターミナル エミュレーターでの OSC 8 の採用」。GitHub。
- ^ 「console_codes — Linux コンソールのエスケープ シーケンスと制御シーケンス」。Linuxプログラマーズ マニュアル。
- ^ ab ISO-IR: エスケープシーケンスで使用されるコード化文字セットの ISO/IEC 国際登録簿(PDF) . ITSCJ/ IPSJ . 2023 年5 月 12 日閲覧。
- ^ ab Digital . 「DECSC—カーソルの保存」。VT510ビデオ端末プログラマ情報。
- ^ ab ANSI エスケープシーケンス - VT100 / VT52、2009年2月27日時点のオリジナルよりアーカイブ、2020年8月21日閲覧。
- ^ Digital . 「DECSWL - シングル幅、シングル高さのライン」。VT510ビデオ端末プログラマ情報。
- ^ Digital . 「DECDWL - ダブル幅、シングルハイト ライン」。VT510ビデオ端末プログラマ情報。
- ^ 「第9章 システムのヒント」debian.org。
- ^ 「VT100.net: Digital VT100 User Guide」 。 2015年1月19日閲覧。
- ^ 「bash – コマンドが完了したときに通知を受け取る方法 – Ask Different」 。2015年1 月 19 日閲覧。
- ^ Dickey, Thomas. 「XTerm FAQ: コントロールをカウントしてバージョンを比較する」。Invisible Island 。 2020年1月25日閲覧。
- ^ Dickey, Thomas (2016). 「XTerm およびその他のターミナルエミュレーターのファンクションキー一覧」Invisible Island . 2020 年1 月 25 日閲覧。
- ^ 「CSI u - ドキュメント - iTerm2 - macOS ターミナル代替」。iTerm2 。 2023年8月15日閲覧。
外部リンク
- 標準 ECMA-48、コード化文字セットの制御機能 (第 5 版、1991 年 6 月)、欧州コンピュータ製造業者協会、ジュネーブ 1991 (ISO および IEC によって標準 ISO/IEC 6429 としても発行)
- vt100.net DEC ドキュメント
- 「ANSI.SYS - ansi 端末エミュレーション エスケープ シーケンス」。2006 年 2 月 6 日時点のオリジナルからアーカイブ。2007年2 月 22 日に取得。
- Xterm / エスケープシーケンス
- AIXterm / エスケープシーケンス
- ECMA-48 およびその仲間に漠然と準拠している端末用のエスケープ シーケンスのコレクション。
- 「ANSI エスケープ シーケンス」。2011 年 5 月 25 日時点のオリジナルよりアーカイブ。
- ITU-T勧告T.416(03/93)情報技術 - オープンドキュメントアーキテクチャ(ODA)および交換フォーマット:文字コンテンツアーキテクチャ
