Forse la tua confusione deriva dal non aver usato un vero terminale. Quando i computer seri avevano le dimensioni di diversi frigoriferi verticali, un terminale comunicava con un computer centrale tramite un cavo seriale usando solo caratteri e caratteri. I caratteri facevano parte di alcuni set di caratteri standardizzati, ad esempio ASCII o EBCDIC, ma in genere ASCII. ASCII ha 33 caratteri di controllo e l'operatore terminale li ha inviati premendo un tasto speciale (come DEL) o tenendo premuto il tasto CTRL e premendo un altro tasto. Il computer centrale vedeva solo il carattere di controllo risultante; non sapeva quali tasti fossero premuti per produrre il personaggio.
Un programma di emulazione terminale come xterm imita quel comportamento. L'emulatore di terminale fornisce un modo per inviare tutti i 33 caratteri di controllo ASCII e Emacs riceverà quei caratteri se inviati. Ma Emacs è come il computer centrale nella descrizione sopra --- non ha modo di sapere quali tasti sono stati effettivamente premuti quando lo si esegue sotto un emulatore di terminale. Quindi, se si preme CTRL e punto e virgola, a meno che il programma di emulazione terminale non abbia mappato i tasti premuti su alcuni caratteri ASCII, Emacs non saprà che è stato digitato qualcosa.
Gli emulatori di terminali utilizzano in genere i seguenti mapping per generare caratteri di controllo † :
tasto ASCII
--------------------
ESCAPE 27
ELIMINA 127
BACKSPACE 8
CTRL + SPAZIO 0
CTRL + @ 0
CTRL + A 1
CTRL + B 2
CTRL + C 3
eccetera...
CTRL + X 24
CTRL + Y 25
CTRL + Z 26
CTRL + [27
CTRL + \ 28
CTRL +] 29
CTRL + ^ 30
CTRL + _ 31
Si noti che CTRL +; non appare in quell'elenco. I terminali di solito inviano semplicemente il carattere stampabile assegnato alla chiave se CTRL + chiave non è mappato su un carattere di controllo. Quindi cosa ti dice il tuo emulatore di terminale inviando; da solo è che non sa cosa fare quando si preme CTRL + ;.
Tutto ciò si applica solo se si utilizza un terminale o un programma di emulazione terminale. Se stai eseguendo Emacs come un'applicazione nativa in un sistema a finestre, Emacs ha pieno accesso agli eventi di battitura e non solo ai caratteri. Quindi Emacs può vedere che hai premuto CTRL e punto e virgola insieme e ti consente di assegnare un'azione a quella coppia di tasti.
† I terminali hanno spesso tasti funzione e tasti freccia che generano anche sequenze di caratteri che includono caratteri di controllo. Queste sequenze in genere iniziano con il codice ASCII 27 (ESCAPE).
;
ad Emacs, quindi nulla lo sta catturando , quello che sta succedendo è che Ctrl +; e nudo; inviare le stesse informazioni. Quale è: acquisizione (ovvero che Emacs non riceve nulla) o perdita di informazioni (ovvero che Emacs riceve;
)?