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