diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2019-03-16 20:11:45 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2019-03-16 20:11:45 -0400 |
commit | 3320fe2deeba6dcc40e934e8a03bef4945c86aff (patch) | |
tree | ad7c661cda2f58bdc0def352ba1edae6ecc0c65c /lisp | |
parent | cc06d76865a7a98b5fd4edd03a044f2baefb85a9 (diff) | |
download | emacs-3320fe2deeba6dcc40e934e8a03bef4945c86aff.tar.gz |
* lisp/subr.el (combine-change-calls-1): Don't combine syntax-ppss flushes
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/emacs-lisp/syntax.el | 5 | ||||
-rw-r--r-- | lisp/subr.el | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index 11cab1d693d..d09d6c12254 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el @@ -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)) 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 |