Xkb
透明地映射修改後的密鑰(使用 xkb)
我正在嘗試在主鍵盤上模擬數字小鍵盤鍵,但在使用 xkb 時遇到了困難。
如何將 <LWIN> + <AD07> 轉換為“左”?(又名超級+你)
它需要與 Shift、Ctrl 配合使用(理想情況下也是 Alt)。
我最接近的是:
type "wkafk1" { modifiers = Shift+Super; map[Shift]= Level2; map[Super] = Level3; level_name[Level1] = "Base"; level_name[Level2] = "Shift"; level_name[Level3] = "Fn"; }; ... key <AD07> { type= "wkafk1", symbols[Group1]= [ u, U, Left ] };
但是 Shift+Super+u 沒有被處理。
這個也很接近:
type "wkafk1" { modifiers = Shift+Super; map[Shift]= Level2; map[Super] = Level3; map[Shift+Super]=Level4; level_name[Level1] = "Base"; level_name[Level2] = "Shift"; level_name[Level3] = "Fn"; level_name[Level4] = "Fn Shift"; }; ... key <AD07> { type= "wkafk1", symbols[Group1]= [ u, U, Left, Shift+Left ] };
但它沒有編譯,因為我不知道如何發出修改後的符號(不允許使用 Shift+Left)。
我是否需要帶有 action= RedirectKey(…) 的“解釋”語句?
多虧了一些現有技術,以下是步驟:
- 創建目前配置的副本:
xkbcomp $DISPLAY custom.xkb
- 編輯生成的
custom.xkb
.- 找到部分的結尾:
xkb_types
並添加:type "wkafk1" { modifiers = Shift+Super; map[Shift] = level2; map[Super] = level3; map[Super+Shift] = level3; level_name[Level1] = "Base"; level_name[Level2] = "Caps"; level_name[Level3] = "Arrows"; };
<AD07>
將section: 中的鍵定義替換xkb_symbols
為:key <AD07> { type= "wkafk1", symbols[Group1]= [ u, U, NoSymbol], actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=<LEFT>,clearmods=Super)] };
- 編譯並使用自定義配置:
xkbcomp custom.xkb $DISPLAY
請注意,這適用於 Shift 和 Ctrl組合鍵。