Function: claude-code-ide-mcp--send-selection-for-project
claude-code-ide-mcp--send-selection-for-project is a natively compiled
function defined in claude-code-ide-mcp.el.
Signature
(claude-code-ide-mcp--send-selection-for-project PROJECT-DIR)
Documentation
Send current selection to every Claude instance of PROJECT-DIR.
The payload is computed once; dedupe state stays per session so a freshly connected instance still receives state its siblings already deduplicated.
Source Code
;; Defined in /nix/store/yjvbhwl7p6zrbw9xlnni7y4hra8sa3pl-emacs-packages-deps/share/emacs/site-lisp/claude-code-ide-mcp.el
(defun claude-code-ide-mcp--send-selection-for-project (project-dir)
"Send current selection to every Claude instance of PROJECT-DIR.
The payload is computed once; dedupe state stays per session so a
freshly connected instance still receives state its siblings already
deduplicated."
(remhash project-dir claude-code-ide-mcp--selection-timers)
(let* ((sessions (claude-code-ide-mcp--sessions-for-project project-dir))
(file-path (buffer-file-name))
(file-in-project (and file-path
(string-prefix-p (expand-file-name project-dir)
(expand-file-name file-path))))
;; Without `claude-code-ide-share-opened-file' a bare cursor
;; position is nothing to report
(reportable (and file-in-project
(or claude-code-ide-share-opened-file (use-region-p))))
;; The file path is part of the dedupe state: switching to another
;; file at identical coordinates is still a context change
(current-state (when reportable
(let ((cursor-pos (point)))
(if (use-region-p)
(list file-path cursor-pos (region-beginning) (region-end))
(list file-path cursor-pos cursor-pos cursor-pos)))))
(selection (when reportable
(claude-code-ide-mcp--get-current-selection))))
(dolist (session sessions)
(cond
;; Something to report - send to each client whose state changed,
;; except cursor movement inside the file the user dismissed
((and reportable
(claude-code-ide-mcp-session-client session))
(cond
((and (equal file-path (claude-code-ide-mcp-session-dismissed-file session))
(not (use-region-p))))
((equal current-state
(claude-code-ide-mcp-session-last-selection session)))
(t
;; A region, or another file, ends the dismissal
(setf (claude-code-ide-mcp-session-dismissed-file session) nil
(claude-code-ide-mcp-session-last-selection session) current-state)
(claude-code-ide-mcp--send-notification "selection_changed" selection session))))
;; A bare cursor position under region-only reporting - the
;; instance forgets the region it showed
((and file-in-project (not reportable))
(claude-code-ide-mcp--clear-selection session))
;; File outside project or non-file buffer - reset selection state;
;; leaving the dismissed file ends its dismissal as well
((not file-in-project)
(setf (claude-code-ide-mcp-session-last-selection session) nil
(claude-code-ide-mcp-session-dismissed-file session) nil))))))