我意识到箭头键重新映射是一个老问题,但是我似乎找不到一个好的解决方案,让我可以使用 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 修饰键会被保留并传递给应用程序。