aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2024-10-17 11:39:19 -0400
committerStefan Monnier2024-10-17 11:39:19 -0400
commit90c6880a922029ba6e57adb2afe00a6fa57ef7fe (patch)
tree963171929e400321970854d9fd9aa129523e6da7
parentd3c94102266fa1fe167f699a92b9064c02b63d4f (diff)
downloademacs-90c6880a922029ba6e57adb2afe00a6fa57ef7fe.tar.gz
emacs-90c6880a922029ba6e57adb2afe00a6fa57ef7fe.zip
(track-changes--after): Fix problem found in bug#73041
When calling `track-changes--before` (e.g. because of a missing b-f-c or for some other reason), it sets `track-changes--before-end` to the right value so we shouldn't increment it right after. Also, we should update `track-changes--buffer-size` before calling `track-changes--before` so it doesn't risk signaling a spurious inconsistency. * lisp/emacs-lisp/track-changes.el (track-changes--after): Update `track-changes--buffer-size` earlier, and don't increment `track-changes--before-end` when we call `track-changes--before`.
-rw-r--r--lisp/emacs-lisp/track-changes.el16
1 files changed, 8 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/track-changes.el b/lisp/emacs-lisp/track-changes.el
index 92d14959763..1d5c5e9917a 100644
--- a/lisp/emacs-lisp/track-changes.el
+++ b/lisp/emacs-lisp/track-changes.el
@@ -555,16 +555,16 @@ Details logged to `track-changes--error-log'")
555 555
556(defun track-changes--after (beg end len) 556(defun track-changes--after (beg end len)
557 (cl-assert track-changes--state) 557 (cl-assert track-changes--state)
558 (and (eq track-changes--before-clean 'unset)
559 (not track-changes--before-no)
560 ;; This can be a sign that a `before-change-functions' went missing,
561 ;; or that we called `track-changes--clean-state' between
562 ;; a `before-change-functions' and `after-change-functions'.
563 (track-changes--before beg end))
564 (setq track-changes--before-clean nil)
565 (let ((offset (- (- end beg) len))) 558 (let ((offset (- (- end beg) len)))
566 (cl-incf track-changes--before-end offset)
567 (cl-incf track-changes--buffer-size offset) 559 (cl-incf track-changes--buffer-size offset)
560 (if (and (eq track-changes--before-clean 'unset)
561 (not track-changes--before-no))
562 ;; This can be a sign that a `before-change-functions' went missing,
563 ;; or that we called `track-changes--clean-state' between
564 ;; a `before-change-functions' and `after-change-functions'.
565 (track-changes--before beg end)
566 (cl-incf track-changes--before-end offset))
567 (setq track-changes--before-clean nil)
568 (if (not (or track-changes--before-no 568 (if (not (or track-changes--before-no
569 (save-restriction 569 (save-restriction
570 (widen) 570 (widen)