diff options
Diffstat (limited to 'lisp/subr.el')
-rw-r--r-- | lisp/subr.el | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index 4024c68e68d..6c0ad00afa5 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -3686,7 +3686,7 @@ the specified region. It must not change `before-change-functions' or `after-change-functions'. Additionally, the buffer modifications of BODY are recorded on -the buffer's undo list as a single \(apply ...) entry containing +the buffer's undo list as a single (apply ...) entry containing the function `undo--wrap-and-run-primitive-undo'." (let ((old-bul buffer-undo-list) (end-marker (copy-marker end t)) @@ -3699,7 +3699,14 @@ the function `undo--wrap-and-run-primitive-undo'." (if (eq buffer-undo-list t) (setq result (funcall body)) (let (;; (inhibit-modification-hooks t) - before-change-functions after-change-functions) + (before-change-functions + ;; Ugly Hack: if the body uses syntax-ppss/syntax-propertize + ;; (e.g. via a regexp-search or sexp-movement trigerring + ;; on-the-fly syntax-propertize), make sure that this gets + ;; properly refreshed after subsequent changes. + (if (memq #'syntax-ppss-flush-cache before-change-functions) + '(syntax-ppss-flush-cache))) + after-change-functions) (setq result (funcall body))) (let ((ap-elt (list 'apply |