anchor.diff:    (mapc #'delete-fake-cursor (buffer-fake-cursors buffer))
     (values))
   
  -(defun buffer-cursors (buffer)
  -  (sort (copy-list (cons (buffer-point buffer)
  -                         (buffer-fake-cursors buffer)))
  -        #'point<))
  -
  -#+lem.features.multiple-cursors
  -(define-command add-cursors-to-next-line () ()
  -  (let ((cursors (buffer-cursors (current-buffer))))
  -    (loop :for (cursor next-cursor) :on cursors
  -          :do (with-point ((p cursor))
  -                (when (and (line-offset p 1)
  -                           (or (null next-cursor)
  -                               (not (same-line-p p next-cursor))))
  -                  (add-fake-cursor p))))))
  -
  -#+lem.features.multiple-cursors
  -(define-command clear-cursors () ()
  -  (delete-all-fake-cursors (current-buffer)))
  -
   (defun foreach-multiple-cursors (buffer function)
     (dolist (point (buffer-fake-cursors buffer))
       (funcall function point))
  
positive.code: (in-package :lem)
  
  ;; (pushnew :lem.features.multiple-cursors *features*)
  
  (defun buffer-fake-cursors (buffer)
    (buffer-value buffer 'fake-cursors))
  
negative.code: 
  (defmacro with-multiple-cursors ((&optional (buffer '(current-buffer))) &body body)
    `(call-with-multiple-cursors ,buffer (lambda () ,@body)))
  
  (defun buffer-cursors (buffer)
    (sort (copy-list (cons (buffer-point buffer)
                           (buffer-fake-cursors buffer)))
          #'point<))
  
  (define-command add-cursors-to-next-line () ()
    (let ((cursors (buffer-cursors (current-buffer))))
      (loop :for (cursor next-cursor) :on cursors
            :do (with-point ((p cursor))
                  (when (and (line-offset p 1)
                             (or (null next-cursor)
                                 (not (same-line-p p next-cursor))))
                    (add-fake-cursor p))))))
  
  (define-command clear-cursors () ()
    (delete-all-fake-cursors (current-buffer)))
  