Unix 端末は、+ 別のキーに対して 32 未満の ASCII コードを送信しCtrl、"meta" を送信する方法が少なくとも 2 つあります (つまり、コード 27 をプレフィックスとして付加するか、ASCII 文字の上位ビットを設定するかのいずれか)。"super" や Windows ロゴ キー、Mac キーなどの他の修飾キーの使用をエンコードする方法の前例はありますかCmd?
iTerm2 で + 矢印キーをマッピングしたいのですCmdが、どのコードを割り当てればよいかわかりません。すでにOption矢印キーで「meta」のキーを使用しています。
答え1
メタ キーが押されたときに 8 番目のビットを設定するという慣習は、かなり時代遅れであり、現在ではほとんど使用されていません。実際、ASCII 以外の文字をサポートする最新の端末ではまったく使用されていません。また、ESC をプレフィックスとして付ける慣習も、今日では一般的ではありません。
32 個の ASCII 制御文字は確かに ASCII 制御文字 (コード ポイントが 32 未満) として送信されますが、これは Ctrl-@、Ctrl-A から Ctrl-Z、ESC、Ctrl-\、Ctrl-]、Ctrl-^、および Ctrl-_ のみを対象としています。たとえば Ctrl-4 などのその他の文字は ASCII には存在せず、端末経由で送信するための規則はありません。
基本的に、要点は次のとおりです。プレーン文字として送信できないもの (つまり、最新の Unicode 対応端末の Unicode に存在するもの) は、エスケープ シーケンスとして送信する必要があります。エスケープ シーケンスは、有効な端末エミュレーション プロトコルによって定義されます。現在使用されているほぼすべての端末エミュレーション プロトコルは、VT100 から派生したものか、VT100 に類似しており、エスケープ シーケンスは、文字として存在しないキーボード上の一般的なキー (矢印キー、ファンクション キーなど) に使用できます。
VT100 および関連する端末エミュレーション プロトコルには、Shift キーや Control キーなどの標準キーも含めて、修飾キーの押下を伝える規則が含まれていません。tty で実行されるソフトウェアは、Enter キーの押下と Shift キーと Enter キーの押下を区別できません。Enter キーの押下と Control キーと M キーの押下を区別することさえできません。
これらの修飾子シーケンスが端末経由で送信できないという事実は、良いことだと考えられます。たとえば、MacOS 端末アプリケーションは、⌘V キーストロークを tty に送信できないため、独自の使用 (貼り付け) として要求できます。