マルチバイトエスケープシーケンスの最大長は何ですか?

マルチバイトエスケープシーケンスの最大長は何ですか?
  • ESC送ってください。\x1bはい1バイト:実際のエスケープ文字です。

  • Page Up送ってください。\x1b[Hはい3バイト

  • F2送ってください。\x1b[OQはい4バイト

  • F5送ってください。\x1b[15~はい5バイト

そのうちの1つの最大長はいくらですか?これはどこかに文書化されていますか?

答え1

事前定義された長さ制限なし制御シーケンス。 OPは、例として送られたいくつかの文字列を提供しました。特殊キー、記録済みXTerm制御シーケンス

xterm は、修飾子コードが次のように追加される可能性のあるキーコードのリストから始まります。AltキーとMetaキー部分。長さチャートはありません。このタスクの1つの複雑な問題は、何千もの可能なキーボード配列を作成するために連携して動作する複数のリソース設定があることです。これらすべてを説明する代わりに、xterm端末記述は、ユーザー定義関数を含む一連のterminfoビルディングブロック(名前に「+」を含む)として表示されます。修正済みキー(例えばcontrolshiftなど)。

  • これxtermの用語情報ページにはこれらの項目が一覧表示されます(スクリプトとして生成されます)。
  • ビルディングブロックのサイズは、ほとんどの実装で想定されるコンパイルされたterminfoの4096バイト制限に合わせて制限されます。
  • 呪い端末データベースこれらのビルディングブロックのサブセットがリストされます。
  • それも記録するカスタマイズ機能xtermエントリで使用されるキーは、文書化されたキーよりも多くの可能なキーがあることに注意してください。

いくつかの他の端末はxtermスキームを実装していますが、特定の組み合わせでのみ実装されています。だから、これらを列挙するのは簡単です。ある意味、「事前定義」されています。

ただし、特殊キーが唯一の制御シーケンスタイプではありません。 ECMA-48形式を使用するこれらの端末は、ホストから送信された制御シーケンスを受け入れます。通常、数値または文字列引数を受け入れます。

  • xterm は 65535 より大きい数値を無視するので、これを数値の制限として考えることができます。数字(ただし、端末によって異なります。)
  • 制御シーケンスには数値パラメータをいくらでも含めることができます。たとえば、xtermは256色のパレットの256色のそれぞれを変更する制御シーケンスを許可します。これは数キロバイトです(上限は推定可能です)。制御シーケンスパーサはいつでも複数の数字を必要としません。
  • 文字列パラメータの長さには事前定義された制限はありません(たとえば、ウィンドウのタイトル設定)。

同様に、他の端末エミュレータでは、許容される制御シーケンスの長さに対して独自の制限を使用することができる。

関連情報