Perhaps your confusion arises from not having used an actual terminal. Back when serious computers were the size of several upright refrigerators, a terminal communicated with a central computer over a serial cable using characters and characters only. The characters were part of some standardized character set, e.g. ASCII or EBCDIC, but typically ASCII. ASCII has 33 control characters and the terminal operator sent them by pressing a special key (such as DEL) or by holding down the CTRL key and pressing another key. The central computer only saw the resulting control character; it did not know what keys were pressed to produce the character.
A terminal emulation program such as xterm mimics that behavior. The terminal emulator provides a way to send all 33 ASCII control characters and Emacs will receive those characters if they are sent. But Emacs is like the central computer in the above description--- it has no way of knowing what keys were actually pressed when you run it under a terminal emulator. So if you press CTRL and semicolon, unless the terminal emulation program has mapped those keypresses to some ASCII character, Emacs will not know that anything has been typed.
Terminal emulators typically use the following mappings to generate control characters†:
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
Note that CTRL+; does not appear in that list. Terminals will usually just send the printable character assigned to key if CTRL+key isn't mapped to a control character. So what your terminal emulator is telling you by sending ; alone is that it doesn't know what to do when you press CTRL+;.
All this applies only if you're using a terminal or a terminal emulation program. If you're running Emacs as a native application under some window system, then Emacs has full access to the keystroke events and not just characters. So Emacs can see that you pressed CTRL and semicolon together and allow you to assign an action to that keystroke pair.
†Terminals often have function keys and arrow keys that also generate sequences of characters that include control characters. These sequences typically begin with ASCII code 27 (ESCAPE).
;
to Emacs, so nothing is capturing it, what's happening is that Ctrl+; and bare ; send the same information. Which one is it: capture (i.e. Emacs receives nothing), or loss of information (i.e. Emacs receives;
)? – Gilles 'SO- stop being evil' Oct 12 '14 at 17:21C-;
in terminal. What happens if you typeC-v C-;
in plain bash? – artm Oct 12 '14 at 17:33;
inemacs -nw
irrespectively whether I hit;
orC-;
. – WeSenseASoulInSearchOfAnswers Oct 12 '14 at 17:43bash
just like emacs prints just bare;
. – WeSenseASoulInSearchOfAnswers Oct 12 '14 at 17:45