Hallo miteinander,

Einer der Wünsche für eine Neo2 überlegene Tastaturbelegung ist, dass
wichtige Modifikatoren besser zu erreichen sind.  Dazu muss man die
Modifikatoren auf Tasten legen, auf denen jetzt Buchstaben bzw. Punkt
und Komma liegen.  Wohin mit den verdrängten Zeichen?

Die einfachste Lösung ist, schlechter gelegene Tasten oder höhere
Ebenen heranzuziehen.  Das funktioniert sicher, ist aber langweilig
und nicht unbedingt die effizienteste Lösung.  Die Alternative ist,
ein paar Zeichen mit toten Tasten zu erzeugen (zum Beispiel im Sinne
von Karls Quick-Tot-Tasten).  Diese Lösung hat drei Haken:

a) Man braucht einen passablen Platz für die tote Taste.

b) Unter X kann man mit toten Tasten keine Alt- oder Control-Codes
   generieren.  Das heißt, entweder sieht man eine alternative
   Eingabemöglichkeit vor oder man beschränkt die so erzeugten Zeichen
   auf Umlaute und andere nicht-ASCII-Zeichen.

c) Das System wird fragiler, zumindest unter X: Die Tastatur
   funktioniert nur wenn Treiber und Compose beide funktionieren, und
   diese beiden Komponenten sind bei X getrennt.  Die Konsequenzen
   davon sind diesselben wie für b).

Man könnte meinen, ein weiterer Haken sei, dass man mehr Anschläge
braucht, wenn ein Zeichen per toter Taste statt direkt erzeugt wird.
Das ist meistens, aber nicht unbedingt so, siehe unten.

Mit b) und c) muss man sich abfinden.  Zu a) sehe ich zwei Auswege.

1. Die tote-q-Tastatur: Statt extra eine tote Taste einzuführen tötet
   man q.  Q deshalb, weil es der seltenste Buchstabe ist und noch
   dazu fast ausschließlich im Bigramm qu auftaucht.  In .XCompose
   sieht die tote-q-Tastatur zum Beispiel so aus:

   ~Ctrl ~Alt <q> <q>        : q
   ~Ctrl ~Alt <Q> <Q>        : Q
   ~Ctrl ~Alt <q> <u>        : "qu"
   ~Ctrl ~Alt <q> <U>        : "qU"
   ~Ctrl ~Alt <Q> <u>        : "Qu"
   ~Ctrl ~Alt <Q> <U>        : "QU"
   ~Ctrl ~Alt <q> <space>    : odiaeresis
   ~Ctrl ~Alt <Q> <space>    : Odiaeresis
   ~Ctrl ~Alt <q> <s>        : ssharp
   ~Ctrl ~Alt <q> <S>        : "ẞ"
   ~Ctrl ~Alt <Q> <S>        : "ẞ"

   Durch ~Ctrl ~Alt erreicht man, dass Control-q und Alt-q noch
   funktionieren; die Sequenzen mit u stellen sicher, dass das Bigramm
   qu eingegeben werden kann, als wäre q noch lebendig; ein einzelnes
   q bekommt man durch einen Doppeltanschlag.  Der eigentliche Zweck
   des toten q ist im Beispiel oben die Erzeugung von ö und ß als
   Compose-Sequenzen.

   Wenn aus irgendeinem Grund Compose nicht funktioniert (zum Beispiel
   in Applikationen, die Compose nicht unterstützen) bleibt in der
   Regel das q lebendig; man verliert zwar ein paar Umlaute, aber hat
   noch immer ein bedienbares System.  Ich habe jetzt drei Monate mit
   totem q gelebt nur zwei Ausnahmen von der Regel gefunden (rdesktop
   und ein Derivat von ICA Client); für beide Programme kann mit der
   Umgebungsvariable XCOMPOSEFILE das q am Leben halten (Kommandozeile
   «XCOMPOSEFILE= rdesktop» oder ähnlich).  Insgesamt ist die
   tote-q-Lösung gangbar.

   Lernbarkeit: An den Doppeltanschlag von q bei der Bedienung von
   Programmen (die q für Quit verwenden) habe ich mich rasch gewöhnt.
   Die Gewöhnung beim Schreiben geht langsamer.  Ich glaube das liegt
   daran, dass ich wenig Deutsch und daher wenig ö und ß schreibe.  An
   die Lage der Umlaute bei Neo hatte ich mich nach drei Monaten
   genausowenig gewöhnt.

