anchor.diff:    (let ((command 
             (first
              (prompt
  -            :prompt "Describe command"
  +            :prompt "Add command"
               :sources (make-instance 'user-command-source)))))
       (add-function macro-editor command)))
   
  
positive.code:                                                             (current-mode 'macro-edit-mode)
                                                              ,key))
                                            "🛈"))
                                   (:td (symbol-name (name value))))))))))
      (ffi-buffer-evaluate-javascript-async
       (buffer macro-editor)
       (ps:ps
  
negative.code: (define-command-global edit-macro ()
    "Edit a macro."
    (with-current-html-buffer (buffer "*Macro edit*" 'nyxt/macro-edit-mode:macro-edit-mode)
      (spinneret:with-html-string
        (:style (style buffer))
        (:h1 "Macro edit")
        (:p "Name")
        (:input :type "text" :id "macro-name")
        (:p "Commands")
        (:p (:a :class "button"
                :href (lisp-url '(nyxt/macro-edit-mode::add-command)) "+ Add command"))
        (:div :id "commands" "")
        (:br)
        (:hr)
        (:a :class "button"
            :href (lisp-url '(nyxt/macro-edit-mode::save-macro)) "Save macro")
        (:a :class "button"
            :href (lisp-url '(nyxt/macro-edit-mode::evaluate-macro)) "Evaluate macro"))))
  
  (defmethod render-functions ((macro-editor macro-edit-mode))
    (flet ((render-functions ()
             (spinneret:with-html-string
               (:table
                (loop for key being the hash-keys of (functions macro-editor)
                      using (hash-value value)
                      collect (:tr (:td (:a :class "button"
                                            :href (lisp-url `(nyxt/macro-edit-mode::remove-function
                                                              (current-mode 'macro-edit-mode)
                                                              ,key))
  