tty schrieb:
> Hi, ich versuche gerade, in vim die <Alt> Taste zum Laufen zu bekommen.
> Dabei fällt mir auf, dass vim in einem xterm ein anderes Verhalten zeigt
> als in der KDE Konsole oder auf einem tty.
>
> Daher meine Frage: Welche Ebenen durchläuft ein Tastendruck, bis er bei
> der Applikation ankommt?
Alle Angaben ohne Gewähr, ist relativ kompliziert...
>
> -Was sendet die Tastatur überhaupt?
Key Codes. Am besten lernst du dies wenn du dich mit V-USB und dem
Keyboard Beispiel.
Wobei die Shift CTRL etc. Tasten "Modifier" sind, und mit anderen Tasten
gleichzeitig gedrückt werden können. z.B. eine Tastenkombination mit
<A>+<B> würde von der Tastatur her nicht funktionieren.
Es wird jedoch ein Keyboard Event generiert wenn du die Shift Taste
drückst, damit startet man ja unter Windows sogar irgendwelche
Eingabehilfen.
> An welcher Stelle wird jede Taste in
> ein Zeichen umgewandelt?
dein X-Server, bzw. GTK / KDE kann da auch noch mitwirken...
Daher gibt es warscheinlich bei Xterm / KDE Terminal Unterschiede...
> -Wenn ich auf einem tty bin, wer fängt Tastenkombinationen wie Alt+F1
> etc. ab, ist das direkt der Kernel?
Gute Frage, ich glaube nicht, eher initd oder so. Die <sys rq>
(printscreen) Kombinationen mit denen du z.B. auch den Init killen
kannst sind die einzigen die direkt im Kernel gehandelt werden. IMHO
> -Mit wem ist der Terminalemulator auf einem tty verbunden, also woher
> bekommt er die Tastatureingaben und an wen liefert er die Zeichen aus?
/dev/stdin?
Du musst ja auch das Keyboard Layout zwei mal festlegen, einmal für die
GUI und ein mal für die ttys.
> -Müssen grundsätzlich alle Tastatureingaben erstmal durch die Shell,
> wenn ein Programm in der Shell gestartet wurde?
Ja, die Shell leitet aber fast alles weiter.
Ein Prozess (z.B. grep) erhält eigentlich nur 3 File Deskriptoren,
stdin, stdout, stderr. Die müssen auch nicht von einer Tastatur kommen,
auch wenn das oft der Fall ist.
Könnte also die Shell
> grundsätzlich bestimmte Eingaben abfangen und nicht durchreichen?
Natürlich. Du kannst auch eine eigene "Shell" schreiben, also eine
Applikation die eine andere Applikation ausführen kann. Du kannst z.B.
"a" nicht weiterleiten, und das mit einer anderen Funktion versehen.
Wenn du wirklich interessiert bist, schaue dir den den Quellcode an;-)
mfg Andreas