LUG-Braunschweig/ tastatureingabe

X11 server

Unter X11 hat jede Taste einen keycode, dem vom X11 server per Tabelle ein keysym zugeordnet wird. Diese Tabelle kannst Du mit xmodmap ansehen und verändern. Auch xev(1) zeigt das sehr gut. keycode und keysym werden vom X11 server an den X11 client geschickt.

X11-libs

Die meisten X11 clients werden mit den Standard X11 libraries gebaut, also libX11 und libXt oder gtk, kde, whatever. Da können auch noch irgendwelche Abbildungen zuschlagen, AFAIK, aber die kenne ich nicht.

xterm

Beim xterm kann man festlegen, was Zeichen der "Backarrow key" und "Delete" an das Pseudo-Terminal zur Anwendung schicken soll. Kann man per command line option oder mit Control + Button1 ändern.

Bei anderen Terminal-Emulatoren gibt es sicher ähnliche Funktionen.

console

Unter Linux auf der Konsole besitzt jede Taste auch einen keycode, dem vom Linux kernel mit internen key tables eine Funktion zugeordnet wird. Diese Tabellen kann man sich mit loadkeys(1) und dumpkeys(1) ansehen bzw. verändern.

serielles Terminal

Hier gibt\'s nicht viel einzustellen. Alle Zeichen werden so, wie sie von der seriellen Schnittstelle kommen, an den tty driver weitergereicht.

tty

Der Terminaltreiber kann im canonical mode sein, in dem die Eingabezeile editiert werden, Signal mit CTRL-C, CTRL-Z geschickt werden können, etc. Welche Zeichen Signale erzeugen und hier in Deinem Fall, welches Zeichen das erase character ist, kann man mit stty(1) ansehen und einstellen. Den canonical mode hast Du typischerweise, wenn Du z.B. von der shell ein cat aufrufst. Im canonical mode sieht der Prozeß, der am Terminal hängt, die Eingabezeile erst, wenn RETURN gedrückt wurde.

Im canonical mode kann man übrigens nicht in der Eingabezeile umherlaufen, sondern nur mit dem erase character (normalerwise BS oder DEL) das letzte Zeichen löschen.

Ohne canonical mode gehen alle Zeichen direkt zum Prozeß weiter.

Anwendung

Viele aktuelle shells, z.B. csh, tcsh, bash, zsh, etc. schalten aber den canonical mode aus, um mehr Kontrolle zu haben, also die Eingabe sofort zu sehen. Das brauchen sie, um z.B. completion mit TAB zu ermöglichen. Dann müssen sie aber auch das Editieren der Eingabezeile mit Cursor rechts/links, BS, DEL, etc. selbst machen. Wie da die Zeichen interpretiert werden hängt also von der Anwendung ab.

readline

Viele Anwendungen benutzen dazu die readline (und history) libraries. In denen kann man die Zuordnung von Eingaben zu Funktionen in /etc/inputrc und $HOME/.inputrc steuern.

andere

Andere machen es anders :-) Das ist dann abhängig von der Anwendung. Ein vi(1) oder vim(1) schaltet natürlich auch den canonical mode aus, um nicht erst nach Eingabe einer kompletten Zeile reagieren zu können. Ob und wie der im input mode Zeichen wie BS und DEL interpretiert, ist dann irgendwo in der Anwenung und/oder ihrer Konfiguration festgelegt. Viele lesen das erase character vom tty driver aus und benutzen das selbst auch für die Backspace-Funktion. Wo und wie man vim konfigurieren kann, habe ich mir aber noch nicht angesehen.

Autor: Urs Thürmann