Function: claude-code-ide-mcp--cleanup-diff

claude-code-ide-mcp--cleanup-diff is a natively compiled function defined in claude-code-ide-mcp-handlers.el.

Signature

(claude-code-ide-mcp--cleanup-diff TAB-NAME SESSION)

Documentation

Clean up the diff state of TAB-NAME owned by SESSION.

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--cleanup-diff (tab-name session)
  "Clean up the diff state of TAB-NAME owned by SESSION."
  (let ((active-diffs (claude-code-ide-mcp--get-active-diffs session)))
    (when-let* ((diff-info (and active-diffs (gethash tab-name active-diffs))))
      (let ((buffer-A (alist-get 'buffer-A diff-info))
            (buffer-B (alist-get 'buffer-B diff-info))
            (control-buf (alist-get 'control-buffer diff-info))
            (file-exists (alist-get 'file-exists diff-info))
            ;; First try to get buffers from diff-info (stored during close_tab)
            (error-buffer (alist-get 'error-buffer diff-info))
            (diff-buffer (alist-get 'diff-buffer diff-info))
            (fine-diff-buffer (alist-get 'fine-diff-buffer diff-info))
            (custom-diff-buffer (alist-get 'custom-diff-buffer diff-info)))
        ;; Get all ediff buffers from control buffer before killing it
        (when (and control-buf (buffer-live-p control-buf))
          (with-current-buffer control-buf
            ;; Capture all ediff-related buffers
            (claude-code-ide-debug "Capturing ediff buffers from control buffer")
            (when (and (boundp 'ediff-error-buffer) ediff-error-buffer (not error-buffer))
              (setq error-buffer ediff-error-buffer))
            (when (and (boundp 'ediff-diff-buffer) ediff-diff-buffer (not diff-buffer))
              (setq diff-buffer ediff-diff-buffer))
            (when (and (boundp 'ediff-fine-diff-buffer) ediff-fine-diff-buffer (not fine-diff-buffer))
              (setq fine-diff-buffer ediff-fine-diff-buffer))
            (when (and (boundp 'ediff-custom-diff-buffer) ediff-custom-diff-buffer (not custom-diff-buffer))
              (setq custom-diff-buffer ediff-custom-diff-buffer))
            (setq ediff-quit-hook nil))  ; Prevent quit hooks from running
          (kill-buffer control-buf))
        ;; Kill all the auxiliary buffers
        (dolist (buf (list error-buffer diff-buffer fine-diff-buffer custom-diff-buffer))
          (when (and buf (buffer-live-p buf))
            (claude-code-ide-debug "Killing ediff auxiliary buffer: %s" (buffer-name buf))
            (kill-buffer buf)))
        ;; Kill the temporary buffer (buffer B)
        (when (and buffer-B (buffer-live-p buffer-B))
          (kill-buffer buffer-B))
        ;; Kill buffer A only if it was created for a new file
        (when (and buffer-A (buffer-live-p buffer-A) (not file-exists))
          ;; This is a *New file: buffer that we created
          (kill-buffer buffer-A))
        ;; Remove from active diffs
        (remhash tab-name active-diffs)))))