Login
Newsletter
Werbung

Do, 14. November 2019, 15:00

X.org, CapsLock und die Hyper-Taste in Emacs

Konzeptioneller Überblick

Bei der Konfiguration der Tastatur sind ein paar Dinge auseinanderzuhalten. Zunächst ist von Bedeutung, dass das Tastatur-Layout auf Linux’ virtueller Konsole unabhängig von demjenigen in X.org ist. Die hier vorgestellten Einstellungen haben deshalb keinen Einfluss auf die Verarbeitung von Tastendrücken auf der virtuellen Konsole. Demgegenüber richtet sich die Verarbeitung von Tastendrücken in X-basierten Terminal-Emulatoren zwar (zwangsläufig) nach derjenigen von X, aber die meisten Emulatoren wissen wenig damit anzufangen, wenn sie ungewöhnliche Tastendrücke erhalten. Insbesondere reichen sie sie auch nicht an Curses-basierte Konsolenanwendungen weiter. Deshalb ist es mit der hier vorgestellten Konfiguration nicht möglich, auch Konsolenanwendungen um die Erkennung derartiger Tastendrücke zu erweitern. Es gibt allerdings hier nicht weiter behandelte Möglichkeiten, diese Beschränkung im Einzelfall mithilfe gewisser Hacks zu umgehen. Solche Versuche haben allerdings gegenüber der hier vorgestellten Methode den Nachteil, dass sie anwendungsspezifisch sind und es nicht ermöglichen, die zusätzlichen Tastendrücke jedem X-Programm zur Verfügung zu stellen.

Beschränkt man sich auf X, ist zu unterscheiden:

  • Tastendrücke generieren hardware-spezifische sog. Scancodes. Die Treiber für die jeweilige Tastatur im Linux-Kernel (Kernel-Modul) vereinheitlichen diese Scancodes in Keycodes. Scancodes werden in diesem Beitrag nicht weiter behandelt.
  • Der Linux-Kernel generiert für den Druck jeder Taste ein Event, das er mit einer bestimmten Kennziffer, eben dem Keycode versieht. Dieses Event wird u.a. vom X-Server (X.org) empfangen.
  • X.org ordnet jedem dieser Keycode ein oder mehere Keysyms zu, die angeben, was passieren soll, wenn X.org ein solches Event erhält. Der X-Server leitet das Event in angereicherter Form an die einzelnen X-Programme (Clients) weiter, denen die Auflösung von Keycodes in Keysyms dann überlassen wird (Programme sind zu dieser Operation nicht verpflichtet. Namentlich Spiele machen davon oft keinen Gebrauch, weil es bei ihnen weniger um Text- als mehr um Echtzeiteingaben geht, z.B. Springen durch Druck auf die Umschalttaste). Dabei greifen sie freilich auf die Konfiguration des X-Servers zurück. Der Client ermittelt dann anhand des Standes der Modifikator-Tasten, welches der zugeordneten Keysyms das vom Nutzer gewollte ist.
  • Natürlich erzeugen auch die Modifikator-Tasten selbst Keycodes, die dann in Keysyms umgesetzt werden. Diese werden auch an die X-Clients weitergeleitet, von diesen aber meist ignoriert, denn der X-Server kümmert sich schon selbst darum, bei jedem Tasten-Event den Stand der Modifikator-Tasten anzugeben. Bei den Modifikator-Tasten kann man dann zwei Typen beobachten: solche, die man für die Aktivierung des Modifikators gedrückt halten muss (etwa die Umschalttaste und Strg) sowie solche, die den Modifikator einfach nur umschalten (etwa die Feststelltaste [CapsLock] und NumLock).

Alle diese Information (bis auf Scancodes) kann man sich mit dem Programm xev(1) anschauen.

Für die Zwecke dieses Beitrags sind vor allem die Modifier-Keysyms interessant. X kennt eine ganze Reihe davon: Alt, Strg und die Umschalttaste etwa werden von X den entsprechenden Modifier-Keysyms zugeordnet. Dasselbe gilt für die auf europäischen Tastaturen vorhandene AltGr-Taste, die X dem Keysym mit dem ansprechenden Namen ISO_Level3_Shift zuordnet. Die Windows-Taste wird von X einem Keysym mit dem Namen Super zugeordnet. Kaum eine Tastatur bestitzt heute dagegen noch eine Taste, die einen Keycode generiert, den X dem Hyper-Modifier zuordnet. Folgerichtig hat auch kaum ein Programm Tastenkombinationen mit der Hyper-Taste vorkonfiguriert. Hyper ist deshalb der ideale Kandidat für eigene Tastenkombinationen, die kaum je im Konflikt mit den vorkonfigurierten Tastenkombinationen eines Programms stehen werden. Nachfolgend wird es deshalb darum gehen, X so zu konfigurieren, dass dem von der Feststelltaste ausgelösten Keycode nicht mehr das Keysym CapsLock, sondern das Keysym Hyper_L zugeordnet wird. Außerdem muss X mitgeteilt werden, dass Hyper_L einen anderen Modifikator darstellt als namentlich Super (Windows-Taste), denn u.a. mit einem deutschen Tastatur-Layout behandelt X die beiden Keysyms standardmäßig identisch.

Kommentare (Insgesamt: 16 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung