anchor.diff:             for i from 0 by 1
              collect (:button :class "button"
                               :onclick (ps:ps (nyxt/ps:lisp-eval
  -                                             `(calispel:!
  -                                               (third (gethash ,id *debug-conditions*))
  -                                               (nth ,i (second (gethash ,id *debug-conditions*))))))
  +                                             `(progn
  +                                                (calispel:!
  +                                                 (third (gethash ,id *debug-conditions*))
  +                                                 (nth ,i (second (gethash ,id *debug-conditions*))))
  +                                                ,@(when (and delete-buffer-p buffer)
  +                                                    `((delete-buffer :id ,(id buffer)))))))
                               (format nil "[~d] ~a" i (restart-name restart))))
        (:h* "Backtrace")
  +     ;; TODO: SLIME and SLY provide introspectable backtraces. How?
        (:pre (with-output-to-string (s) (uiop:print-backtrace :stream s :condition condition))))))
   
   ;; FIXME: Not for interactive use?
  
positive.code:       ;; FIXME: Waits indefinitely. Should it?
        (invoke-restart-interactively (calispel:? channel)))))
  
  (defun debug->html (condition id &optional restarts)
    "Produce HTML code for the CONDITION with RESTARTS."
    (spinneret:with-html-string
      (:h* (symbol-name (type-of condition)))
  
negative.code:   (destructuring-bind (condition restarts channel)
        (gethash id *debug-conditions*)
      (declare (ignore channel))
      (debug->html condition id restarts buffer t)))
  
  (define-command-global toggle-debug-on-error (&key (value nil value-provided-p))
    "Toggle Nyxt-native debugging.
  