anchor.diff:    (insert minibuffer value)
     (reset-suggestion-state minibuffer))
   
  +(export-always 'reset-suggestion-state)
   (defmethod reset-suggestion-state ((minibuffer minibuffer))
     "Update the suggestions and move the suggestion cursor to the
   beginning."
  
positive.code: 
  (in-package :nyxt)
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (export 'minibuffer)
    (export
     '(default-modes
       suggestion-function
       setup-function
       cleanup-function
       changed-callback
       must-match-p
       input-prompt
       input-buffer
       input-cursor
       invisible-input-p
       history
       multi-selection-p
       hide-suggestion-count-p
       reset-suggestion-state
       max-lines
       minibuffer-style
       user-style
       override-map)))
  
  (defclass minibuffer (buffer)
    ((default-modes :initarg :default-modes
                    :initform '(minibuffer-mode))
     (suggestion-function :initarg :suggestion-function
                          :accessor suggestion-function
                          :initform nil
                          :type (or function null)
                          :documentation "Take the input
  string and returns a list of suggestion strings.
  Example: `buffer-suggestion-filter'.")
     (callback :initform nil
               :documentation "Function to call over the selected suggestion."
               :initarg :callback)
     (callback-buffer :initarg :callback-buffer
                      :accessor callback-buffer
                      :initform (when *browser* (current-buffer))
                      :documentation "The active buffer when the minibuffer was
  brought up.
  This can be useful to know which was the original buffer in the `callback' in
  case the buffer was changed.")
     (setup-function :initarg :setup-function :accessor setup-function
                     :initform #'setup-default
                     :type (or function null)
                     :documentation "Fills the `content' on when the minibuffer is created.
  Takes no argument.  Called only once.")
     (cleanup-function :initarg :cleanup-function
                       :accessor cleanup-function
                       :initform nil
                       :type (or function null)
                       :documentation "Run after a suggestion has been selected.
  This should not rely on the minibuffer's content.")
     (changed-callback :initarg :changed-callback
                       :accessor changed-callback
                       :initform nil
                       :type (or function null)
                       :documentation "Called whenever a change happens.")
     (must-match-p :initarg :must-match-p
                   :accessor must-match-p
                   :initform t
                   :type boolean
                   :documentation "If nil, allow input matching no suggestions.")
     (input-prompt :initarg :input-prompt
                   :accessor input-prompt
                   :initform "Input"
                   :type string
                   :documentation "Text to prompt to the user, before `input-buffer'.")
     (input-buffer :initarg :input-buffer
                   :initform (make-instance 'text-buffer:text-buffer)
                   :documentation "Buffer used to capture keyboard input.")
     (input-cursor :accessor input-cursor
                   :initarg :input-cursor
                   :initform (make-instance 'text-buffer:cursor)
                   :documentation "Cursor used in conjunction with the input-buffer.")
     (invisible-input-p :initarg :invisible-input-p
                        :accessor invisible-input-p
                        :type boolean
                        :initform nil
                        :documentation "If non-nil, input is replaced by placeholder character.
  This is useful to conceal passwords.")
     (history :initarg :history
              :accessor history
              :initform (minibuffer-generic-history *browser*)
              :type (or containers:ring-buffer-reverse null)
              :documentation "History of inputs for the minibuffer.
  If nil, no history is used.")
     (multi-selection-p :initarg :multi-selection-p :accessor multi-selection-p
                        :initform nil
                        :type boolean
                        :documentation "If non-nil, allow for selecting multiple suggestions.")
     (suggestions :accessor suggestions :initform nil)
     (marked-suggestions :accessor marked-suggestions :initform nil)
     (hide-suggestion-count-p :accessor hide-suggestion-count-p
                              :initarg :hide-suggestion-count-p
                              :initform nil
                              :type boolean
                              :documentation "Show the number of chosen suggestions
  inside brackets. It can be useful to disable, for instance for a yes/no question.")
     (suggestion-head :accessor suggestion-head
                      :initform 0
                      :type integer)
     (suggestion-cursor :accessor suggestion-cursor
                        :initform 0
                        :type integer)
     (content :initform "" :type string
              :documentation "The HTML content of the minibuffer.")
     (max-lines :initarg :max-lines
                :accessor max-lines
                :type integer
                :initform 10
                :documentation "Max number of suggestion lines to show.  You will
  want edit this to match the changes done to `minibuffer-style'.")
     (minibuffer-style
      :accessor minibuffer-style
      :initform (cl-css:css
                 '((* :font-family "monospace,monospace"
                      :font-size "14px"
                      :line-height "18px")
                   (body :border-top "4px solid dimgray"
                         :margin "0"
                         :padding "0 6px")
                   ("#container" :display "flex"
                                 :flex-flow "column"
                                 :height "100%")
                   ("#input" :padding "6px 0"
                             :border-bottom "solid 1px lightgray")
                   ("#suggestions" :flex-grow "1"
                                   :overflow-y "auto"
                                   :overflow-x "auto")
                   ("#cursor" :background-color "gray"
                              :color "white")
                   ("#prompt" :padding-right "4px"
                              :color "dimgray")
                   (ul :list-style "none"
                       :padding "0"
                       :margin "0")
                   (li :padding "2px")
                   (.marked :background-color "darkgray"
                            :font-weight "bold"
                            :color "white")
                   (.selected :background-color "gray"
                              :color "white")))
      :documentation "The CSS applied to a minibuffer when it is set-up.")
     (user-style
      :accessor user-style
      :initform ""
      :documentation "User CSS that is applied after the
  minibuffer-style. This can be used to override any styles in the
  minibuffer-style.")
     (override-map :accessor override-map
                   :initform (let ((map (make-keymap "overide-map")))
                               (define-key map
                                 "escape"
                                 ;; We compute symbol at runtime because
                                 ;; nyxt/minibuffer-mode does not exist at
                                 ;; compile-time since it's loaded afterwards.
                                 (find-symbol (string 'cancel-input)
                                              (find-package 'nyxt/minibuffer-mode))))
                   :type keymap:keymap
                   :documentation "Keymap that takes precedence over all modes' keymaps."))
    (:documentation "The minibuffer is the interface for user interactions.  Each
  prompt spawns a new minibuffer object: this makes it possible to nest minibuffer
  calls, such as invoking `minibuffer-history'.
  
negative.code:                    `(:multi-selection-p ,multi-selection-p)
                     '())))))
  
  (export-always 'input-buffer)
  (defmethod input-buffer ((minibuffer minibuffer))
    (str:replace-all " " " " (text-buffer::string-representation (slot-value minibuffer 'input-buffer))))
  
  