Deklarieren Sie mit XKB einen neuen Modifikatorschlüssel

12

Ich versuche ein Einhand-Tastaturlayout zu erstellen und möchte Hyperbeim Drücken einiger Tasten Sondertasten erzeugen.

Zum Beispiel, wenn ich drücke Hyper_Lund Bwill ich XKB zu produzieren XF86AudioRaiseVolume.

Relevante Teile von custom_2.kbd (vollständiger Code unter 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;
};
};

Es scheint mir in Ordnung, aber wenn ich es versuche:

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

(Fehlercode ist 1)

Und jetzt stecke ich fest. Hat jemand eine Idee, wie man das zum Laufen bringt? Eine Lösung ohne Hyperist OK.

Bearbeiten

Durch Ändern von Superund Hypernach Mod4und Mod5wird dieser Fehler behoben:

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

Es funktioniert jedoch immer noch nicht:

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

Antworten:

9

Ich habe immer noch einige (meiner Meinung nach nicht verwandte) Probleme mit XKB, aber ich habe einen Hyper-Modifikator zugeordnet, und ich glaube, die relevanten Einstellungen sind folgende:

kompatibel:

virtual_modifiers Shift,Control,Meta,Super,Hyper,AltGr;

interpret Hyper_R { action = SetMods(modifiers=Mod4); };

Symbole:

modifier_map Mod4 { <DELE> }; // Hyper
key <DELE>  { type="UNMODIFIED", [ Hyper_R ], repeat=no  };

dann sowas wie

key <K_36> { type = "SHIFT+HYPER", [ b, B, 
                                XF86AudioRaiseVolume, XF86AudioRaiseVolume ] };

Typen

virtual_modifiers Meta,AltGr,Super,Hyper,Mod5;

brauche den Mod5 dort nicht, es sei denn, du benutzt ihn auch; aber auch Shift & Control hier weglassen ...

type "SHIFT+HYPER" {
    modifiers= Shift+Hyper;
    map[Shift]= Level2;
    map[Hyper]= Level3;
    map[Shift+Hyper]= Level4;
};

Für das, was es wert ist, hatte ich weitaus schlimmere Probleme beim Versuch, die Geometrie und die Schlüsselcodes neu zu definieren, als es sich gelohnt hat, und kehrte schließlich zu den pc105Schlüsselsymbolen in der <AE01>Form zurück, obwohl viele von ihnen lächerlich falsch benannt sind. (zB <DELE>für meinen Hyperkey)

PS. Ein funktionstüchtiges Beispiel siehe https://github.com/brpocock/spacey-cadet-keyboard ...

BRPocock
quelle
Ich danke dir sehr. Wir arbeiten immer noch an einigen Dingen, aber es funktioniert großartig!
Lennart_96