web-dev-qa-db-ja.com

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の応答は、「実際の」キー押下とは異なり、パフォーマンスの問題もあります。処理できるよりも速く入力できます。

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

6
dgirardi

そのためにpreserveを使用できます:タイプ定義(例:THREE_LEVEL)に行を追加します

preserve[LevelThree+Shift] = Shift;

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

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

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

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

5
stev47