anchor.diff:  
   (define-command bookmark-hint ()
     "Show link hints on screen, and allow the user to bookmark one"
  -  (with-result* ((links-json (add-element-hints))
  -                 (selected-hint (read-from-minibuffer
  -                                 (make-minibuffer
  -                                  :input-prompt "Bookmark hint"
  -                                  :cleanup-function #'remove-element-hints))))
  -    (let* ((link-hints (cl-json:decode-json-from-string links-json))
  -           (selected-link (cadr (assoc selected-hint link-hints :test #'equalp))))
  -      (when selected-link
  -        (bookmark-add selected-link)))))
  +  (with-result* ((elements-json (add-element-hints))
  +                 (result (read-from-minibuffer
  +                          (make-minibuffer
  +                           :input-prompt "Bookmark hint"
  +                           :history nil
  +                           :completion-function
  +                           (hint-completion-filter (elements-from-json elements-json))
  +                           :cleanup-function
  +                           (lambda ()
  +                             (remove-element-hints :buffer (current-buffer))))))
  +                 (tags (read-from-minibuffer
  +                        (make-minibuffer
  +                         :input-prompt "Space-separated tag(s)"
  +                         :multi-selection-p t
  +                         :completion-function (tag-completion-filter
  +                                               :with-empty-tag t)
  +                         :empty-complete-immediate t))))
  +    (when result
  +      (bookmark-add (url result) :tags tags))))
   
   (define-command set-url-from-bookmark ()
     "Set the URL for the current buffer from a bookmark."
  
positive.code:                                                    (tags bookmark))))
                                     bookmarks)))
        (fuzzy-match non-tags bookmarks))))
  
  (defstruct tag
    name
    description)
  
  (defmethod object-string ((tag tag))
    (tag-name tag))
  
  (defmethod object-display ((tag tag))
    (if (tag-description tag)
        (format nil "~a (~a)"
                (tag-name tag)
                (tag-description tag))
        (object-string tag)))
  
  (declaim (ftype (function (&key (:with-empty-tag boolean)
                                  (:extra-tags list-of-tags)))
  
negative.code: In particular, we ignore the protocol (e.g. HTTP or HTTPS does not matter)."
    (equal-url (url e1) (url e2)))
  
  (defstruct tag
    name
    description)
  
  (defmethod object-string ((tag tag))
    (tag-name tag))
  
  (defmethod object-display ((tag tag))
    (if (tag-description tag)
        (format nil "~a (~a)"
                (tag-name tag)
                (tag-description tag))
        (object-string tag)))
  
  (defun bookmark-add (url &key title tags)
    (unless (or (str:emptyp url)
                (string= "about:blank" url))
  