anchor.diff:                            (callback-buffer nil explicit-callback-buffer)
                             (setup-function nil explicit-setup-function)
                             (cleanup-function nil explicit-cleanup-function)
  +                          (changed-callback nil explicit-changed-callback)
                             (empty-complete-immediate nil explicit-empty-complete-immediate)
                             (input-prompt nil explicit-input-prompt)
                             (input-buffer nil explicit-input-buffer)
  
positive.code:                          (setf (ps:chain document (get-element-by-id "input-buffer") |innerHTML|)
                                 (ps:lisp input-text))
                           (setf (ps:chain document (get-element-by-id "completions") |innerHTML|)
                                 (ps:lisp completion-html)))))))
  
  (define-command select-next (&optional (minibuffer (current-minibuffer)))
    "Select next entry in minibuffer."
  
negative.code:                      :initform nil
                       :documentation "Function run after a completion has been selected.
  This should not rely on the minibuffer's content.")
     (changed-callback :initarg :changed-callback
                       :accessor changed-callback
                       :initform nil
                       :documentation "Function to call whenever a change happens.")
     (empty-complete-immediate :initarg :empty-complete-immediate :accessor empty-complete-immediate ; TODO: Rename?
                               :initform nil
                               :documentation "If non-nil, allow input matching no)))
  candidates.")
     ;; TODO: Move input-* slots to a separate text class?
     (input-prompt :initarg :input-prompt :accessor input-prompt :initform "Input"
  