anchor.diff:                 (1+ (length (buffer-undo-stack buffer)))))
           (t
            (incf (buffer-undo-size buffer))))
  -  (when-interrupted-flag :undo
  -                         (push :separator
  -                               (buffer-undo-stack buffer)))
  -  (push elt (buffer-undo-stack buffer)))
  +  (let ((interrupt-p))
  +    (when-interrupted-flag :undo
  +                           (setq interrupt-p t)
  +                           (push :separator
  +                                 (buffer-undo-stack buffer)))
  +    (push elt (buffer-undo-stack buffer))
  +    interrupt-p))
   
   (defun push-redo-stack (buffer elt)
     (push elt (buffer-redo-stack buffer)))
  
positive.code:   (prog1 (do ((res #1=(buffer-redo-1 buffer) #1#)
                (pres nil res))
               ((not res) pres))
      (push :separator (buffer-undo-stack buffer))))
  
  (defun buffer-get (buffer indicator &optional default)
    (getf (buffer-plist buffer) indicator default))
  
negative.code:        (buffer-filename))
        (file-name-as-directory (pwd))))
  
  (defun buffer-undo-modified (buffer)
    (when (= (buffer-undo-node buffer)
             (buffer-saved-node buffer))
      (setf (buffer-modified-p buffer) nil)))
  
  (defun buffer-undo-1 (buffer)
    (let ((elt (pop (buffer-undo-stack buffer))))
      (when elt
        (let ((*undo-mode* :undo))
          (unless (eq elt :separator)
            (decf (buffer-undo-size buffer))
            (funcall elt))))))
  
  (defun buffer-undo (buffer)
  