anchor.diff:      (funcall mode)
       (listener-reset-prompt buffer)))
   
  -(defun listener-update-marker (&optional (point (current-point)))
  -  (when (%listener-marker)
  -    (delete-point (%listener-marker)))
  -  (setf (%listener-marker)
  +(defun listener-update-point (&optional (point (current-point)))
  +  (when (%listener-point)
  +    (delete-point (%listener-point)))
  +  (setf (%listener-point)
           (if point
               (copy-point point :right-inserting)
               (copy-point (current-point) :right-inserting))))
   
   (defun listener-reset-prompt (&optional (buffer (current-buffer)))
  -  (let ((cur-marker (lem::buffer-point buffer)))
  -    (lem::buffer-end cur-marker)
  -    (unless (lem::start-line-p cur-marker)
  -      (lem::insert-char-at cur-marker #\newline 1)
  -      (lem::buffer-end cur-marker))
  -    (lem::insert-string-at cur-marker
  +  (let ((cur-point (lem::buffer-point buffer)))
  +    (lem::buffer-end cur-point)
  +    (unless (lem::start-line-p cur-point)
  +      (lem::insert-char-at cur-point #\newline 1)
  +      (lem::buffer-end cur-point))
  +    (lem::insert-string-at cur-point
                              (lem.text-property:make-text-property
                               (princ-to-string
                                (funcall
  
positive.code:           (make-history))))
  
  (defun listener-start-point ()
    (copy-point (%listener-marker) :temporary))
  
  (defun listener-start (buffer-name mode)
    (let ((buffer (get-buffer-create buffer-name)))
  
negative.code:                             :attribute *prompt-attribute*
                              'lem.property:read-only t
                              'lem.property:field-separator t))
      (lem::buffer-end cur-point)
      (buffer-undo-boundary buffer)
      (listener-update-point)))
  
  (define-key *listener-mode-keymap* (kbd "C-m") 'listener-return)
  (define-command listener-return () ()
  