From 1faade882165de2e9bd63702c59c8f26531c18ed Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Wed, 15 Nov 2017 07:03:23 -0500 Subject: [PATCH] Fix marker adjustment for undo (Bug#29118) * lisp/simple.el (primitive-undo): Compare marker against absolute value of POS, because the sign of POS is irrelevant to markers. --- lisp/simple.el | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/simple.el b/lisp/simple.el index 4db81071b58..65906c88693 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2565,10 +2565,10 @@ Return what remains of the list." (setq did-apply t))) ;; Element (STRING . POS) means STRING was deleted. (`(,(and string (pred stringp)) . ,(and pos (pred integerp))) - (when (let ((apos (abs pos))) - (or (< apos (point-min)) (> apos (point-max)))) - (error "Changes to be undone are outside visible portion of buffer")) - (let (valid-marker-adjustments) + (let ((valid-marker-adjustments nil) + (apos (abs pos))) + (when (or (< apos (point-min)) (> apos (point-max))) + (error "Changes to be undone are outside visible portion of buffer")) ;; Check that marker adjustments which were recorded ;; with the (STRING . POS) record are still valid, ie ;; the markers haven't moved. We check their validity @@ -2579,7 +2579,7 @@ Return what remains of the list." (let* ((marker-adj (pop list)) (m (car marker-adj))) (and (eq (marker-buffer m) (current-buffer)) - (= pos m) + (= apos m) (push marker-adj valid-marker-adjustments)))) ;; Insert string and adjust point (if (< pos 0) -- 2.39.2