Belegung der X11-Tastatur mit zusätzlichen Zeichen

Beim Schreiben mathematischer Texte wünsche ich mir, häufig verwendete Symbole direkt direkt eingeben zu können, ohne deren hexadezimalen Codes auswendig zu lernen oder in die Pickliste schauen zu müssen.

Die Windows-Taste ist ungenutzt und bietet sich an als zusätzlicher Modifier, auch zusammen mit anderen Modifier-Tasten, um weitere Zeichen auf die vorhandenen Tasten zu legen.

Zum Beispiel könnten wir kleine griechische Buchstaben eingeben durch die Modifier-Tasten Windows zusammen mit Alt und folgender Tabelle:

Eingabe: a b g d e z ä h i k l m n x o p r s ß t u y f c ü ö
Ergebnis: α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ ς τ ου υ φ χ ψ ω

Die Lösung in sechs Schritten

  1. Der Unicode-Standard nummeriert viele Zeichen aus der ganzen Welt durch, jedem wird eine Zahl zugeordnet. Diese Zahl kann man dezimal oder hexadezimal ausdrücken. Zum Beispiel liegt unser großes A im Unicode auf Position 65; diese dezimale 65 kann ich auch hexadezimal als x41 ausdrücken. Das kleine Delta liegt auf Position 948, das ist hexadezimal x3b4. Wenn ich den Code eines Zeichens kenne, kann ich es als Entity in ein HTML-Dokument einzufügen: δ oder δ codieren das kleine Delta δ.

    Es gibt bei Wikipedia eine Liste aller Unicode-Blöcke: die Codes für griechische Zeichen finden wir im Block Griechisch und Koptisch, Smileys liegen neben anderen interessanten Symbolen im Block verschiedene Symbole. Mich interessierten Mathematische Operatoren und die hoch- und tiefgestellten Zeichen. Weitere Unicode-Resourcen finden sich in der Referenzliste ganz unten rechts.

  2. Das aktuelle X11 erlaubt, Zeichen über deren hexadezimalen Unicode-Wert einzugeben:

    1. Shift und Control drücken und gedrückt halten;
    2. u drücken;
    3. Control loslassen;
    4. Hexadezimalen Wert des Zeichens eingeben mit sovielen Stellen wie nötig;
    5. Shift loslassen.

    Mit Shift-Control-u3b4 erhalten Sie ein kleines Delta δ.

    Im Terminal-Emulator erzeugen einige Control-Zeichen Signale, z.B. beendet Control+c ein laufendes Programm mit SIGTERM. Deshalb empfiehlt es sich, das Control sogleich nach dem u loszulassen.

    Wenn man die Codes der gewünschten Zeichen auf einer Haftnotiz notiert und diese an den Monitor pappt (gleich neben den Zettel mit den Passwörtern), hat man eine Lowtech-Lösung für das Problem. Uns aber steht der Sinn nach mehr.

  3. Das Programm xbindkeys aus dem Paket xbindkeys kann Tastenkombinationen mit Programmaufrufen belegen.

    Starten Sie xbindkeys -k und drücken Sie die Windows-Taste zusammen mit c: die Ausgabe enthält eine Zeile Mod4 + c. Mod4 steht für die Windows-Taste, und c für c.

    Mit diesem Wissen legen wir im \$HOME-Verzeichnis die Datei .xbindkeysrc an:

    "xclock &"
    Mod4 + c

    Die erste Zeile enthält das auszuführende Kommando in Quotes, die zweite Zeile die zugehörige die Zeichen-Kombination. Nach dem Speichern starten wir xbindkeys. Die nächste Eingabe von Windows + c startet das xclock.

    Jetzt können wir Tastenkombinationen mit Programmaufrufen belegen, aber noch nicht mit Zeichen. Wir brauchen ein Programm, das Tastatureingaben simulieren kann. Dazu kommen wir im nächsten Schritt.

  4. Das Programm xte aus dem Paket xautomation erlaubt es, die Tastatur fernzubedienen.

    Wir rufen es mit diesem Parameter auf:

    xte 'str Hallo Welt!'

    Es simuliert es die Eingabe des Textes: die Zeichen werden an den X11-Client gesendet, der gerade den Keyboard-Focus besitzt.

    Die praktische Nutzung: wir erweitern die Datei .xbindkeysrc um diese Zeilen:

    "xte 'str hans.wurst@example.org'"
    Mod4 + e

    Und schon können wir überall mit Windows + e unsere Emailadresse eingeben.

  5. Etwas kniffliger wird es, wenn wir Zeichen erzeugen wollen, die nicht auf der Tastatur liegen. Ein Aufruf von xte scheitert:

    xte 'str ψ'
    Character 'ψ' is not supported by your keyboard layout.

    Doch xte kann mehr: u.a. (Modifier-)Tasten gedrückt halten, während es andere Tasten betätigt.

    Wir legen die kleine Datei psi.txt an:

    keydown Shift_L
    keydown Control_L
    key u
    keyup Control_L
    str 3c8
    keyup Shift_L

    Damit füttern wir das xte:

    xte <psi.txt

    Und schon erscheint das Psi ψ.

  6. Das lässt sich automatisieren. Laden Sie das kleine Perl-Programm xtehex.pl herunter:

    #!/usr/bin/perl
    use strict;
    
    open (XTE, "|-", "xte");
    
    print XTE "usleep 50000\\n";
    print XTE "keyup Control_L\\n";
    print XTE "keyup Shift_L\\n";
    print XTE "keyup Alt_L\\n";
    print XTE "keyup Meta_L\\n";
    print XTE "keyup Super_L\\n";
    
    foreach my \$arg (@ARGV) {
    
    	next unless \$arg =~ /^([0-9a-f]+)\$/i;
    
    	print XTE "keydown Shift_L\\n";
    	print XTE "keydown Control_L\\n";
    	print XTE "key u\\n";
    	print XTE "keyup Control_L\\n";
    	printf XTE "str %x\\n", hex(\$1);
    	print XTE "keyup Shift_L\\n";
    }
    
    close (XTE);

    Machen Sie das Programm ausführbar und legen Sie es in ein Verzeichnis, das in ihrem Standard-Suchpfad enthalten ist. Ich nutze dazu \$HOME/bin.

    Das Programm liest Zeichen-Hexcodes von der Kommandozeile und erzeugt Befehle für xte, um diese Zeichen einzugeben:

    xtehex.pl 3bb 3cc 3b3 3bf 3c2

    Dieser Befehlsaufruf erzeugt: λόγος.

    Wenn Sie lieber mit dezimalen Zeichen-Codes arbeiten, benutzen Sie statt xtehex.pl das Perl-Programm xtedec.pl; die beiden unterscheiden sich nur in zwei Zeilen. Beim Aufruf übergeben Sie die dezimalen Codes der gewünschten Zeichen:

    xtedec.pl 955 972 947 959 962

    Nun zur praktischen Nutzung: wir erweitern die Datei .xbindkeysrc um diese Zeilen:

    "xtehex.pl 03b1"
    Mod4 + Alt + a
    
    "xtehex.pl 03b2"
    Mod4 + Alt + b
    
    "xtehex.pl 03b3"
    Mod4 + Alt + g
    
    "xtehex.pl 03b1 3b2 3b3"
    Mod4 + Alt + v
    
    "xtehex.pl 263a"
    Mod4 + plus
    
    "xtehex.pl 2639"
    Mod4 + minus
    
    "xtehex.pl 2640"
    Mod4 + Control + Alt + f
    
    "xtehex.pl 2642"
    Mod4 + Control + Alt + m
    
    "xtehex.pl 262a"
    Mod4 + Control + Alt + i

    Jetzt können wir bequem Sonderzeichen eingeben:

    Modifier Taste erzeugte Zeichen
    Windows + Smiley
    - Frowny
    Windows + Alt a α Alpha
    b β Beta
    g γ Gamma
    v αβγ
    Control + Windows + Alt m Männchen
    f Weibchen
    i Frieden

Heureka! Problem gelöst. ☺

Hoopajoo.net: xautomation
Nongnu.org: xbindkeys
Semicomplete.com: xdotool
Wikipedia: Liste der Unicode-Blöcke
Fileformat.info: Unicode Blocks
Unicode-table.com: Unicode Blocks
Alan Wood: Alan Wood’s Unicode resources