anchor.diff:  (defun load-hostlists (blocker-mode &key force-update-p)
     "Load BLOCKER-MODE's hostlists into `blocked-hosts' (in the background)."
     (clrhash (blocked-hosts blocker-mode))
  -  ;; TODO: Kill previous thread if running `load-hostlists' multiple times in a row.
  -  (run-thread "Blocker-mode list updater"
  -    (dolist (hostlist (hostlists blocker-mode))
  -      (unwind-protect
  -           (progn
  -             (setf (force-update-p hostlist) force-update-p)
  -             (dolist (host (or (hosts hostlist)
  -                               (files:content hostlist
  -                                               :force-read force-update-p)))
  -               (setf (gethash host (blocked-hosts blocker-mode)) host)))
  -        (setf (force-update-p hostlist) nil))
  -      ;;  We write the file here because we are not setting the content
  -      ;;  anytime after this point.
  -      (unless (hosts hostlist)
  -        (files:write-file (files:profile hostlist) hostlist)))))
  +  (dolist (hostlist (hostlists blocker-mode))
  +    ;; TODO: Allow running in the background, but warning, it could leak
  +    ;; personal information to undesired third-party.
  +    (dolist (host (or (hosts hostlist)
  +                      (let ((path (files:expand hostlist)))
  +                        (unless (uiop:file-exists-p path)
  +                          (echo "Updating hostlist ~s..." path))
  +                        (files:content hostlist
  +                                       :force-update force-update-p))))
  +      (setf (gethash host (blocked-hosts blocker-mode)) host))))
   
   (defmethod blocklisted-host-p ((mode blocker-mode) host)
     "Return non-nil of HOST if found in the hostlists of MODE.
  
positive.code: 
  ;; TODO: Add convenient interface to block hosts depending on the current URL.
  
  (define-class hostlist (files:data-file nyxt-file)
    ((url
      (quri:uri "")
      :type quri:uri
      :documentation "URL where to download the list from.  If empty, no attempt
  will be made at updating it.")
     (url-body
      ""
      :type string)
     (hosts
      '()
      :type (or (cons string *) null)
      :documentation "List of hosts to ignore.
  This is useful to reference hosts manually instead of via `url'.")
     (last-update
      0
      :type integer)
     (update-interval
      (* 60 60 24)
      :type integer
      :documentation "If URL is provided, update the list after this amount of
  seconds.")
     (force-update-p
      nil
      :type boolean
      :export nil
      :documentation "When non-nil, reload the list from its URL, by-passing local files if any.
  It's automatically reset by `load-hostlists'."))
    (:export-class-name-p t)
    (:export-accessor-names-p t)
    (:accessor-name-transformer (class*:make-name-transformer name))
  
negative.code: 
  (define-command update-hostlists (&optional (blocker-mode (find-submode 'nyxt/blocker-mode:blocker-mode (current-buffer))))
    "Forces update for all the hostlists of `blocker-mode'."
    (load-hostlists blocker-mode :force-update-p t))
  