diff --git a/yasnippet.el b/yasnippet.el index b64e488..d6c2c12 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -4075,25 +4075,34 @@ Returns the newly created snippet." ;; content. (let ((buffer-undo-list t)) (goto-char begin) - ;; Call before and after change functions manually, - ;; otherwise cc-mode's cache can get messed up. Don't use - ;; `inhibit-modification-hooks' for that, that blocks - ;; overlay and text property hooks as well! FIXME: Maybe - ;; use `combine-change-calls'? (Requires Emacs 27+ though.) - (run-hook-with-args 'before-change-functions begin end) - (let ((before-change-functions nil) - (after-change-functions nil)) - ;; Some versions of cc-mode (might be the one with Emacs - ;; 24.3 only) fail when inserting snippet content in a - ;; narrowed buffer, so make sure to insert before - ;; narrowing. - (insert content) - (narrow-to-region begin (point)) - (goto-char (point-min)) - (yas--snippet-parse-create snippet)) - (run-hook-with-args 'after-change-functions - (point-min) (point-max) - (- end begin))) + (if (> emacs-major-version 29) + ;; Don't use the workaround for CC-mode's cache, + ;; since it was presumably a bug in CC-mode, so either + ;; it's fixed already, or it should get fixed. + (progn + (insert content) + (narrow-to-region begin (point)) + (goto-char (point-min)) + (yas--snippet-parse-create snippet)) + ;; Call before and after change functions manually, + ;; otherwise cc-mode's cache can get messed up. Don't use + ;; `inhibit-modification-hooks' for that, that blocks + ;; overlay and text property hooks as well! FIXME: Maybe + ;; use `combine-change-calls'? (Requires Emacs 27+ though.) + (run-hook-with-args 'before-change-functions begin end) + (let ((before-change-functions nil) + (after-change-functions nil)) + ;; Some versions of cc-mode (might be the one with Emacs + ;; 24.3 only) fail when inserting snippet content in a + ;; narrowed buffer, so make sure to insert before + ;; narrowing. + (insert content) + (narrow-to-region begin (point)) + (goto-char (point-min)) + (yas--snippet-parse-create snippet)) + (run-hook-with-args 'after-change-functions + (point-min) (point-max) + (- end begin)))) (when (listp buffer-undo-list) (push (cons (point-min) (point-max)) buffer-undo-list))