anchor.diff:             (list (make-instance 'bookmark-entry :url (quri:uri url)))
              :test #'equals))))
   
  -(define-command insert-suggestion-or-tag (&optional (minibuffer (current-minibuffer)))
  -  "Paste selected suggestion or tag in input.
  -If character before cursor is '+' or '-' complete against tag."
  -  (let* ((current-word (text-buffer::word-at-cursor (input-cursor minibuffer)))
  -         (operand? (unless (str:emptyp current-word) (subseq current-word 0 1))))
  -    (if (or (equal "-" operand?)
  -            (equal "+" operand?))
  -        (let ((tag (prompt-minibuffer
  -                    :input-prompt "Tag"
  -                    :input-buffer (subseq current-word 1)
  -                    :suggestion-function (tag-suggestion-filter))))
  -          (when tag
  -            (text-buffer::replace-word-at-cursor
  -             (input-cursor minibuffer)
  -             (str:concat operand? (tag-name tag)))))
  -        ;; (nyxt/minibuffer-mode:insert-suggestion minibuffer)
  -        )))
  -
  -(define-mode minibuffer-tag-mode (nyxt/minibuffer-mode:minibuffer-mode)
  -  "Minibuffer mode for setting the bookmark and their tags."
  -  ((keymap-scheme
  -    (define-scheme "minibuffer-tag"
  -      scheme:cua
  -      (list
  -       "tab" 'insert-suggestion-or-tag)))))
  +;; (define-command insert-suggestion-or-tag (&optional (minibuffer (current-minibuffer)))
  +;;   "Paste selected suggestion or tag in input.
  +;; If character before cursor is '+' or '-' complete against tag."
  +;;   (let* ((current-word (text-buffer::word-at-cursor (input-cursor minibuffer)))
  +;;          (operand? (unless (str:emptyp current-word) (subseq current-word 0 1))))
  +;;     (if (or (equal "-" operand?)
  +;;             (equal "+" operand?))
  +;;         (let ((tag (prompt
  +;;                     :prompt "Tag"
  +;;                     :input (subseq current-word 1)
  +;;                     :sources (make-instance 'tag-source))))
  +;;           (when tag
  +;;             (text-buffer::replace-word-at-cursor
  +;;              (input-cursor minibuffer)
  +;;              (str:concat operand? (tag-name tag)))))
  +;;         ;; (nyxt/minibuffer-mode:insert-suggestion minibuffer)
  +;;         )))
  +
  +;; (define-mode minibuffer-tag-mode (nyxt/minibuffer-mode:minibuffer-mode)
  +;;   "Minibuffer mode for setting the bookmark and their tags."
  +;;   ((keymap-scheme
  +;;     (define-scheme "minibuffer-tag"
  +;;       scheme:cua
  +;;       (list
  +;;        "tab" 'insert-suggestion-or-tag)))))
   
   (define-command set-url-from-bookmark ()
     "Set the URL for the current buffer from a bookmark.
   With multiple selections, open the first bookmark in the current buffer, the
   rest in background buffers."
  -  (let ((entries (prompt-minibuffer
  -                  :input-prompt "Open bookmark(s)"
  -                  :default-modes '(minibuffer-tag-mode minibuffer-mode)
  -                  :suggestion-function (bookmark-suggestion-filter)
  -                  :multi-selection-p t)))
  +  (let ((entries (prompt
  +                  :prompt "Open bookmark(s)"
  +                  ;; :default-modes '(minibuffer-tag-mode minibuffer-mode) ; TODO: Replace this behaviour.
  +                  :sources (make-instance 'bookmark-source
  +                                          :multi-selection-p t))))
       (dolist (entry (rest entries))
         (make-buffer :url (object-string (url entry))))
       (buffer-load (url (first entries)))))
   
   (define-command set-url-from-bookmark-new-buffer ()
     "Open selected bookmarks in new buffers."
  -  (let ((entries (prompt-minibuffer
  -                  :input-prompt "Open bookmarks in new buffers"
  -                  :default-modes '(minibuffer-tag-mode minibuffer-mode)
  -                  :suggestion-function (bookmark-suggestion-filter)
  -                  :multi-selection-p t)))
  +  (let ((entries (prompt
  +                  :prompt "Open bookmark(s) in new buffers"
  +                  ;; :default-modes '(minibuffer-tag-mode minibuffer-mode) ; TODO: Replace this behaviour.
  +                  :sources (make-instance 'bookmark-source
  +                                          :multi-selection-p t))))
       (dolist (entry (rest entries))
         (make-buffer :url (object-string (url entry))))
       (make-buffer-focus :url (url (first entries)))))
  
positive.code:   name
    description)
  
  (defmethod object-string ((tag tag))
    (tag-name tag))
  
  (defmethod object-display ((tag tag))
  
negative.code: 
  (define-command bookmark-page ()
    "Bookmark the currently opened page(s) in the active buffer."
    (prompt
     :input "Bookmark URL from buffer(s)"
     :sources (make-instance 'buffer-source
                            :multi-selection-p t
                            :actions (list 'bookmark-current-page))))
  
  (define-command bookmark-url (&key url)
    "Allow the user to bookmark a URL via minibuffer input."
    (let ((url (or url
                   (prompt
                    :prompt "Bookmark URL"
                    :sources (list
                              (make-instance 'prompter:raw-source
                                             :name "New URL"))))))
      (if (not (valid-url-p url))
          (echo "Invalid URL")
          (let* ((url (quri:uri url))
                 (tags (prompt
                        :prompt "Space-separated tag(s)"
                        ;; :default-modes '(set-tag-mode minibuffer-mode) ; TODO: Replace completion.
                        :input (url-bookmark-tags url)
                        :sources (make-instance 'tag-source))))
            (bookmark-add url :tags tags)))))
  
  (define-command bookmark-delete ()
    "Delete bookmark(s)."
    (with-data-access (bookmarks (bookmarks-path (current-buffer)))
      (let ((entries (prompt
                      :prompt "Delete bookmark(s)"
                      ;; :default-modes '(minibuffer-tag-mode minibuffer-mode)
                      :sources (make-instance 'bookmark-source))))
        (setf bookmarks
              (set-difference bookmarks
                              entries :test #'equals)))))
  