Wie kommen die Zeichen von der Tastatur in die Applikation?

Gast #2790593
Lesenswert?

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?

-Was sendet die Tastatur überhaupt? An welcher Stelle wird jede Taste in 
ein Zeichen umgewandelt?
-Wenn ich auf einem tty bin, wer fängt Tastenkombinationen wie Alt+F1 
etc. ab, ist das direkt der Kernel?
-Mit wem ist der Terminalemulator auf einem tty verbunden, also woher 
bekommt er die Tastatureingaben und an wen liefert er die Zeichen aus?
-Müssen grundsätzlich alle Tastatureingaben erstmal durch die Shell, 
wenn ein Programm in der Shell gestartet wurde? Könnte also die Shell 
grundsätzlich bestimmte Eingaben abfangen und nicht durchreichen?
Gast #2791017
Lesenswert?

tty schrieb:
> -Was sendet die Tastatur überhaupt? An welcher Stelle wird jede Taste in
> ein Zeichen umgewandelt?

Das ist schon eine falsche Frage - es gibt kein Zeichen Alt (ebensowenig 
wie Shift oder Control). Die Sache ist deutlich komplizierter, 
eigentlich zu kompliziert um es hier zu erklären. Nur als Beispiel: wenn 
du die Tasten Alt und Ctrl und M gleichzeitig drückst, entsteht im Lauf 
der weiteren Verarbeitung das Zeichen µ.

Gruss Reinhard
#2791578
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren