Function: claude-code-ide-mcp--handle-ediff-quit

claude-code-ide-mcp--handle-ediff-quit is a natively compiled function defined in claude-code-ide-mcp-handlers.el.

Signature

(claude-code-ide-mcp--handle-ediff-quit TAB-NAME SESSION)

Documentation

Handle ediff quit for TAB-NAME in SESSION.

Prompts user to accept/reject changes and sends appropriate MCP response. SESSION is the instance that opened the diff; the quit hooks capture it lexically, and diff-info's stored session serves as a backstop.

Source Code

;; Defined in /nix/store/yjvbhwl7p6zrbw9xlnni7y4hra8sa3pl-emacs-packages-deps/share/emacs/site-lisp/claude-code-ide-mcp-handlers.el
(defun claude-code-ide-mcp--handle-ediff-quit (tab-name session)
  "Handle ediff quit for TAB-NAME in SESSION.
Prompts user to accept/reject changes and sends appropriate MCP response.
SESSION is the instance that opened the diff; the quit hooks capture it
lexically, and diff-info's stored session serves as a backstop."
  (let* ((active-diffs (claude-code-ide-mcp--get-active-diffs session))
         (diff-info (and active-diffs (gethash tab-name active-diffs))))
    (if (not diff-info)
        ;; Already cleaned up, just exit
        nil
      ;; Process the diff
      (let* ((buffer-B (alist-get 'buffer-B diff-info))
             (final-session (or session
                                (alist-get 'session diff-info))))

        (let ((accept-changes (y-or-n-p "Accept the changes? ")))

          ;; Window configuration is now restored by the quit hook closure
          ;; so we don't need to restore it here

          ;; Defer the response to ensure ediff cleanup completes first
          (run-with-idle-timer claude-code-ide-mcp-handlers-idle-timer-delay nil
                               (lambda ()
                                 (if accept-changes
                                     ;; User accepted changes
                                     (let ((final-content (with-current-buffer buffer-B
                                                            (buffer-string))))
                                       ;; Don't save the file - let Claude Code handle the actual file modification
                                       ;; Just return the content that should be saved

                                       ;; Send FILE_SAVED response with the new content
                                       (claude-code-ide-mcp-complete-deferred
                                        final-session
                                        "openDiff"
                                        (list `((type . "text") (text . "FILE_SAVED"))
                                              `((type . "text") (text . ,final-content)))
                                        tab-name)

                                       ;; Mark that we've responded so close_tab knows ediff should be cleaned up
                                       (when final-session
                                         (let ((session-diffs (claude-code-ide-mcp--get-active-diffs final-session)))
                                           (puthash tab-name
                                                    (cons '(responded . t) diff-info)
                                                    session-diffs))))

                                   ;; User rejected changes - send DIFF_REJECTED response
                                   (claude-code-ide-mcp-complete-deferred
                                    final-session
                                    "openDiff"
                                    (list `((type . "text") (text . "DIFF_REJECTED"))
                                          `((type . "text") (text . ,tab-name)))
                                    tab-name)

                                   ;; Mark that we've responded so close_tab knows ediff should be cleaned up
                                   ;; Don't clean up immediately - let ediff quit process complete first
                                   (when final-session
                                     (let ((session-diffs (claude-code-ide-mcp--get-active-diffs final-session)))
                                       (puthash tab-name
                                                (cons '(responded . t) diff-info)
                                                session-diffs)))))))))))