In einem Beitrag in einem Forum über Tastaturen, die sich besonders gut zum Programmieren eignen, hat jemand beschrieben, wie er auf seinem Mac die Taste Capslock benutzt hat, um eine weitere Ebene „Option“(ähnlich Shift, Alt, Ctrl, …) einzuführen, um bequemeren Zugriff auf Sonderzeichen zu bekommen (z.B. die Klammern, die auf der deutschen Tastatur umständlicher zu erreichen sind als auf der US-Tastatur). Das fand ich sehr interessant und möchte nun einen Weg beschreiben, unter Linux folgende Belegung bei Halten der Capslock-Taste hinzubekommen:
Nogger, der Autor des o.g. Beitrags, hat auf dem Mac das Tool Ukelele verwendet, um zunächst die Taste Capslock als „Option“-Taste zu definieren und dann neue Kombination definiert, z.B. „Option + j = {“ und
„Option + k = }“.
Auf die Schnelle habe ich unter Linux keinen Editor gefunden, mit dem ich etwas Ähnliches über eine GUI lösen könnte. Daher habe ich mir überlegt, eine eigene „Tastaturbelegung“ analog zu „de“ zu erstellen, die die Klammern auf andere Tasten legt (z.B. die spitzen Klammern auf o und p). Diese neue Tastaturbelegung soll aktiv werden, solange die Capslock-Taste gehalten wird. Ich habe vor, zwei Belegungen zu verwenden: „de“ als Standard und für Capslock die neue „prog“, mit speziellen Belegungen zum Programmieren.
Tastatureinstellungen
Dass beim Halten von Capslock die Belegung geändert wird, kann über die System-Einstellungen unter Tastatur direkt geändert werden (ich nutze Linux Mint mit Cinnamon): Einstellungen/Tastatur/Tastaturbelegungen und dort „Optionen …“, siehe Screenshot. Dort kann unter „Switching to another Layout“ die Option „Caps Lock (while pressed)…“ ausgewählt werden. Die ursprüngliche Capslock-Funktion ist dann über „Alt+Capslock“ erreichbar. Diese Option schaltet nun zwischen den aktivierten Tastaturbelegungen um. Was genau passiert, wenn mehr als zwei Belegungen aktiviert sind, habe ich nicht ausprobiert.
Tastaturbelegung anlegen
Unter Linux liegen die Tastaturbelegungen wie z.B. „de“ im Verzeichnis /usr/share/X11/xkb/symbols/. Zunächst habe ich mir die Datei „de“ angeschaut, um herauszufinden, wie den Tasten Zeichen zugeordnet werden. Zum Glück ist die Datei recht gut lesbar. Was ich vorhabe, ist folgendes Mapping, daher habe ich mir zum Einen die Tastencodes dafür herausgesucht (welchen Code hat z.B. „o“) und die Bezeichner für die Sonderzeichen (wie heißt z.B. die geschweifte Klammer „}“)?
- ß = (
- ` = )
- ü = {
- + = }
- ä = [
- # = ]
- o = <
- p = >
Mithilfe dieser Infos kann ich nun eine neue Datei erstellen: /usr/share/X11/xkb/symbols/prog mit diesem Inhalt:
default partial alphanumeric_keys xkb_symbols "basic" { // This layout only uses the following keys for brackets: // ß = ( // ` = ) // ü = { // + = } // ä = [ // # = ] // o = < // p = > name[Group1]= "Programmer (programmers layout for caps lock key)"; key <AE11> { [ parenleft ] }; key <AE12> { [ parenright ] }; key <AD11> { [ braceleft ] }; key <AD12> { [ braceright ] }; key <AC11> { [ bracketleft ] }; key <BKSL> { [ bracketright ] }; key <AD09> { [ less ] }; key <AD10> { [ greater ] }; };
Es reicht leider nicht, nur diese Datei anzulegen. Die neue Belegung „Programmer…“ wird erst dann in den Einstellungen angezeigt, wenn man auch die die XML-Datei /usr/share/X11/xkb/rules/evdev.xml anpasst und darin einen neuen Eintrag für die neue Belegung hinzufügt.
Dafür sucht man sich den Knoten „<layoutList>“ und fügt darin einen neuen layout-Knoten hinzu, der die Informationen zu unserer neuen Belegung enthält:
<layout> <configItem> <name>prog</name> <shortDescription>pg</shortDescription> <description>Programmer (programmers layout for caps lock key)</description> <languageList> <iso639Id>eng</iso639Id> </languageList> </configItem> <variantList> </variantList> </layout>
Damit fehlt nur noch, den Cache der Tastaturbelegungen zu leeren:
sudo dpkg-reconfigure xkb-data
Dann muss das Einstellungsfenster neu geöffnet werden und die neue Tastaturbelegung kann hinzugefügt werden:
Nun kann schon die Umschaltung direkt verwendet werden. Möglicherweise geht das alles auch viel einfacher, aber so funktioniert es bei mir zumindest und es war nicht übermäßig kompliziert anzulegen.