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

dgi*_*rdi 6 remapping xkb shift

我意识到重新映射箭头键是一个老问题,但是我似乎找不到一个好的解决方案,让我可以像使用香草箭头键一样使用 SHIFT + 重新映射键选择文本。

例如,如果我将 Caps Lock 重新映射到 ISO_Level3_Shift 并将 xkb_symbols 设置为读取

key <AC08>  { [         k,          K , Down, Down] };
Run Code Online (Sandbox Code Playgroud)

或者

key <AC08>  { type="THREE_LEVEL",
              [         k,          K , Down ]  };
Run Code Online (Sandbox Code Playgroud)

按 Shift+CapsLock+K 的行为与 CapsLock+K 完全相同(而 Shift+Down 的行为与单独的 Down 不同)。

我使用更高级别的宏实用程序并生成键盘事件(即生成 shift 和箭头按键)取得了更大的成功;然而,这种方法有一系列不同的问题 - 通常对模拟按键的 UI 响应与“真实”按键不同,并且也存在性能问题 - 我打字的速度比它可以处理的速度快。

Tl;博士; 如何在 X 下使用重新映射的箭头键进行移位选择?

小智 6

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

preserve[LevelThree+Shift] = Shift;
Run Code Online (Sandbox Code Playgroud)

这告诉 xkb 在从LevelThree + Shift. shift 修饰符被传递以供工具包或应用程序使用(另请参见此处:使用保留类型)。

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

key <AC08> { type="THREE_LEVEL", [ k, K, kappa ]  };
Run Code Online (Sandbox Code Playgroud)

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