anchor.diff:  (define-editor-variable before-change-functions '())
   (define-editor-variable after-change-functions '())
   
  -(defun check-read-only-at-point (point offset)
  +(defun step-on-read-only (point n)
  +  (loop :for line := (point-line point) :then (line-next line)
  +        :for charpos := (point-charpos point) :then 0
  +        :do (when (line-search-property-range line :read-only charpos n)
  +              (return t))
  +        :do (when (>= 0 (decf n (1+ (- (line-length line) charpos))))
  +              (return nil))))
  +
  +(defun check-read-only-at-point (point n)
     (unless *inhibit-read-only*
       (let ((line (point-line point))
             (charpos (point-charpos point)))
  -      (when (if (eql offset 0)
  +      (when (if (eql n 0)
                   (line-search-property line :read-only charpos)
  -                (line-search-property-range line
  -                                            :read-only
  -                                            charpos
  -                                            (if (null offset)
  -                                                nil
  -                                                (+ charpos offset))))
  +                (step-on-read-only point n))
           (error 'read-only-error)))))
   
   (defmacro with-modify-buffer (buffer &body body)
  
positive.code:   (:method (point n)
      (declare (special n))
      (with-modify-buffer (point-buffer point)
        (with-output-to-string (killring-stream)
          (declare (special killring-stream))
          (let ((charpos (point-charpos point))
  
negative.code:           (loop :while (plusp n)
                  :for eolp := (> n (- (line-length line) charpos))
                  :do
                  (cond
                    ((not eolp)
                     (%delete-line-between/point point charpos (+ charpos n))
  