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)))))))))))