anchor.diff:                                        (ps:lisp content)))))
       (ffi-buffer-evaluate-javascript-async buffer insert-content)
       (chanl:pexec ()
  -      (let ((process-info (funcall command packages profile)))
  +      (let ((process-info (funcall command packages profile))
  +            (mode (find-submode buffer 'os-package-manager-mode)))
  +        (setf (nyxt/os-package-manager-mode:current-process-info mode) process-info)
  +        (ffi-buffer-evaluate-javascript-async
  +         buffer
  +         (ps:ps (ps:chain document
  +                          (write (ps:lisp (markup:markup
  +                                           (:p
  +                                            (:a :class "button"
  +                                                :href (lisp-url '(nyxt/os-package-manager-mode:cancel-package-operation))
  +                                                "Cancel"))))))))
           (format-command-stream process-info
                                  (lambda (s)
                                    (ffi-buffer-evaluate-javascript-async
  
positive.code: 
  (define-mode os-package-manager-mode ()
    "Mode for package management."
    ())
  
  ;; TODO: Add command to interrupt operation?
  ;; (uiop:terminate-process  process-info)
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (in-package :nyxt)
  
negative.code:                                                    ;; e.g. progress bars.
                                                     (write (ps:lisp (markup:markup
                                                                      (:code (str:replace-all " " " " s))
                                                                      (:br)))))))))
          (ffi-buffer-evaluate-javascript-async
           buffer
           (ps:ps (ps:chain document
                            (write (ps:lisp (markup:markup (:p "Done.")))))))))
      (set-current-buffer buffer)
      buffer))
  
  