anchor.diff:       (:br)
        (:hr)
        (:a :class "button"
  -         :href (lisp-url '(nyxt/macro-edit-mode::save-macro)) "Save macro"))))
  +         :href (lisp-url '(nyxt/macro-edit-mode::save-macro)) "Save macro")
  +     (:a :class "button"
  +         :href (lisp-url '(nyxt/macro-edit-mode::save-macro)) "Evaluate macro"))))
   
   (defmethod render-functions ((macro-editor macro-edit-mode))
     (flet ((render-functions ()
  
positive.code:   (nyxt:describe-command (gethash command-id (functions macro-editor))))
  
  (defmethod add-function ((macro-editor macro-edit-mode) command)
    (setf (gethash (get-unique-function-identifier macro-editor) p
                   (functions macro-editor))
          command)
    (render-functions macro-editor))
  
negative.code:   (remhash command-id (functions macro-editor))
    (render-functions macro-editor))
  
  (defmethod name ((macro-editor macro-edit-mode))
    (let ((name
            (ffi-buffer-evaluate-javascript
             (buffer macro-editor)
             (ps:ps
               (ps:chain document (get-element-by-id "macro-name") value)))))
      (cond ((not (str:emptyp name)) (setf (slot-value macro-editor 'name) name))
            ((slot-value macro-editor 'name) (slot-value macro-editor 'name))
            (t nil))))
  
  (defmethod generate-macro-form ((macro-editor macro-edit-mode))
    (let ((name (intern (name macro-editor)))
          (commands (mapcar
                     (lambda (command) (write `(,(name command)) :stream nil))
                     (alexandria:hash-table-values (functions macro-editor)))))
      `(define-command-global ,name '() ,@commands)))
  
  (define-command add-command (&optional (macro-editor (current-mode 'macro-edit-mode)))
    "Add a command to the macro."
  