Po naciśnięciu klawisza lub kombinacji klawiszy w terminalu jest on przesyłany do aplikacji działającej w terminalu jako sekwencja jednego lub więcej znaków. Na przykład po naciśnięciu aaplikacja odbiera a
. Po naciśnięciu Enteraplikacja otrzymuje znak CR
(aka ^M
(wymawia się „control-emm”), aka znak numer 13, aka \r
lub \015
). Kombinacje klawiszy Altsą zwykle przesyłane jako znak ESC
(np. ^[
Aka \e
lub \033
), a następnie sekwencja dla klawisza lub kombinacji klawiszy bez Alt. Klawisze funkcyjne i inne kombinacje klawiszy są przesyłane jako sekwencje specjalne rozpoczynające się od \e[
lub \eO
.
Sekwencje specjalne nie są w pełni znormalizowane, a terminale zwykle ignorują określone atrybuty dla niektórych kluczy. Na przykład Ctrl+ Shift+ letterjest często przesyłany domyślnie dokładnie tak jak Ctrl+ letter.
Możesz zobaczyć, co twój terminal wysyła dla kombinacji klawiszy, naciskając Ctrl+, Va następnie tę kombinację klawiszy w wierszu poleceń powłoki, C-q
lub C-h c
po kombinacji klawiszy w Emacsie.
W przypadku niektórych emulatorów terminali można skonfigurować sekwencje specjalne dla każdego klucza. Na terminalach, to odbywa się za pośrednictwem zasobów X . Większość ustawień odczytuje zasoby od ~/.Xresources
momentu uruchomienia X i można ręcznie załadować plik 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~")
Powszechna konwencja wykorzystuje sekwencje specjalne formy ESC [ number1 ; number2 ~
dla klawiszy funkcyjnych z modyfikatorami. number1
oznacza klawisz funkcyjny ( 15
na 24
na F5celu F12- w przypadku przyczyn historycznych F1 do F4mieć różne sekwencje wyjścia) i number2
wskazuje modyfikator ( 2
o Shift, 3
o Meta, 5
o Ctrl, 7
o Ctrl+ Metai dodać 1 dla Shiftco najmniej jednej Ctrllub Meta).
Emacs tłumaczy sekwencje specjalne na wewnętrzną reprezentację klucza poprzez input-decode-map
lublocal-function-key-map
(lub function-key-map
przed Emacsem 23).
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
infocmp $TERM
?