mehr spass mit der (Deutschen) iBook Tastatur unter OSX

Ein paar Tips, Tricks, Konfigurationsdateien und Patches, um das Leben angenehmer zu gestalten

Ok... wo fang ich an... Ich bin hauptsächlich den Umgang mit Deutschen standard Wintel Tastaturen unter Linux und Windows gewohnt. Da haben sich etliche Handbewegungen recht tief in mein motorisches Langzeitgedächtnis gegraben. Und weil ich (trotz meines schönen neuen iBook) weiterhin jeden Tag mit diesen Dingern arbeite, wird sich daran auch so schnell nichts ändern.

Dabei ist natürlich klar, dass ein Schlepptop ein paar Einschränkungen bzgl. der Tastatur mit sich bringt, die sich nicht ändern lassen. Aber einige Dinge, die mich immer wieder aus dem Tipp-Takt brachten lassen sich ändern.

ALT-GR Sonderzeichen

Viele Sonderzeichen, die ich in der Shell oder beim Programmieren oft brauche sind auf deutschen Wintel Tastaturen über eine ALT-GR Tastenkombination erreichbar. Auf dem iBook greife ich da meist ins Leere.

ALT-GR
liegt bei Wintel rechts von der Space-Taste, das iBook hat da nur eine zweite command Taste - und die famose, nie benötigte enter Taste (das ist etwas anderes als return... Früher wurde die oft benutzt, um die standard Aktion eines Dialoges zu aktivieren - unter OS X ist sie recht nutzlos).
Die Lösung:
uControl erlaubt es, die Tastatur auf Kernel-Ebene so umzukonfigurieren, dass enter als alt/option verwendet werden kann. (Weiter hinten kommt noch ein Hack zu uControl) Alternativ kann auch DoubleCommand enter zu alt/option umbiegen (aber mit weniger Konfigurationskomfort - und uControl bring noch ein paar andere goodies mit)

Die Position der Sonderzeichen auf der Tastatur
hat so gut wie nichts mit der zu tun, die man aus der wintel-welt gewohnt ist: z.B. ist | (pipe) unter alt-7 zu erreichen, statt als ALT-GR-<. die Tilde (~, ALT-GR-+) ist als deadkey konfiguriert, so dass man erst alt+n und dann noch einmal Space drücken muss, um eine einzelne Tilde zu bekommen. Andere Problemkandidaten sind {,[, ],}, \ und @.
die Lösung:

Ein eigenes Tastaturlayout.

Das bastelt man sich zunächst einmal (in Classic) mit dem guten alten ResEdit: Aus der Classic System-Datei kopiert man sich die Deutsche Tastaturbelegung aus der kchr Ressource in eine neue Datei, definiert einen neuen Namen (z.B. Deutsch-PC) und ändert fröhlich drauflos. Um besser zu sehen was man tut, stellt man am besten die Tastaturansicht auf nummer 203 - das ist die iBook Ansicht. Das Ergebnis speichert man dann z.B. als deutschPC-resedit.rsrc

Ich habe mir eins gebastelt, das sich in diesen alt-Kombinationen vom Deutschen standard iBook Layout unterscheidet. Die Zeichen, die dadurch nicht mehr erreichbar sind, waren mir nicht so wichtig (ich hätte sowiso nicht auswendig gewusst, wie ich sie eingebe...).
Mit uControl kann ich dann nicht nur die grüne (alt), sondern auch die blaue (enter) Taste zur Eingabe dieser Kombinationen verwenden.
tastaturbelegung

Unter OSX.2 (10.2, oder jaguar) gehört das Ergebnis dann in das Verzeichnis Library/Keyboard Layouts/ im eigenen Homeverzeichnis. Laut diesem Atrikel sollte OS X eigentlich direkt mit diesem Layout im Ressource-Zweig der gespeicherten Datei arbeiten können - hat bei mir aber nicht geklappt. Also kopiert man den OS9 Ressource-Zweig in den Daten-Zweig einer neuen Datei - in der shell etwa so:

 
 mkdir ~/Library/Keyboard\ Layouts
 cat deutschPC-resedit.rsrc/rsrc > ~/Library/Keyboard\ Layouts/deutschPC-data.rsrc
 

Für OS X Versionen vor Jaguar ist das ganze etwas komplizierter.

Danach nur noch einmal neu anmelden, das neue Layout in der Systemsteuerung Landeseinstellungen unter Tastaturmenü aktivieren, schon fertig. ...zumindest für standard OSX Applikationen.

Wer noch viel mit Classic arbeitet, sollte sich die neu gebaute kchr Ressource auch in die System-Datei für Classic einbauen, damit nicht noch mehr Verwirrung auftritt...

Und natürlich hält sich XDarwin (der freie X-Windows Server für Max OS X) auch nicht dran. Der benutzt ein eigenes Tastatur-Belegungs Modell, das er (zumindest bei mir) beim Start von einer keymapping-Datei ableitet. Wie man die ändert, hab' ich noch nicht rausbekommen. Diese Tastaturbelegungen können aber mit dem Kommandozeilen-Tool xmodmap nach jedem Start des von XDarwin so geändert werden, dass sie dem oben gebauten Layout entsprechen. In meinem Beispiel:

