Возможно, ваша путаница возникает из-за того, что вы не использовали реальный терминал. Когда серьезные компьютеры были размером с несколько вертикальных холодильников, терминал связывался с центральным компьютером через последовательный кабель, используя только символы и символы. Символы были частью некоторого стандартизированного набора символов, например ASCII или EBCDIC, но обычно ASCII. ASCII имеет 33 управляющих символа, и оператор терминала отправил их, нажав специальную клавишу (например, DEL) или удерживая клавишу CTRL и нажимая другую клавишу. Центральный компьютер видел только управляющий символ; он не знал, какие клавиши были нажаты, чтобы создать персонажа.
Программа эмуляции терминала, такая как xterm, имитирует это поведение. Эмулятор терминала предоставляет способ отправки всех 33 управляющих символов ASCII, и Emacs получит эти символы, если они будут отправлены. Но Emacs похож на центральный компьютер в приведенном выше описании - он не может знать, какие клавиши были фактически нажаты, когда вы запускаете его под эмулятором терминала. Поэтому, если вы нажмете CTRL и точку с запятой, если программа эмуляции терминала не сопоставит эти нажатия клавиш с каким-либо символом ASCII, Emacs не будет знать, что что-то было напечатано.
Эмуляторы терминала обычно используют следующие сопоставления для генерации управляющих символов † :
нажатие клавиши ASCII
--------------------
ESCAPE 27
УДАЛИТЬ 127
BACKSPACE 8
CTRL + ПРОБЕЛ 0
CTRL + @ 0
CTRL + A 1
CTRL + B 2
CTRL + C 3
так далее...
CTRL + X 24
CTRL + Y 25
CTRL + Z 26
CTRL + [27
CTRL + \ 28
CTRL +] 29
CTRL + ^ 30
CTRL + _ 31
Обратите внимание, что CTRL +; не появляется в этом списке. Терминалы, как правило , просто отправить печатаемый символ , назначенный клавишу , если CTRL + клавиша не отображаются на управляющий символ. Так что ваш эмулятор терминала говорит вам, посылая; единственное, что он не знает, что делать, когда вы нажимаете CTRL + ;.
Все это применимо, только если вы используете терминал или программу эмуляции терминала. Если вы запускаете Emacs как собственное приложение в некоторой оконной системе, то Emacs имеет полный доступ к событиям нажатия клавиш, а не только к символам. Таким образом, Emacs может видеть, что вы нажали CTRL и точку с запятой вместе, и вы можете назначить действие этой паре нажатий клавиш.
† Терминалы часто имеют функциональные клавиши и клавиши со стрелками, которые также генерируют последовательности символов, которые включают управляющие символы. Эти последовательности обычно начинаются с кода ASCII 27 (ESCAPE).
;
в Emacs, так что ничто не захватывает его, что происходит, что Ctrl +; и голый; отправить ту же информацию. Что это: захват (т.е. Emacs ничего не получает) или потеря информации (т.е. Emacs получает;
)?