XKB를 사용하여 새 수정 자 키를 선언하십시오.


12

한 손으로 키보드 레이아웃을 만들려고하는데 Hyper일부 키를 누를 때 특수 키를 생성 하려고 합니다.

예를 들어, 내가 누를 때 Hyper_LB, 나는 농산물에 XKB를 원한다 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은 괜찮습니다.

편집하다

Superand HyperMod4and 를 변경 Mod5하면 해당 오류가 사라집니다.

~$ 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 

답변:


9

XKB와 관련하여 여전히 관련이없는 문제가 있지만 Hyper 수정자가 매핑되어 있으며 관련 설정은 다음과 같습니다.

compat :

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…를 참조 하십시오 .


정말 고맙습니다. 아직도 몇 가지 일을하고 있지만 훌륭하게 작동합니다!
Lennart_96
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.