Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions claude-code-ide-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,15 @@ have completed before cleanup. Waits up to 5 seconds."
(should (null (claude-code-ide--get-process)))))))
(claude-code-ide-tests--clear-processes)))

(ert-deftest claude-code-ide-test-stop-all-no-sessions ()
"Test `stop-all' command when no sessions are running."
(claude-code-ide-tests--clear-processes)
(unwind-protect
(progn
;; Should not error when no sessions exist
(claude-code-ide-stop-all))
(claude-code-ide-tests--clear-processes)))

(ert-deftest claude-code-ide-test-switch-to-buffer-no-session ()
"Test `switch-to-buffer' command when no session exists."
(claude-code-ide-tests--clear-processes)
Expand Down
1 change: 1 addition & 0 deletions claude-code-ide-transient.el
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ Otherwise, if multiple sessions exist, prompt for selection."
("c" claude-code-ide--continue-if-no-session :description claude-code-ide--continue-description)
("r" claude-code-ide--resume-if-no-session :description claude-code-ide--resume-description)
("q" "Stop current session" claude-code-ide-stop)
("Q" "Stop all sessions" claude-code-ide-stop-all)
("l" "List all sessions" claude-code-ide-list-sessions)]
["Navigation"
("b" "Switch to Claude buffer" claude-code-ide-switch-to-buffer)
Expand Down
25 changes: 25 additions & 0 deletions claude-code-ide.el
Original file line number Diff line number Diff line change
Expand Up @@ -1069,6 +1069,31 @@ conversation in the current directory."
(file-name-nondirectory (directory-file-name working-dir))))
(claude-code-ide-log "No Claude Code session is running in this directory"))))

;;;###autoload
(defun claude-code-ide-stop-all ()
"Stop all active Claude Code sessions after confirmation."
(interactive)
(claude-code-ide--cleanup-dead-processes)
(let ((session-count (hash-table-count claude-code-ide--processes)))
(if (zerop session-count)
(claude-code-ide-log "No active Claude Code sessions")
(when (yes-or-no-p (format "Stop all %d Claude Code session%s? "
session-count
(if (= session-count 1) "" "s")))
(let ((buffers-to-kill nil))
(maphash (lambda (directory _process)
(let* ((buffer-name (funcall claude-code-ide-buffer-name-function directory))
(buffer (get-buffer buffer-name)))
(when (and buffer (buffer-live-p buffer))
(push buffer buffers-to-kill))))
claude-code-ide--processes)
(let ((stopped (length buffers-to-kill)))
(dolist (buffer buffers-to-kill)
(kill-buffer buffer))
(claude-code-ide-log "Stopped %d Claude Code session%s"
stopped
(if (= stopped 1) "" "s"))))))))


;;;###autoload
(defun claude-code-ide-switch-to-buffer ()
Expand Down