Talvez sua confusão resulte de não ter usado um terminal real. Quando computadores sérios eram do tamanho de vários refrigeradores verticais, um terminal se comunicava com um computador central por um cabo serial usando apenas caracteres e caracteres. Os caracteres faziam parte de alguns conjuntos de caracteres padronizados, por exemplo, ASCII ou EBCDIC, mas geralmente ASCII. O ASCII possui 33 caracteres de controle e o operador do terminal os enviou pressionando uma tecla especial (como DEL) ou mantendo pressionada a tecla CTRL e pressionando outra tecla. O computador central viu apenas o caractere de controle resultante; não sabia quais teclas foram pressionadas para produzir o personagem.
Um programa de emulação de terminal, como o xterm, imita esse comportamento. O emulador de terminal fornece uma maneira de enviar todos os 33 caracteres de controle ASCII e o Emacs receberá esses caracteres se forem enviados. Mas o Emacs é como o computador central na descrição acima - ele não tem como saber quais teclas foram realmente pressionadas quando você o executa em um emulador de terminal. Portanto, se você pressionar CTRL e ponto e vírgula, a menos que o programa de emulação de terminal tenha mapeado essas teclas para algum caractere ASCII, o Emacs não saberá que algo foi digitado.
Emuladores de terminal normalmente usam os seguintes mapeamentos para gerar caracteres de controle † :
pressionar ASCII
--------------------
ESCAPE 27
DELETE 127
BACKSPACE 8
CTRL + ESPAÇO 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
Observe que CTRL +; não aparece nessa lista. Terminais geralmente basta enviar o carácter de impressão atribuído a chave se CTRL + chave não está mapeado para um caractere de controle. Então, o que seu emulador de terminal está dizendo a você enviando; sozinho é que ele não sabe o que fazer quando você pressiona CTRL + ;.
Tudo isso se aplica apenas se você estiver usando um terminal ou um programa de emulação de terminal. Se você estiver executando o Emacs como um aplicativo nativo em algum sistema de janelas, o Emacs terá acesso total aos eventos de pressionamento de tecla e não apenas aos caracteres. Assim, o Emacs pode ver que você pressionou CTRL e ponto e vírgula juntos e permite atribuir uma ação a esse par de pressionamentos de tecla.
† Os terminais geralmente têm teclas de função e teclas de seta que também geram seqüências de caracteres que incluem caracteres de controle. Essas seqüências geralmente começam com o código ASCII 27 (ESCAPE).
;
para o Emacs, então nada está capturando , o que está acontecendo é que Ctrl +; e nua; envie a mesma informação. Qual é: captura (por exemplo, o Emacs não recebe nada) ou perda de informações (por exemplo, o Emacs recebe;
)?