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
-
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.
-
Das aktuelle X11 erlaubt, Zeichen über deren hexadezimalen Unicode-Wert einzugeben:
- Shift und Control drücken und gedrückt halten;
u
drücken;- Control loslassen;
- Hexadezimalen Wert des Zeichens eingeben mit sovielen Stellen wie nötig;
- 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 mitSIGTERM. Deshalb empfiehlt es sich, dasControl
sogleich nach demu
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.
-
Das Programm
xbindkeysaus dem Paketxbindkeys
kann Tastenkombinationen mit Programmaufrufen belegen.Starten Sie
und drücken Sie diexbindkeys -kWindows
-Taste zusammen mitc
: die Ausgabe enthält eine ZeileMod4 + c
.Mod4
steht für dieWindows
-Taste, und c fürc
.Mit diesem Wissen legen wir im
\$HOME-Verzeichnis die Datei.xbindkeysrcan:"xclock &" Mod4 + cDie 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 vonWindows + c
startet dasxclock.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.
-
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
.xbindkeysrcum diese Zeilen:"xte 'str hans.wurst@example.org'" Mod4 + eUnd schon können wir überall mit
Windows + e
unsere Emailadresse eingeben. -
Etwas kniffliger wird es, wenn wir Zeichen erzeugen wollen, die nicht auf der Tastatur liegen. Ein Aufruf von
xtescheitert:xte 'str ψ'Character 'ψ' is not supported by your keyboard layout.
Doch
xtekann 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_LDamit füttern wir das
xte:xte <psi.txtUnd schon erscheint das Psi
ψ
. -
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/binDas Programm liest Zeichen-Hexcodes von der Kommandozeile und erzeugt Befehle für
xte, um diese Zeichen einzugeben:xtehex.pl 3bb 3cc 3b3 3bf 3c2Dieser Befehlsaufruf erzeugt:
λόγος
.Wenn Sie lieber mit dezimalen Zeichen-Codes arbeiten, benutzen Sie statt
xtehex.pldas Perl-Programmxtedec.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 962Nun zur praktischen Nutzung: wir erweitern die Datei
.xbindkeysrcum 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 + iJetzt 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. ☺