XKB - 矢印キーを再マップし、テキストを選択するためのシフト動作を維持します

XKB - 矢印キーを再マップし、テキストを選択するためのシフト動作を維持します

矢印キーの再マッピングは古くからある問題だとは思いますが、通常の矢印キーと同じように、SHIFT + 再マッピングされたキーでテキストを選択できるような良い解決策が見つからないようです。

例えば、Caps LockをISO_Level3_Shiftに再マッピングし、xkb_symbolsを次のように設定すると、

key <AC08>  { [         k,          K , Down, Down] };

または

key <AC08>  { type="THREE_LEVEL",
              [         k,          K , Down ]  };

Shift + CapsLock + K を押すと、CapsLock + K とまったく同じように動作します (Shift + Down は、Down 単独の場合とは異なる動作をします)。

より高レベルのマクロ ユーティリティを使用してキーボード イベントを生成すると、多少は成功しました (つまり、Shift キーと矢印キーの両方の押下を生成します)。ただし、このアプローチにはさまざまな問題があります。シミュレートされたキー押下に対する UI の応答は、多くの場合、「実際の」キー押下とは異なっており、パフォーマンスの問題もあります。処理できる速度よりも速く入力できます。

要約: X の下に再マップされた矢印キーを使用して Shift キーを押しながら選択するにはどうすればよいでしょうか?

答え1

そのために次のコードを使用できますpreserve。型定義(例THREE_LEVEL)に次の行を追加します。

preserve[LevelThree+Shift] = Shift;

これは、 の場合に、修飾子の組み合わせから適切なレベルを判断するときに、シフト修飾子を保持するように xkb に指示します。LevelThree + Shiftシフト修飾子は、ツールキットまたはアプリケーションで使用するために渡されます (こちらも参照してください:型で保存を使用する)。

これは、例えばアプリケーションがキーストロークの組み合わせを解釈する方法に影響することに注意してください。上記の保存と

key <AC08> { type="THREE_LEVEL", [ k, K, kappa ]  };

を押すと、Shift 修飾子が保持され、アプリケーションに渡されるため、Ctrl + Shift + LevelThree + <AC08>アプリケーションはそれをCtrl + Shift + kappa(通常の ではなく) キーの組み合わせとして読み取ります。Ctrl + kappa

関連情報