2. Modifikatoren als tote Tasten benutzen.  Einen Modifikator zu
   drücken und gleich wieder loszulassen hat normalerweise keine
   Funktion; die Idee ist, diesen Vorgang wie den Druck einer toten
   Taste zu behandeln.  Der AHK-Treiber nutzt diese Idee in der
   Implementierung des Einhand-Modus.  Windows ist also kein Problem.
   Mit XKB hingegen ist die Idee nicht umsetzbar.

   Sie lässt sich aber mit Eingabemethoden realisieren.  Im Neoland
   ist die Eingabemethode der Wahl der Compose-Mechanismus, wobei wir
   also wieder bei den toten Tasten sind.  Normalerweise ignoriert
   Compose Modifikatoren völlig.  Mit kleinen Sourcecodeänderungen
   kann man aber mit der Definition

   <ISO_Level3_Shift>    : ssharp

   mit Mod3 ein ß eingeben.  Mit einem einzigen Anschlag, wohlgemerkt.
   Zu den üblichen Einschränkungen der toten Tasten kommen noch
   folgende Bedenken:

   - Ob Compose jemals wie gewünscht erweitert wird ist offen.  Ein
     Patch ist eingereicht (https://bugs.freedesktop.org/show_bug.cgi?id=26705),
     aber das heißt nicht viel.  Auch im günstigsten Fall wird es
     Jahre dauern, bis die Änderung sich allgemein verbreitet hat.

   - Die Lösung funktioniert nicht mit allen Programmen, auch nicht
     mit allen Compose-tauglichen.  Beispielsweise versagen xterm und
     emacs mit Xaw; urxvt, firefox, inkscape, OpenOffice, kword,
     dillo, gitk und emacs mit GTK-Widgets funktionieren hingegen.
     Alles in allem ist das Bild aber besser als ich gehofft hatte.

   Ich habe auch mit einen weiteren Eingabemethode, IBus,
   experimentiert.  Ich habe nur kleines Demo, nichts, was den
   Compose-Mechanismus der Xlib auch nur annähernd nachbildet; es geht
   nur um die Frage, ob man den Trick mit den Modifikatoren hinbringt.
   Die Zwischenbilanz ist: Erfolg für Firefox, inkscape, OpenOffice,
   koffice, dillo, gitk und urxvt, Misserfolg für xterm und emacs (Die
   Probleme mit emacs sind den IBus-Entwickler bekannt; ich nehme an,
   sie werden in absehbaren Zeit behoben).

   Zur Lernbarkeit kann ich nicht viel sagen.  Das größte Hindernis
   sind unabsichtliche Eingaben.  Das passiert mir öfters, aber ich
   bin auch sonst ein schlampiger Tipper.  Ich habe auf meinem
   Privatrechner seit einer Woche sämtliche Modifikatoren mit
   auffälligen, nutzlosen Strings belegt, so dass ich versehentliche
   Bedienung bemerke.  Die Häufigkeit der Fehlbedienungen nimmt
   langsam ab.  Langsam.

Die Lösung mit doppelt benutzten Modifikator-Tasten ist die technisch
anspruchvollste, hat aber auch am meisten Potenzial, zumal wenn man
sich auf ein Rahmenwerk wie IBus stützt, bei dem man die Fäden in der
Hand hat und nicht auf die Gnade von Entwicklern anderer Projekte
angewiesen ist.  Als Appetithäppchen habe ich in meinem Demo die
Möglichkeit eingebaut, Unicode-Zeichen als vierstellige Hexzahl
einzugeben (Eingeleitet von der keysym Codeinput, die man sich
irgendwo auf die Tastatur legen sollte).  Neo-Griechisch und
Neo-Kyrillisch ließen sich mit einem aufgebohrten (sprich: selektiv
ein- und abschaltbaren) Compose elegant implementieren.  Oder
Kürzelsysteme…

Falls jemand damit experimentieren möchte: Der Patch für Compose ist
im oben erwähnten Ticket auf freedesktop.org zu finden, das kleine und
dennoch fehlerhafte Demo für IBus im Anhang.

Andreas

Attachment: start
Description: IBus-Demo

Antwort per Email an