From 80e8878272c0a1393086f3cec016e3a2a5b62f79 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sat, 11 Jan 2025 12:48:19 -0800 Subject: [PATCH] Align term-mode control character handling Terminal emulators generally ignore exotic ASCII control characters like SOH and STX. Make term-mode do the same. * lisp/term.el (term-emulate-terminal): ignore ASCII control characters like other terminal emulators do (cherry picked from commit 6cea3233a12f3964c46bffb0b6215e9c8cd92962) --- lisp/term.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/term.el b/lisp/term.el index 8bffce495e4..72af0360700 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -3011,8 +3011,8 @@ See `term-prompt-regexp'." (defconst term-control-seq-regexp (concat - ;; A control character, - "\\(?:[\r\n\000\007\t\b\016\017]\\|" + ;; A control character not matched in a longer sequence below, + "\\(?:[\x00-\x19\x1C-\x1F\r\n\t\b]\\|" ;; some Emacs specific control sequences, implemented by ;; `term-command-hook', "\032[^\n]+\n\\|" @@ -3267,8 +3267,9 @@ See `term-prompt-regexp'." (?A ;; An \eAnSiT sequence (Emacs specific). (term-handle-ansi-terminal-messages (substring str i ctl-end))))) - ;; Ignore NUL, Shift Out, Shift In. - ((or ?\0 #xE #xF 'nil) nil)) + ;; Ignore any control character not already recognized. + ((or 'nil + (and (pred characterp) (pred (lambda (c) (<= c ?\x1F))))) nil)) ;; Leave line-wrapping state if point was moved. (unless (eq term-do-line-wrapping (point)) (setq term-do-line-wrapping nil)) -- 2.39.5