Die so genannten Tottasten stammen noch aus der Zeit der mechanischen Schreibmaschine. Sie werden vor einem Vokal gedrückt und erzeugen einen Akzent, bewegen den Wagen aber nicht vorwärts. Damit lassen sich praktisch alle westeuropäischen Akzente erzeugen, nur die Tilde für - fehlt oft. Für den Accent circonflex sind zwei Tottasten nötig (Accent aigu und Accent grave), per Grad-Zeichen entsteht ein Œ.
Unter Windows funktioniert das ebenfalls recht gut, nach dem Drücken von [«] gefolgt von der [E]-Taste erscheint Ž am Bildschirm. Aber bei vielen Linux-Installationen nehmen die X11-Tastaturlayouts »de-latin1-no-deadkeys« sowie »Option "Xkb-Variant" "no-deadkeys"« den Tottasten ihre Sonderfunktion. Sie setzen sofort den Akzent auf ein Leerzeichen, statt Ž erscheint «e. Als Ausweg bleibt oft nur, das Zeichen umständlich per Menüfunktion zu holen oder aus der Manpage »iso-8859-1« zu kopieren.
Ohne Hilfe des X-Servers
Die Konfigurationsdatei des X-Servers dürfen weder User noch Programmierer ändern. Findige Entwickler umgehen das und simulieren die Tottasten in ihren eigenen Tcl-Programmen. Listing 1 zeigt, wie das funktioniert. Die ausführliche Version auf [ftp://ftp.linux-magazin.de/pub/magazin/2005/03/Deadkeys/] belegt weitere Kombinationen sinnvoll mit diakritischen Zeichen.
Das Paket ergänzt die Bindings der Widget-Klassen »Entry« und »Text« (Zeile 2). Die Tottasten ändern die globale Variable »switch« (Zeilen 4 bis 6). Der Umschaltmodus kann leer sein (normale Eingabe) oder »acute« (Accent aigu), »grave« (Accent grave), »circum« (Accent circonflex), »degree« (Ring-Akzent) oder »tilde« (Tilde-Akzent) enthalten. Drückt der Anwender ein Zeichen, das einen Akzent erhalten könnte, wertet das Skript die Variable »$switch« aus (Zeile 13). Je nach Umschaltmodus fügt es das veränderte Zeichen mit Akzent ein.
Türkische Sonderzeichen
Damit gelingt es auch, türkische Sonderzeichen einzugeben (Abbildung 1): Für das kleine i ohne Punkt, das große I mit Punkt, und ‚ sowie kleine und große s und g mit Häkchen nutzt das Paket die Tottaste [¡], also den Ring-Akzent. Fürs Spanische bringen [¡]+[!] und [¡]+[?] die umgedrehten Satzzeichen Á und À in den Text.
Für die Zeichen ¿ und ¯ der skandinavischen Sprachen ist leider keine Belegung mehr frei, weil es das o mit allen anderen Akzenten gibt. Hier wäre eine zusätzliche Tottaste nötig, etwa [#]. Mit ihr könnte das Programm auch griechische Buchstaben oder weitere diakritische Zeichen verstehen, beispielsweise den Punkt auf einem Buchstaben, Hacek-Akzente, doppelte Akzente, den Strich-Akzent und weitere.
Abbildung 1: Mit etwas Tk-Code ist es leicht, diese Sonderzeichen einzutippen.
Die Unicode-Zeichencodes der Alphabete sind auf [http://www.unicode.org/charts/] zu finden. Für das lateinische Alphabet plus Sonderzeichen sind die ersten vier Tabellen zuständig: Basic Latin, Latin-1 Supplement, Latin Extended-A und Latin Extended-B.
Für eigene Tastaturzuordnungen muss der Programmierer die passenden Codes für das »bind«-Kommando kennen:
pack [text .t] -expand y -fill both
bind .t <KeyPress> {
.t insert end "t%%K=%K %%A=%An"
.t see end
}
Dieses Skript fügt am Ende eines Textwidget den Code für jede gedrückte Taste ein. Auch ausgefallene Kombinationen sind damit zu meistern. (fjl)
01 set switch ""
02 foreach class [list Text Entry] {
03 bind $class <KeyPress-acute> {
04 if {$switch == ""} {
05 set switch "acute"
06 } else { set switch "" }
07 break
08 }
09 [...]
10 bind $class <Key> {
11 set i_ch "%A"
12 if {$switch ne "" && "%A" ne "{}"} {
13 if {$switch eq "acute"} {
14 switch -- %A {
15 " " {set i_ch "u00b4"}
16 a {set i_ch "u00e1"}
17 A {set i_ch "u00c1"}
18 e {set i_ch "u00e9"}
19 E {set i_ch "u00c9"}
20 [...]
21 }
22 } [...]
23 }
24
25 if {$i_ch ne "{}"} {
26 %W insert insert "$i_ch"
27 set switch ""
28 }
29 }
30 }
|