Peut-être que votre confusion vient du fait de ne pas avoir utilisé un terminal réel. À l'époque où les ordinateurs sérieux étaient de la taille de plusieurs réfrigérateurs verticaux, un terminal communiquait avec un ordinateur central via un câble série en utilisant uniquement des caractères et des caractères. Les caractères faisaient partie d'un jeu de caractères standardisé, par exemple ASCII ou EBCDIC, mais généralement ASCII. ASCII a 33 caractères de contrôle et l'opérateur du terminal les a envoyés en appuyant sur une touche spéciale (comme DEL) ou en maintenant enfoncée la touche CTRL et en appuyant sur une autre touche. L'ordinateur central n'a vu que le caractère de contrôle résultant; il ne savait pas sur quelles touches on avait appuyé pour produire le personnage.
Un programme d'émulation de terminal tel que xterm imite ce comportement. L'émulateur de terminal permet d'envoyer les 33 caractères de contrôle ASCII et Emacs recevra ces caractères s'ils sont envoyés. Mais Emacs est comme l'ordinateur central dans la description ci-dessus --- il n'a aucun moyen de savoir quelles touches ont été réellement pressées lorsque vous l'exécutez sous un émulateur de terminal. Donc, si vous appuyez sur CTRL et point-virgule, à moins que le programme d'émulation de terminal n'ait mappé ces touches sur un caractère ASCII, Emacs ne saura pas que quelque chose a été tapé.
Les émulateurs de terminal utilisent généralement les mappages suivants pour générer des caractères de contrôle † :
appuyez sur la touche ASCII
--------------------
ESCAPE 27
SUPPRIMER 127
RETOUR ARRIÈRE 8
CTRL + ESPACE 0
CTRL + @ 0
CTRL + A 1
CTRL + B 2
CTRL + C 3
etc...
CTRL + X 24
CTRL + Y 25
CTRL + Z 26
CTRL + [27
CTRL + \ 28
CTRL +] 29
CTRL + ^ 30
CTRL + _ 31
Notez que CTRL +; n'apparaît pas dans cette liste. Les terminaux seront simplement envoyer généralement le caractère imprimable attribué à la touche si CTRL + touche n'est pas mis en correspondance avec un caractère de contrôle. Donc, ce que votre émulateur de terminal vous dit en envoyant; seul, il ne sait pas quoi faire lorsque vous appuyez sur CTRL + ;.
Tout cela ne s'applique que si vous utilisez un terminal ou un programme d'émulation de terminal. Si vous exécutez Emacs en tant qu'application native sous un système de fenêtres, Emacs a un accès complet aux événements de frappe et pas seulement aux caractères. Emacs peut donc voir que vous avez appuyé simultanément sur CTRL et point-virgule et vous permet d'assigner une action à cette paire de touches.
† Les terminaux ont souvent des touches de fonction et des touches fléchées qui génèrent également des séquences de caractères comprenant des caractères de contrôle. Ces séquences commencent généralement par le code ASCII 27 (ESCAPE).
;
à Emacs, donc rien ne le capture , ce qui se passe c'est que Ctrl +; et nu; envoyer les mêmes informations. Laquelle est-ce: capture (c'est-à-dire qu'Emacs ne reçoit rien) ou perte d'informations (c'est-à-dire qu'Emacs reçoit;
)?