Lorsque vous appuyez sur une touche ou une combinaison de touches dans un terminal, elle est transmise à l'application exécutée dans le terminal sous la forme d'une séquence d'un ou plusieurs caractères. Par exemple, lorsque vous appuyez sur a, l'application reçoit a
. Lorsque vous appuyez sur Enter, l'application reçoit le caractère CR
(aka ^M
(prononcé «control-emm»), aka caractère numéro 13, aka \r
ou \015
). Les combinaisons de touches impliquant Altsont généralement transmises sous la forme du caractère ESC
( ^[
alias aka \e
ou \033
) suivi de la séquence de la touche ou de la combinaison de touches sans Alt. Les touches de fonction et autres combinaisons de touches sont transmises sous forme de séquences d'échappement commençant par \e[
ou \eO
.
Les séquences d'échappement ne sont pas entièrement standardisées et les terminaux ignorent généralement certains attributs pour certaines clés. Par exemple, Ctrl+ Shift+ letterest souvent transmis exactement comme Ctrl+ letterpar défaut.
Vous pouvez voir ce que votre terminal envoie pour une combinaison de touches en appuyant sur Ctrl+ Vsuivi de cette combinaison de touches dans une invite du shell, ou C-q
ou C-h c
suivi de la combinaison de touches dans Emacs.
Avec certains émulateurs de terminal, vous pouvez configurer les séquences d'échappement pour chaque clé. Sur xterm, cela se fait par le biais des ressources X . La plupart des configurations lisent les ressources à partir du ~/.Xresources
démarrage de X, et vous pouvez charger le fichier manuellement avec 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~")
Une convention courante utilise des séquences d'échappement du formulaire ESC [ number1 ; number2 ~
pour les touches de fonction avec des modificateurs. number1
indique la touche de fonction ( 15
pour 24
pour F5à F12- pour des raisons historiques, F1 à F4ont des séquences d'échappement différentes) et number2
indique le modificateur ( 2
pour Shift, 3
pour Meta, 5
pour Ctrl, 7
pour Ctrl+ Metaet ajoutez 1 pour Shiftavec au moins un Ctrlou Meta).
Emacs traduit les séquences d'échappement en sa représentation de clé interne via input-decode-map
oulocal-function-key-map
(ou function-key-map
avant Emacs 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
?