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 comunicava com um computador central através de um cabo serial usando apenas caracteres e caracteres. Os caracteres faziam parte de algum conjunto de caracteres padronizado, por ex. ASCII ou EBCDIC, mas normalmente ASCII. O ASCII possui 33 caracteres de controle e o operador do terminal os enviou pressionando uma tecla especial (como DEL) ou pressionando a tecla CTRL e pressionando outra tecla. O computador central só viu o caractere de controle resultante; não sabia quais teclas foram pressionadas para produzir o personagem.
Um programa de emulação de terminal, como 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 sob 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 esses pressionamentos de tecla 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 † :
keypress ASCII -------------------- ESCAPE 27 DELETE 127 BACKSPACE 8 CTRL+SPACE 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. Os terminais normalmente enviarão apenas o caractere imprimível atribuído à chave se a tecla CTRL + não estiver mapeada para um caractere de controle. Então, o que seu emulador de terminal está lhe dizendo enviando; sozinho é que ele não sabe o que fazer quando você pressiona CTRL +;.
Tudo isso se aplica somente 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. Então o Emacs pode ver que você pressionou CTRL e ponto-e-vírgula juntos e permite que você atribua uma ação a esse par de teclas.
† Os terminais geralmente possuem teclas de função e teclas de seta que também geram sequências de caracteres que incluem caracteres de controle. Essas seqüências geralmente começam com o código ASCII 27 (ESCAPE).