anchor.diff:            (loop :while (plusp n)
                   :for eolp := (> n (- (line-length line) charpos))
                   :do
  -                (check-read-only-at-point point (if (eq n 'T) nil (if eolp n nil)))
                   (cond
                     ((not eolp)
                      (%delete-line-between/point point charpos (+ charpos n))
  
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: (define-editor-variable before-change-functions '())
  (define-editor-variable after-change-functions '())
  
  (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 n 0)
                  (line-search-property line :read-only charpos)
                  (step-on-read-only point n))
          (error 'read-only-error)))))
  
  (defmacro with-modify-buffer (buffer &body body)
  