anchor.diff:    (%move-to-position point
                        (point-line new-point)
                        (point-charpos new-point)))
  +
  +(defun line-start (point)
  +  (setf (point-charpos point) 0)
  +  point)
  +
  +(defun line-end (point)
  +  (setf (point-charpos point)
  +        (line-length (point-line point)))
  +  point)
  +
  +(defun buffer-start (point)
  +  (move-point point (buffers-start (point-buffer point))))
  +
  +(defun buffer-end (point)
  +  (move-point point (buffers-end (point-buffer point))))
   
   (defun line-offset (point n &optional (charpos 0))
     (cond
  
positive.code: (defun line-number-at-point (point)
    (count-lines (buffers-start (point-buffer point)) point))
  
  (defun text-property-at (point key &optional (offset 0))
    (%character-offset point offset
                       (lambda (line charpos)
                         (line-search-property line key charpos))
                       (lambda ()
                         (line-search-property (point-line point)
                                               key
                                               (point-charpos point)))))
  
  (defun put-text-property (start-point end-point key value)
    (assert (eq (point-buffer start-point)
                (point-buffer end-point)))
    (%map-region start-point end-point
                 (lambda (line start end)
                   (line-add-property line
                                      start
                                      (if (null end)
                                          (line-length line)
                                          end)
                                      key
                                      value
                                      (null end)))))
  
  (defun remove-text-property (start-point end-point key)
    (assert (eq (point-buffer start-point)
                (point-buffer end-point)))
    (%map-region start-point end-point
                 (lambda (line start end)
                   (line-remove-property line
                                         start
                                         (if (null end)
                                             (line-length line)
                                             end)
                                         key))))
  
  (defun next-single-property-change (point property-name &optional limit-point)
    (let ((first-value (text-property-at point property-name))
          (start-point (copy-point point :temporary)))
      (loop
         (unless (character-offset point 1)
  	 (move-point point start-point)
  	 (return nil))
         (unless (eq first-value (text-property-at point property-name))
  	 (return point))
         (when (and limit-point (point<= limit-point point))
  	 (move-point point start-point)
  	 (return nil)))))
  
  (defun previous-single-property-change (point property-name &optional limit-point)
    (let ((first-value (text-property-at point property-name -1))
          (start-point (copy-point point :temporary)))
      (loop
         (unless (eq first-value (text-property-at point property-name -1))
  	 (return point))
         (unless (character-offset point -1)
  	 (move-point point start-point)
  	 (return nil))
         (when (and limit-point (point>= limit-point point))
  	 (move-point point start-point)
  	 (return nil)))))
  
  (defun line-string-at (point)
    (line-str (point-line point)))
  
  (defun point-column (point)
    (string-width (line-string-at point)
                  0
  
negative.code:           current-column
            point-to-offset))
  
  (defun buffers-start (buffer)
    (buffer-start-point buffer))
  
  