]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/subr.el (combine-change-calls-1): Don't combine syntax-ppss flushes
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 17 Mar 2019 00:11:45 +0000 (20:11 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 17 Mar 2019 00:11:45 +0000 (20:11 -0400)
lisp/emacs-lisp/syntax.el
lisp/subr.el

index 11cab1d693d7d62239449aa6faa190a00e0fc909..d09d6c12254de0a9958094e0e18c07c872ae9526 100644 (file)
@@ -533,6 +533,11 @@ running the hook."
 
              ;; Setup the before-change function if necessary.
              (unless (or ppss-cache ppss-last)
+                ;; We should be either the very last function on
+                ;; before-change-functions or the very first on
+                ;; after-change-functions.
+                ;; Note: combine-change-calls-1 needs to be kept in sync
+                ;; with this!
                (add-hook 'before-change-functions
                          'syntax-ppss-flush-cache t t))
 
index 4024c68e68d45a67296ed0828a7570cbf1314ad8..6c0ad00afa58434c63d39ccca566788b9ea4c541 100644 (file)
@@ -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