feat(ai): refactor path tag helpers and add absolute version

This commit is contained in:
2026-03-23 15:39:10 +08:00
parent ec119361e5
commit 20a2f69501
+23 -14
View File
@@ -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)))
(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))
(let* ((filename (file-relative-name (buffer-file-name) (doom-project-root)))
(line (line-number-at-pos))
(tag (format "@%s:%d" filename line)))
(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))))
(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