anchor.diff:    "Update PROMPTER sources and return TEXT."
     (setf (slot-value prompter 'input) text)
     (mapc (lambda (source) (update source text)) (sources prompter))
  +  ;; TODO: Update `selection' when `update' is done.
  +  (setf (selection prompter) (list (first (sources prompter)) 0))
     text)
   
   (export-always 'destructor)
   (defmethod destructor ((prompter prompter))
     "First call `before-destructor', then clean up all sources, finally call
  -`after-destructor'."
  +`after-destructor'.
  +Signal destruction by sending a value to PROMPTER's `interrupt-channel'."
     (maybe-funcall (before-destructor prompter))
     (mapc #'destructor (sources prompter))
  -  (maybe-funcall (after-destructor prompter)))
  +  (maybe-funcall (after-destructor prompter))
  +  ;; TODO: Interrupt before or after desctructor?
  +  (calispel:! (interrupt-channel prompter) t))
  +
  +(export-always 'return-selection)
  +(defun return-selection (prompter)
  +  "Send selection to PROMPTER's `result-channel' and quit.
  +The selection is the collection of marked suggestions across all sources.
  +If there is no marked suggestion, send the currently selected suggestion
  +instead."
  +  (let ((result (or (alex:mappend #'marked-suggestions (sources prompter))
  +                    (let ((selected-source (first (selection prompter))))
  +                      (nth (second (selection prompter))
  +                           (suggestions selected-source)))
  +                    ;; TODO: What if there is no result?
  +                    (and (not (must-match-p prompter))
  +                         (slot-value prompter 'input)))))
  +    (calispel:! (result-channel prompter) result)
  +    (destructor prompter)))
   
   (export-always 'ready-p)
   (defun ready-p (prompter &optional timeout)
  
positive.code:                    :type (or string function)
                     :documentation
                     "Help message for this prompter.
  It can be a function of one argument, the prompter, which returns a string."))
      (:export-class-name-p t)
      (:export-accessor-names-p t)
      (:accessor-name-transformer #'class*:name-identity)
  
negative.code:               :type (or null (cons prompter-source))
                :documentation "List of `prompter-source's.")
  
       (selection '() ; TODO: Add method to update `selection'.
                  ;; TODO: Index by (source-index suggestion-index) instead?
                  ;; TODO: Use structure?
                  :type list
                  :documentation "A pair of source and suggestion index.")
  
  