diff --git a/ai.el b/ai.el index 556dbd7..53ce6ba 100644 --- a/ai.el +++ b/ai.el @@ -172,30 +172,39 @@ (gptel-rewrite-region (region-beginning) (region-end) "Fix spelling, grammar, and improve clarity. Keep the same tone and style."))) +(defun my--get-region-as-path-tag (path-fn) + "Helper to get path tag using PATH-FN to determine the file path." + (let* ((filename (funcall path-fn)) + (start-line (line-number-at-pos (if (use-region-p) (region-beginning) (point)))) + (tag (if (use-region-p) + (let* ((end-pos (1- (region-end))) + (end-line (line-number-at-pos (max (region-beginning) end-pos)))) + (format "@%s:%d-%d" filename start-line end-line)) + (format "@%s:%d" filename start-line)))) + tag)) + (defun my/copy-region-as-path-tag () - "Copy the current region as a path tag: @path/to/file.ext:start-end" + "Copy the current region as a relative path tag: @path/to/file.ext:start-end" (interactive) - (if (use-region-p) - (let* ((filename (file-relative-name (buffer-file-name) (doom-project-root))) - (start-line (line-number-at-pos (region-beginning))) - ;; If region ends at beginning of a line, we want the previous line - (end-pos (1- (region-end))) - (end-line (line-number-at-pos (max (region-beginning) end-pos))) - (tag (format "@%s:%d-%d" filename start-line end-line))) - (kill-new tag) - (message "Copied: %s" tag)) - (let* ((filename (file-relative-name (buffer-file-name) (doom-project-root))) - (line (line-number-at-pos)) - (tag (format "@%s:%d" filename line))) - (kill-new tag) - (message "Copied: %s" tag)))) + (let ((tag (my--get-region-as-path-tag + (lambda () (file-relative-name (buffer-file-name) (doom-project-root)))))) + (kill-new tag) + (message "Copied: %s" tag))) + +(defun my/copy-region-as-path-tag-absolute () + "Copy the current region as an absolute path tag: @/abs/path/to/file.ext:start-end" + (interactive) + (let ((tag (my--get-region-as-path-tag #'buffer-file-name))) + (kill-new tag) + (message "Copied: %s" tag))) ;; Add keybindings for helper functions (map! :leader (:prefix "A" :desc "Quick explain" "e" #'my/gptel-quick-explain-region :desc "Proofread text" "p" #'my/gptel-proofread-region - :desc "Copy path tag" "t" #'my/copy-region-as-path-tag)) + :desc "Copy path tag (relative)" "t" #'my/copy-region-as-path-tag + :desc "Copy path tag (absolute)" "T" #'my/copy-region-as-path-tag-absolute)) ;;; Claude Code Configuration