Die Freiheit, Akzente zu setzen
The Answer Girl: Das Geheimnis der Compose-Taste
Compose-Tabelle
Wer jetzt allerdings übermütig mit [Umschalt-AltGr][Umschalt-^] versucht, das Gradzeichen ° über einem a zu platzieren, um ein skandinavisches å zu erzeugen, stößt bei den meisten Distributionen auf Schwierigkeiten: Es funktioniert einfach nicht. Da wäre es gut, irgendwo nachzulesen, welche Möglichkeiten [Compose] denn nun tatsächlich bietet.
locate Compose entpuppt sich überraschenderweise als der richtige Suchansatz und spuckt (unter anderem) Dateien wie
/usr/X11R6/lib/X11/locale/iso8859-1/Compose /usr/X11R6/lib/X11/locale/iso8859-15/Compose […] /usr/X11R6/lib/X11/locale/koi8-r/Compose
aus. Ein Blick in /usr/X11R6/lib/X11/locale/iso8859-1/Compose (Listing 3) überzeugt davon, dass es sich hierbei um die Definitionstabelle handelt: [Umschalt-AltGr][+][+] erzeugt tatsächlich ein #, das Copyright-Zeichen © lässt sich per [Compose]-Tastendruck und [C][O],[Umschalt-C][Umschalt-O],[Umschalt-C][0] und anderen Kombinationen von c und 0 oder o in beliebiger Groß-Kleinschreibung und Reihenfolge ebenso erzeugen wie mit [Umschalt-AltGr][(][C] (<Multi_key> <parenleft> C). Allerdings funktionieren nicht auf allen Systemen alle angegebenen Kombinationen.
Weiter unten findet sich dann auch das gesuchte a mit Kreis darüber, aring. Des Rätsels Lösung: Nicht das Gradzeichen ° soll man mit a kombinieren, sondern den Stern * (asterisk). Alternativ geht auch [Umschalt-AltGr][A][A] – natürlich nur dann, wenn dies in der Compose-Tabelle so definiert ist.
Listing 3
Ausschnitt aus der Compose-Tabelle
iso8859-1/Compose[…] # <Multi_key> Means <Compose> # Special Character <Multi_key> <plus> <plus> : "#" numbersign […] <Multi_key> <c> <o> : "\251" copyright <Multi_key> <o> <c> : "\251" copyright <Multi_key> <C> <O> : "\251" copyright <Multi_key> <O> <C> : "\251" copyright <Multi_key> <c> <O> : "\251" copyright <Multi_key> <O> <c> : "\251" copyright <Multi_key> <C> <o> : "\251" copyright <Multi_key> <o> <C> : "\251" copyright <Multi_key> <c> <0> : "\251" copyright <Multi_key> <0> <c> : "\251" copyright <Multi_key> <C> <0> : "\251" copyright <Multi_key> <0> <C> : "\251" copyright <Multi_key> <parenleft> <c> : "\251" copyright […] <Multi_key> <a> <asterisk> : "\345" aring <Multi_key> <asterisk> <a> : "\345" aring <Multi_key> <a> <a> : "\345" aring <Multi_key> <a> <o> : "\345" aring <Multi_key> <a> <e> : "\346" ae <Multi_key> <acute> <C> : "\307" Ccedilla […]
Unerkannte Bugs
Sie fragen sich bereits, warum wir uns die ganze Zeit über iso8859-1/Compose unterhalten? Schlicht und ergreifend, weil diese Tabelle bei den meisten hierzulande verbreiteten Distributionen automatisch zum Einsatz kommt. Ob das auch bei Ihnen der Fall ist, lässt sich ganz leicht nachprüfen: Sie müssen lediglich schauen, welche Compose-Tabelle zuletzt (das heißt normalerweise beim Starten von X oder beim grafischen Einloggen) gelesen wurde.
Der Befehl dazu heißt – Überraschung – ls: Die Ausgabe des langen Listings (Option -l) erhält das Datum der letzten Dateiänderung. Wer stattdessen das Datum des letzten Zugriffs generell (das kann auch ein Lesezugriff sein) sehen möchte, modifiziert die Listing-Ausgabe wie in Listing 4 mit der Zusatzoption -u. Dort erkennt man deutlich, dass iso8859-1/Compose zuletzt angefasst wurde, auf die anderen hat schon lange niemand mehr zugegriffen.
Listing 4
Welche Compose-Tabelle kommt zum Einsatz?
pjung@linux> ls -lu /usr/X11R6/lib/X11/locale/*/Compose -r--r--r-- 1 root root 35389 Aug 22 16:01 /usr/X11R6/lib/X11/locale/iso8859-1/Compose -r--r--r-- 1 root root 19260 Aug 13 20:16 /usr/X11R6/lib/X11/locale/iso8859-15/Compose -r--r--r-- 1 root root 19223 Oct 20 2000 /usr/X11R6/lib/X11/locale/iso8859-2/Compose […]
Doch wo steht der Grund dafür? Theoretisch in /usr/X11R6/lib/X11/locale/compose.dir. Diese Datei definiert, welche Compose-Tabelle zum Einsatz kommen soll, wenn die Anwenderin einen bestimmten Zeichensatz wählt:
iso8859-1/Compose C […] iso8859-15/Compose de_DE.ISO8859-15
Entscheidet sie (oder der Distributor) sich für keine bestimmte Locale (dieser Fall nennt sich C), käme hier die iso8859-1-Tabelle zum Einsatz. Wählt sie hingegen den für die deutsche Sprache (de) in Deutschland (DE) nötigen Zeichenvorrat nach dem Standard ISO 8859-15, hofft sie, mit [Shift-AltGr][c][=] ein Euro-Zeichen zusammensetzen zu dürfen:
pjung@linux:~> grep Euro /usr/X11R6/lib/X11/locale/iso8859-15/Compose <Multi_key> <C> <equal> : "\244" EuroSign
Ein Blick auf die eingestellte Locale zeigt, der Euro sollte möglich sein:
pjung@linux> locale LANG=C LC_CTYPE=de_DE.ISO8859-15 […]
(Welche Schreibweisen für eine bestimmte Locale-Angabe noch erlaubt sind, definiert übrigens /usr/X11R6/lib/X11/locale/locale.alias.) Doch folgt die Ernüchterung auf den Fuß: Auf keinem der für diesen Artikel getesteten Systeme änderten die Werte der Variablen LANG oder LC_CTYPE irgendetwas daran, welche Compose-Tabelle zum Zuge kam. Obwohl Compose.dir (zum Beispiel beim Starten des X-Servers) definitiv gelesen wurde, half nicht einmal die Notlösung, ein Umschreiben des Compose.dir-Eintrags für die vom System vorgegebene Locale. Teilweise gab es sogar den überraschenden Effekt, dass im Anschluss an die Locale-Änderung gestartete Programme nur noch auf die Compose-Kombinationen reagierten, die sowohl die alte als auch die gewünschte Compose-Tabelle definierten.
Selbst Red-Hat-9-User, die triumphierend "Bei mir ergibt [Umschalt-AltGr][C][=] aber den Euro!" rufen, freuen sich zu früh: Diese Distribution verwendet stur die Tabelle en_US.UTF-8/Compose, die besagte Belegung definiert. Sie lässt sich aber ebenfalls nicht auf dem vorgesehenen Weg überreden, eine alternative Compose-Tabelle zu verwenden. Linux – und in diesem Falle XFree86 – ist halt nicht perfekt…
Glossar
grep
Dieses Kommando sucht aus dem ihm übergebenen Text (hier aus der Ausgabe von "xmodmap -pk") alle Zeilen heraus, die die als Argument angegebene Zeichenkette (hier: "Mod") enthalten.
ISO 8859-15
Erweiterung des unter anderem für den deutschsprachigen Raum anwendbaren Zeichensatzes ISO 8859-1 um das Euro-Zeichen.
Locale
Definition orts- und sprachtypischer ("lokaler") Einstellungen wie Sprache der Systemmeldungen (in der Variablen LC_MESSAGES), zu verwendender Zeichensatz (LC_CTYPE), die Art und Weise der Datumsangabe (LC_TIME) etc. Mehrere dieser Einstellungen auf einen Schlag deckt die Variable LANG ("language" – Sprache") ab, alle die Variable LC_ALL. Wer englische Systemausgaben, aber das "deutsche Alphabet" bevorzugt, lässt LANG auf C stehen und setzt lediglich LC_CTYPE.
Infos
[1] Patricia Jung: "Tastenwirbel", LinuxUser 06/2002, S. 74 ff., http://www.linux-user.de/ausgabe/2002/06/074-answergirl/answergirl.html
[2] Patricia Jung: "Kommandozeilen-Jongleur", LinuxUser 02/2002, Listing 1 S. 81, http://www.linux-user.de/Ausgabe/2002/02/080-answergirl/answergirl.html
[3] xkeycaps: http://www.jwz.org/xkeycaps/



