emacs-28.2 -Q M-x term RET RET C-SPC This should send an ASCII NUL (a zero byte) to the pty, but instead it displays "Mark set" in the echo area. To fix it, C-SPC needs to get special handling akin to the handling of C-/. Here's a patch that also makes C-M-SPC and C-M-/ work. --- term.el 2022-09-06 17:31:54.000000000 -0400 +++ term-c-spc-fixed.el 2023-06-15 11:21:41.780140053 -0400 @@ -916,6 +916,9 @@ (define-key map [next] 'term-send-next) (define-key map [xterm-paste] #'term--xterm-paste) (define-key map [?\C-/] #'term-send-C-_) + (define-key map [?\C- ] #'term-send-C-@) + (define-key map [?\C-\M-/] #'term-send-C-M-_) + (define-key map [?\C-\M- ] #'term-send-C-M-@) map) "Keyboard map for sending characters directly to the inferior process.") @@ -1359,6 +1362,9 @@ (defun term-send-del () (interactive) (term-send-raw-string "\e[3~")) (defun term-send-backspace () (interactive) (term-send-raw-string "\C-?")) (defun term-send-C-_ () (interactive) (term-send-raw-string "\C-_")) +(defun term-send-C-@ () (interactive) (term-send-raw-string "\C-@")) +(defun term-send-C-M-_ () (interactive) (term-send-raw-string "\e\C-_")) +(defun term-send-C-M-@ () (interactive) (term-send-raw-string "\e\C-@")) (defun term-char-mode () "Switch to char (\"raw\") sub-mode of term mode.