C-[ is equivalent to the escape key on US English keyboards, thus, any attempt at binding it will mess up M- behaviour.
Emacs seems to have no trouble telling <escape> and C-[ apart in GUI frames. The following works fine and bindings starting with M- remain to be working:
(global-set-key (kbd "<escape>") (lambda () (interactive) (message "<escape>")))
However, if I bind
(global-set-key (kbd "C-[") (lambda () (interactive) (message "C-[")))
suddenly emacs goes crazy and binding like M-x break. Moreover, pressing C-[ refuses to trigger the bound lambda. Interestingly enough, C-x @ c [ (apply modifier control to open bracket) still says
C-[ is undefined.
Is there any way of binding something to C-[ without breaking emacs?