한손 키보드 레이아웃을 만들려고 하는데 Hyper이를 사용하여 특정 키를 눌렀을 때 특수 키를 생성하고 싶습니다.
Hyper_L예를 들어, 를 누르고 BXKB가 생성되기를 원할 때입니다 XF86AudioRaiseVolume.
관련 부분은 다음에서 옵니다 custom_2.kbd
(전체 코드는 다음 위치에 있습니다).http://pastebin.com/gm8cggn3):
xkb_keycodes {
<K_36> = 54; // b B XF86AudioRaiseVolume
<K_85> = 133; // Hyper_L
};
xkb_symbols {
key <K_36> { type = "HYPER_LEVEL", [ b, B, XF86AudioRaiseVolume ] };
key <K_85> { type = "ONE_LEVEL", [ Hyper_L ] };
};
xkb_compatibility {
interpret Hyper_L { action = SetMods(modifiers=Hyper); };
};
xkb_types {
type "HYPER_LEVEL" {
modifiers= Shift+Hyper;
map[Shift]= Level2;
map[Hyper]= Level3;
map[Shift+Hyper]= Level3;
};
};
나에게는 괜찮은 것 같지만 시도하면 다음과 같습니다.
~$ xkbcomp custom_2.kbd $DISPLAY
Error: Identifier "Hyper" of type int is unknown
Error: Key type mask field must be a modifier mask
Key type definition ignored
Warning: Map entry for unused modifiers in HYPER_LEVEL
Using none instead of Shift
Error: Identifier "Hyper" of type int is unknown
Error: The key type map entry field must be a modifier mask
Ignoring illegal assignment in HYPER_LEVEL
Error: Identifier "Hyper" of type int is unknown
Error: The key type map entry field must be a modifier mask
Ignoring illegal assignment in HYPER_LEVEL
-> 1
(오류 코드는 1입니다)
이제 나는 막혔습니다. 이 작업을 수행하는 방법을 아는 사람이 있습니까? 해결책이 없어도 Hyper괜찮습니다 .
편집하다
Supersum 을 sum Hyper으로 변경 하면 오류가 사라집니다.Mod4Mod5
~$ xkbcomp custom_3.kbd
( no output )
~$ diff custom_{2,3}.kbd
188,190c188,190
< interpret Super_L { action = SetMods(modifiers=Super); };
< interpret Hyper_L { action = SetMods(modifiers=Hyper); };
< }c;
---
> interpret Super_L { action = SetMods(modifiers=Mod4); };
> interpret Hyper_L { action = SetMods(modifiers=Mod5); };
> };
204c204
< modifiers= Shift+Hyper;
---
> modifiers= Shift+Mod5;
206,207c206,207
< map[Hyper]= Level3;
< map[Shift+Hyper]= Level3;
---
> map[Mod5]= Level3;
> map[Shift+Mod5]= Level3;
그러나 여전히 작동하지 않습니다.
~$ xkbcomp custom_3.kbd $DISPLAY
Error: success in unknown
Couldn't write keyboard description to :0.0
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 135 (XKEYBOARD)
Minor opcode of failed request: 9 (XkbSetMap)
Value in failed request: 0x8010202
Serial number of failed request: 12
Current serial number in output stream: 14
-> 1
답변1
나는 여전히 XKB와 관련이 없는 몇 가지 문제를 가지고 있지만 Hyper 수정자를 매핑했으며 관련 설정은 다음과 같습니다.
호환 가능:
virtual_modifiers Shift,Control,Meta,Super,Hyper,AltGr;
interpret Hyper_R { action = SetMods(modifiers=Mod4); };
상징:
modifier_map Mod4 { <DELE> }; // Hyper
key <DELE> { type="UNMODIFIED", [ Hyper_R ], repeat=no };
그럼 좋아
key <K_36> { type = "SHIFT+HYPER", [ b, B,
XF86AudioRaiseVolume, XF86AudioRaiseVolume ] };
유형
virtual_modifiers Meta,AltGr,Super,Hyper,Mod5;
Mod5도 사용하지 않는 한 필요하지 않지만 여기에서는 Shift 및 Control이 생략되었습니다.
type "SHIFT+HYPER" {
modifiers= Shift+Hyper;
map[Shift]= Level2;
map[Hyper]= Level3;
map[Shift+Hyper]= Level4;
};
어쨌든, 나는 기하학과 키 코드를 재정의하려고 시도할 가치가 있는 것보다 더 많은 어려움을 겪었고, 결국에는 형식적인 pc105
키 기호 로 되돌렸습니다 <AE01>
. 비록 그 중 많은 것들이 웃기게도 이름이 잘못되었지만. (예: <DELE>
내 슈퍼 키)
추신. 실제 예를 보려면 다음을 참조하세요.https://github.com/brpocock/spacey-cadet-keyboard…