Wenn Sie eine Taste oder Tastenkombination in einem Terminal drücken, wird diese als Folge von einem oder mehreren Zeichen an die im Terminal ausgeführte Anwendung übertragen. Wenn Sie beispielsweise drücken a, wird die Anwendung empfangen a
. Wenn Sie drücken Enter, erhält die Anwendung das Zeichen CR
(aka ^M
(ausgesprochen "control-emm"), aka Zeichen Nummer 13, aka \r
oder \015
). Tastenkombinationen Altwerden normalerweise als Zeichen ESC
(a.ka. ^[
aka \e
oder \033
) übertragen, gefolgt von der Sequenz für die Taste oder Tastenkombination ohne Alt. Funktionstasten und andere Tastenkombinationen werden als Escape-Sequenzen übertragen, die mit \e[
oder beginnen \eO
.
Die Escape-Sequenzen sind nicht vollständig standardisiert, und Terminals ignorieren normalerweise bestimmte Attribute für bestimmte Schlüssel. Beispielsweise wird Ctrl+ Shift+ letterhäufig standardmäßig genau wie Ctrl+ übertragen letter.
Sie können sehen, was Ihr Terminal für eine Tastenkombination sendet, indem Sie Ctrl+ Vgefolgt von dieser Tastenkombination in einer Shell-Eingabeaufforderung oder C-q
oder C-h c
gefolgt von der Tastenkombination in Emacs drücken.
Mit einigen Terminalemulatoren können Sie die Escape-Sequenzen für jeden Schlüssel konfigurieren. Unter Xterm erfolgt dies über X-Ressourcen . Die meisten Setups lesen Ressourcen ab ~/.Xresources
dem Start von X, und Sie können die Datei manuell mit laden xrdb -merge ~/.Xresources
.
Term.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <key>percent: string("\033[37;6~")
Eine übliche Konvention verwendet Escape-Sequenzen des Formulars ESC [ number1 ; number2 ~
für Funktionstasten mit Modifikatoren. number1
gibt die Funktionstaste ( 15
auf 24
für F5zu F12- aus historischen Gründen F1 durch F4verschiedene Escape - Sequenzen haben) und number2
gibt den Modifikator ( 2
für Shift, 5
für Ctrl, 3
für Meta, 8
für Ctrl+ Meta, und fügen Sie 1 für + Shift- nein, ist es nicht sehr konsistent).
Emacs übersetzt Escape-Sequenzen durch input-decode-map
oderlocal-function-key-map
(oder function-key-map
vor Emacs 23) in seine interne Schlüsseldarstellung .
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
infocmp $TERM
?