Hallo,
Erik Streb del Toro schrieb:
> Peter Eberhard schrieb am 06.08.2009 14:51:
> > Nebenbei bemerkt muss der xkb-Treiber dringend mal überarbeitet werden –
> > vielleicht hab ich mal Zeit dafür. OK, vielleicht sind die vielen
> > Seltsamkeiten da ja auch beabsichtigt, aber ich glaube, da kann man
> > einiges besser machen.
>
> Was genau ist denn seltsam?
> Etwa Ticket 141?
Nein, es geht mir mehr um die Quellen.
1. Da stehen noch ein paar Kommentare drin, die, glaube ich, nicht mehr
zutreffen:
• symbols/level5:
// They do not use *Level5* keysyms,
// as some applications get confused by it.
2. In symbols/de wird ständig der keytype gewechselt:
key.type[Group1] = "EIGHT_LEVEL_NEO_LOCKS_QUARTERALPHABETIC";
key.type[Group1] = "EIGHT_LEVEL_NEO_LOCKS";
Da sollte man bei einzelnen Tasten lieber schreiben:
key <AB10>
{ type[Group1]="EIGHT_LEVEL_NEO_LOCKS_QUARTERALPHABETIC",
symbols[Group1]=[ j, J, semicolon, Greek_theta, semicolon,
NoSymbol, U21A6, NoSymbol ], };
3. Ich fände es eigentlich besser, wenn statt der Typen
EIGHT_LEVEL_NEO_LOCKS_QUARTERALPHABETIC und EIGHT_LEVEL_NEO_LOCKS
andere, besser an Neo angepasste Typen definiert würden (da wir sie
ohnehin extra einführen müssen). Nur sechs Ebenen (wie in Neo), und
evtl. (aber nicht unbedingt nötig) noch zwei neue Typen für Mod4, um das
zu vermeiden:
symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift,
ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock,
ISO_Level5_Lock, ISO_Level5_Lock ]
Siehe im Anhang ein (ungetesteter) Entwurf der types/level5. Die
funktioniert natürlich nur (wenn überhaupt), wenn man noch die
symbols/de entsprechend anpasst.
Das würde das Anpassen eines eigenen Neo über eine .Xmodmap (für Leute
ohne Rootrechte oder wenn sie nicht im xkb rumschreiben möchten)
einfacher und logischer machen. Und auch die symbols/de wäre
übersichtlicher: Man könnte die Symbole in der Reihenfolge der
Neo-Ebenen reinschreiben.
Probleme gibt es so allerdings, wenn jemand fälschlicherweise sowohl xkb
als auch die Neo-Xmodmap benutzt.
4. Wozu wird in symbols/level5 der X-Mod2 belegt?
replace key <HYPR> {
type[Group1] = "ONE_LEVEL",
vmods[Group1] = NumLock,
symbols[Group1] = [ NoSymbol ],
actions[Group1] = [ SetMods(modifiers=NumLock) ]
};
modifier_map Mod2 { <HYPR> };
Finde ich unnötig, da der Ebene4-Lock ja keinen Unterschied zum normalen
(Neo-)Mod4 macht (anders als bei CapsLock, das ja kein ShiftLock ist und
deswegen einen eigenen Modifier [Lock] belegen muss). Mod2 sollte lieber
für Benutzer frei bleiben, die vielleicht selbst noch einen zusätzlichen
Modifier definieren möchten. Oder fragen irgendwelche Programme
Mod2=NumLock ab? Irgendeinen Grund wird der „Hack“ ja haben…
Das war so ungefähr, was mir aufgefallen war. Zugegeben, das:
> Nebenbei bemerkt muss der xkb-Treiber dringend mal überarbeitet werden
war maßlos übertrieben. Und ich kann mögliche Änderungen auch gerade
nicht ausprobieren, weil mein X.org noch die verbuggte Version 7.2 hat.
Müsste da mal meine Distribution aktualisieren, davor schrecke ich aber
noch zurück.
Gruß,
Peter
// $XKeyboardConfig$
// $XFree86: xc/programs/xkbcomp/types/extra,v 1.3 2002/11/26 02:14:02 dawes Exp $
partial default xkb_types "default" {
// Definition for a key type used for the czech keymap, for instance.
// Defines style a with four level shift. It is similar to three_level
// type used for iso9995 but it lets the shift key behave "normally".
virtual_modifiers LevelThree,ScrollLock,LevelFive;
type "EIGHT_LEVEL" {
modifiers = Shift+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
type "EIGHT_LEVEL_ALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] = Level4;
map[Lock+Shift+LevelThree] = Level3;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] = Level8;
map[Lock+Shift+LevelThree+LevelFive] = Level7;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
type "EIGHT_LEVEL_SEMIALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] = Level3;
map[Lock+Shift+LevelThree] = Level4;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] = Level7;
map[Lock+Shift+LevelThree+LevelFive] = Level8;
preserve[Lock+LevelThree] = Lock;
preserve[Lock+Shift+LevelThree] = Lock;
preserve[Lock+LevelFive] = Lock;
preserve[Lock+Shift+LevelFive] = Lock;
preserve[Lock+LevelThree+LevelFive] = Lock;
preserve[Lock+Shift+LevelThree+LevelFive] = Lock;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
type "SIX_LEVEL_NEO" {
// 'NumLock' is used for the (Neo-)Mod4-Lock.
modifiers = Shift + LevelThree + NumLock + LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[LevelThree+Shift] = Level5;
map[LevelFive] = Level4;
map[LevelFive+Shift] = Level4;
map[LevelFive+LevelThree] = Level6;
map[NumLock] = Level4;
map[NumLock+Shift] = Level4;
map[NumLock+LevelThree] = Level6;
map[NumLock+LevelFive] = Level1;
map[NumLock+LevelFive+Shift] = Level2;
map[NumLock+LevelFive+LevelThree] = Level3;
map[NumLock+LevelFive+LevelThree+Shift] = Level5;
preserve[LevelFive+Shift] = Shift;
preserve[NumLock+Shift] = Shift;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "ASCII";
level_name[Level4] = "Navigation";
level_name[Level5] = "Greek";
level_name[Level6] = "Math";
};
type "SIX_LEVEL_NEO_ALPHABETIC" {
// 'NumLock' is used for the (Neo-)Mod4-Lock.
modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[LevelThree+Shift] = Level5;
map[LevelFive] = Level4;
map[LevelFive+Shift] = Level4;
map[LevelFive+LevelThree] = Level6;
map[NumLock] = Level4;
map[NumLock+Shift] = Level4;
map[NumLock+LevelThree] = Level6;
map[NumLock+LevelFive] = Level1;
map[NumLock+LevelFive+Shift] = Level2;
map[NumLock+LevelFive+LevelThree] = Level3;
map[NumLock+LevelFive+LevelThree+Shift] = Level5;
// Lock interchanges Level1 and Level2
map[Lock] = Level2;
map[Lock+Shift] = Level1;
map[Lock+LevelThree] = Level3;
map[Lock+LevelThree+Shift] = Level5;
map[Lock+LevelFive] = Level4;
map[Lock+LevelFive+Shift] = Level4;
map[Lock+LevelFive+LevelThree] = Level6;
map[Lock+NumLock] = Level4;
map[Lock+NumLock+Shift] = Level4;
map[Lock+NumLock+LevelThree] = Level6;
map[Lock+NumLock+LevelFive] = Level2;
map[Lock+NumLock+LevelFive+Shift] = Level1;
map[Lock+NumLock+LevelFive+LevelThree] = Level3;
map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level5;
preserve[LevelFive+Shift] = Shift;
preserve[NumLock+Shift] = Shift;
preserve[Lock+LevelThree] = Lock;
preserve[Lock+LevelThree+Shift] = Lock;
preserve[Lock+LevelFive] = Lock;
preserve[Lock+LevelFive+Shift] = Lock+Shift;
preserve[Lock+LevelFive+LevelThree] = Lock;
preserve[Lock+LevelFive+LevelThree+Shift] = Lock;
preserve[Lock+NumLock] = Lock;
preserve[Lock+NumLock+Shift] = Lock+Shift;
preserve[Lock+NumLock+LevelThree] = Lock;
preserve[Lock+NumLock+LevelThree+Shift] = Lock;
preserve[Lock+NumLock+LevelFive+LevelThree] = Lock;
preserve[Lock+NumLock+LevelFive+LevelThree+Shift] = Lock;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "ASCII";
level_name[Level4] = "Navigation";
level_name[Level5] = "Greek";
level_name[Level6] = "Math";
};
type "TWO_LEVEL_NEO_MOD4" {
modifiers = LevelFive;
map[none] = Level1;
map[LevelFive] = Level2;
};
type "TWO_LEVEL_NEO_MOD4_LOCK" {
modifiers = LevelFive+NumLock;
map[none] = Level1;
map[LevelFive] = Level2;
map[NumLock] = Level2;
map[NumLock+LevelFive] = Level1;
};
};