> Ich habe Schwierigkeiten mit Neo (Xmodmap auf Linux) und Stumpwm (tiling
> window manager für X) -- wie sie schon Mitte 2010 von Eric Wolf
> berichtet wurden. 

"Schwierigkeiten" ist für eine Problembeschreibung etwas vage...

Leider kann ich kaum Lisp, aber diese Funktion in input.list scheint mir
verdächtig:

  (defun keycode->character (code mods)
    (let ((idx (if (member :shift mods) 1 0)))
      (xlib:keysym->character *display* (xlib:keycode->keysym *display* code 
idx) 0)))

Sieht so aus, als ob alle Modifier ausser Shift weggeworfen würden.
Die Minimalvariante für xkbmap mit 3 Ebenen stelle ich mir so vor:

    (let ((idx (if (member :shift mods) 1 (if (member :mod5 mods) 2 0))))

Allgemeiner müsste man die Menge in mods in einen state überführen, mit
dem xlib:keysym->character etwas anfangen kann.

Die Funktion is-modifier ist schon vom Interface her fehlerhaft: Unter
Xlib bestimmt die keysym, was ein Modifier ist und was nicht, hier wird
aber mit dem keycode gearbeitet.

Bei dem Zeugs, was sich mit Modifiern zu befassen scheint sehe ich
nirgends etwas, was Gruppenumschaltung betrifft.  Das wäre für xmodmap
fatal, denn Ebene 3 ist mit Gruppenumschaltung gemacht (keysym
Mode_switch).

Aber um wirklich nachzuverfolgen, was hier als Modifier und als
Konsequenz daraus wie behandelt wird sind meine Lisp-Kenntnisse zu
schwach.  Da du vermutlich Lisp besser verstehst als ich solltest du dir
input.lisp genauer anschauen.  Ich vermute hier starken
Verbesserungsbedarf.  keysyms.lisp sollte man auch mal wieder
nachführen.

Andreas


Antwort per Email an