XKB - 重新映射箭头键并保留 shift 行为以选择文本

XKB - 重新映射箭头键并保留 shift 行为以选择文本

我意识到箭头键重新映射是一个老问题,但是我似乎找不到一个好的解决方案,让我可以使用 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 选择?

答案1

您可以使用preserve它:向您的类型定义(例如THREE_LEVEL)添加行

preserve[LevelThree+Shift] = Shift;

这告诉 xkb 在 的情况下从修饰符组合中找出适当的级别时保留移位修饰符LevelThree + Shift。移位修饰符被传递以供工具包或应用程序使用(另请参阅此处:使用保留类型)。

请注意,这会影响应用程序如何解释按键组合:如果你已经定义了上述保留和

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

并且您按下时Ctrl + Shift + LevelThree + <AC08>应用程序会将其读取为组合键Ctrl + Shift + kappa(而不是通常的Ctrl + kappa),因为 Shift 修饰键会被保留并传递给应用程序。

相关内容