anchor.diff:        (setf (line-str line)
               (subseq (line-str line) 0 charpos)))))
   
  -(defmethod insert-char/marker (marker char)
  -  (with-modify-buffer (marker-buffer marker)
  -    (check-read-only-at-point marker 0)
  -    (cond
  -      ((char= char #\newline)
  -       (%insert-newline/marker marker
  -                               (marker-linum marker)
  -                               (marker-charpos marker)))
  -      (t
  -       (let ((line (marker-line marker))
  -             (charpos (marker-charpos marker)))
  -         (shift-sticky-objects marker 1)
  -         (setf (line-str line)
  -               (concatenate 'string
  -                            (subseq (line-str line) 0 charpos)
  -                            (string char)
  -                            (subseq (line-str line) charpos))))))
  -    char))
  +(defgeneric insert-char/marker (marker char)
  +  (:method (marker char)
  +    (with-modify-buffer (marker-buffer marker)
  +      (check-read-only-at-point marker 0)
  +      (cond
  +        ((char= char #\newline)
  +         (%insert-newline/marker marker
  +                                 (marker-linum marker)
  +                                 (marker-charpos marker)))
  +        (t
  +         (let ((line (get-line/marker marker))
  +               (charpos (marker-charpos marker)))
  +           (shift-sticky-objects marker 1)
  +           (setf (line-str line)
  +                 (concatenate 'string
  +                              (subseq (line-str line) 0 charpos)
  +                              (string char)
  +                              (subseq (line-str line) charpos))))))
  +      char)))
   
   (defun %insert-line-string/marker (marker linum charpos string)
     (check-read-only-at-point marker 0)
  
positive.code:              (incf (marker-linum m)))))))
  
  (defun shift-sticky-objects-subtract (marker n)
    (let ((line (marker-line marker))
          (linum (marker-linum marker))
          (charpos (marker-charpos marker))
          (buffer (marker-buffer marker)))
  
negative.code: (in-package :lem)
  
  (defun get-line/marker (marker)
    (buffer-get-line (marker-buffer marker)
                     (marker-linum marker)))
  
  (defun check-read-only-at-point (marker offset)
    (let ((line (get-line/marker marker))
          (charpos (marker-charpos marker)))
      (when (if (eql offset 0)
                (line-search-property line 'read-only charpos)
  