anchor.diff:    (call-before-change-functions (point-buffer point) point (- n))
     (if (not (buffer-enable-undo-p (point-buffer point)))
         (delete/after-change-function point)
  -      (let ((pos (position-at-point point))
  +      (let ((linum (line-number-at-point point))
  +            (charpos (point-charpos point))
               (string (delete/after-change-function point)))
           (push-undo (point-buffer point)
                      (lambda (cur-point)
  -                     (move-to-position cur-point pos)
  +                     (move-to-line cur-point linum)
  +                     (line-offset cur-point 0 charpos)
                        (insert-string/point cur-point string)
                        t))
           string)))
  
positive.code:   (call-before-change-functions (point-buffer point) point 1)
    (if (not (buffer-enable-undo-p (point-buffer point)))
        (insert/after-change-function point 1)
        (let ((pos (position-at-point point)))
          (prog1 (insert/after-change-function point 1)
            (push-undo (point-buffer point)
                       (lambda (cur-point)
                         (move-to-position cur-point pos)
                         (delete-char/point cur-point 1)
                         t))))))
  
  
negative.code:   (call-before-change-functions (point-buffer point) point (length string))
    (if (not (buffer-enable-undo-p (point-buffer point)))
        (insert/after-change-function point (length string))
        (let ((linum (line-number-at-point point))
              (charpos (point-charpos point)))
          (prog1 (insert/after-change-function point (length string))
            (push-undo (point-buffer point)
                       (lambda (cur-point)
                         (move-to-line cur-point linum)
                         (line-offset cur-point 0 charpos)
                         (delete-char/point cur-point (length string))
                         t))))))
  
  