xmodmap -e 'keycode  35 = ssharp question backslash dead_abovedot'
xmodmap -e 'keycode  38 = plus asterisk asciitilde'
xmodmap -e 'keycode  20 = q Q at guillemotright'
xmodmap -e 'keycode  58 = less greater bar'
xmodmap -e 'keycode  34 = 7 slash braceleft backslash'
xmodmap -e 'keycode  37 = 0 equal braceright dead_macron'
xmodmap -e 'keycode  36 = 8 parenleft bracketleft dead_tilde'
xmodmap -e 'keycode  33 = 9 parenright bracketright periodcentered'

Ich habe diese Befehle alle in meine .xinitrc aufgenommen, die beim Start von XDarwin normalerweise ausgeführt wird. Wer OroborOSX verwendet, muss ein bischen trixen...

Nachtrag: Mit Apples X11 seit beta 3 scheint das soweit behoben - der X Server verwendet das Aqua Tastaturlayout anscheinend ohne Probleme.

Meta-Key Kommandos

In Apples Entwicklungsabteilung sizten wohl einige Emacs-Fans. Nicht nur, dass man in der Shell die aktuelle Kommandozeile mit vielen Emacs-Tastenkürzeln bearbeiten kann (das waren nicht Apples Entwickler sondern die der freien tcsh bzw. bash) - auch in Textfeldern von Cocoa Applikationen klappen viele von ihnen dank InputManager automatisch. So Springt z.B. ctrl-a an den Anfang der Zeile, ctrl-e ans Ende, ctrl-k (kill) löscht bis ans Ende der Zeile, ctrl-d (delete) löscht das folgende Zeichen (für alle ohne echte delete Taste)...

Einfach mal in TextEdit oder ProjectBuilder ausprobieren und freuen.

Unter Linux (bzw. in Emacs auf allen Plattformen) habe ich mich aber auch an ein weiteres Set von Tastaturkürzeln gewöhnt: sogenannte Meta-key Kombinatioen. Besonders hilfreich sind z.B.

... und das alles noch mit kontext-abhängigen sinnvollen Definitionen von Wort...

Um diese Kommandos zu aktivieren muss man entweder seinen Meta-key (wie bei shift oder command) gedrückt halten, während man die andere Taste drückt, oder man kann erst ESC drücken und loslassen, und danach die andere Taste.

Die zweite Variante klappt für Kommandozeilen Programme eigentlich immer und überall - macht aber (wegen meines oben angesprochenen motorischen Langzeitgedächtnisses) nicht so viel Spass. Für die erste braucht man hingegen einen Meta-Key. Und dann bitte auch noch einen, den ich - wie ich es gewohnt bin - mit dem linken Daumen drücken kann!

Terminal.app bietet zwar die Option, alt als Meta zu verwenden, das hilft aber eigentlich nur denen, die mit einem US Tastaturlayout arbeiten. Mit der normalen Deutschen Tastaturbelegung (oder auch mit meiner oben gebastelten Deutsch-PC) kann man sonst solche essentiellen Zeichen wie | (pipe) oder all die anderen oben umdefinierten nicht tippen. Und ohne pipe macht die Shell nicht wirklich Spass...

Also habe ich einen Patch zu den Quelltexten von uControl gebastelt, der einem erlaubt, eine Taste zur falschen Meta Taste zu machen: so lange diese Taste gedrückt ist, wird vor jedem anderen Tastendruck ein ESC eingeschummelt. Ich habe diesen Patch an Shane Celis, den Maintainer von uControl weitergeschickt und hoffe, das er in der nächsten Version enthalten sein wird.

Damit kann man jetzt schon mal in der Shell, in Emacs und in vielen anderen Unix-Tools so arbeiten, als hätte man einen echten Meta-key. Ich habe die original alt Taste zu Meta umfunktioniert, die famose enter Taste erzeugt mir die alt-Kombinationen und Terminal.app weiss offiziell nichts von Meta sondern schickt mit enter (kommt als alt an) brav die Sonderzeichen.

So weit, so gut... aber was ist nun mit den Cocoa Applikationen? bleiben die bei den ctrl-Kommandos?

Tata!! Auftritt: KeyBindings und NSInputServer

Man baue sich ein KeyBindingDictionary und lege es unter ~/Library/KeyBindings/DefaultKeyBinding.dict ab:
 
 /* ~/Library/KeyBindings/DefaultKeyBinding.dict */
 {
        "\033" = {  /* ESC */
                "f" = "moveWordForward:"; 
                "b" = "moveWordBackward:"; 
                "<" = "moveToBeginningOfDocument:";
                ">" = "moveToEndOfDocument:";  
                "d" = "deleteWordForward:";
                "c" = "capitalizeWord:";
                "u" = "uppercaseWord:";
                "l" = "lowercaseWord:";
                "^h" = "deleteWordBackward:";  
                "\010" = "deleteWordBackward:";  /* ESC backspace */
                "\177" = "deleteWordBackward:";  /* ESC delete */
        };
        "^x" = {
                "^g" = "abort:";
                "x" = "swapWithMark:";
        };
 }
 


 up

 Autor:
Heiko Hellweg, geändert: Mai 2003