From: Lars Ingebrigtsen <larsi@gnus.org> Date: Tue, 19 Jan 2021 15:07:54 +0000 (+0100) Subject: Fix slow abbrev expansion in `message-mode' in some circumstances X-Git-Tag: emacs-28.0.90~4216 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3b731b123d11e4c13e2dd16b336b146081f94a30;p=emacs.git Fix slow abbrev expansion in `message-mode' in some circumstances * lisp/gnus/message.el (message--syntax-propertize): Use the correct Message mode syntax table to avoid having `message-cite-prefix-regexp' trigger very heavy backtracing when called from an abbrev context (which defines "_" as a word constituent) (bug#45944). --- diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 50e02187484..b22b4543e71 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -3057,22 +3057,23 @@ See also `message-forbidden-properties'." (defun message--syntax-propertize (beg end) "Syntax-propertize certain message text specially." - (let ((citation-regexp (concat "^" message-cite-prefix-regexp ".*$")) - (smiley-regexp (regexp-opt message-smileys))) - (goto-char beg) - (while (search-forward-regexp citation-regexp - end 'noerror) - (let ((start (match-beginning 0)) - (end (match-end 0))) - (add-text-properties start (1+ start) - `(syntax-table ,(string-to-syntax "<"))) - (add-text-properties end (min (1+ end) (point-max)) - `(syntax-table ,(string-to-syntax ">"))))) - (goto-char beg) - (while (search-forward-regexp smiley-regexp - end 'noerror) - (add-text-properties (match-beginning 0) (match-end 0) - `(syntax-table ,(string-to-syntax ".")))))) + (with-syntax-table message-mode-syntax-table + (let ((citation-regexp (concat "^" message-cite-prefix-regexp ".*$")) + (smiley-regexp (regexp-opt message-smileys))) + (goto-char beg) + (while (search-forward-regexp citation-regexp + end 'noerror) + (let ((start (match-beginning 0)) + (end (match-end 0))) + (add-text-properties start (1+ start) + `(syntax-table ,(string-to-syntax "<"))) + (add-text-properties end (min (1+ end) (point-max)) + `(syntax-table ,(string-to-syntax ">"))))) + (goto-char beg) + (while (search-forward-regexp smiley-regexp + end 'noerror) + (add-text-properties (match-beginning 0) (match-end 0) + `(syntax-table ,(string-to-syntax "."))))))) ;;;###autoload (define-derived-mode message-mode text-mode "Message"