less than 1 minute read

(defun my/org-copy-link-at-point ()
  (interactive)
  (message "%S" (org-element-context))
  )
(link (:type "https"
       :path "//emacs.stackexchange.com/questions/3981/how-to-copy-links-out-of-org-mode"
       :format bracket
       :raw-link "https://emacs.stackexchange.com/questions/3981/how-to-copy-links-out-of-org-mode"
       :begin 328
       :end 494
       :contents-begin 412
       :contents-end 492
       ;;...
       ))

커서가 있는 org 요소(element)에 대한 정보를 가져올 수 있다. 여기서 raw-link 키값을 가져오면 되겠다.

(defun my/org-copy-link-at-point ()
  (interactive)
  (message "%S" (org-element-property :raw-link (org-element-context)))
  )
"https://emacs.stackexchange.com/questions/3981/how-to-copy-links-out-of-org-mode"

잘 가져온다. typepath 키값을 가져와 조합할 필요 없이 raw-link 키값을 가져와서 그냥 쓰면 된다. 만약 link 프로퍼티가 없는 요소라면 nil 을 리턴한다.

(defun my/org-copy-link-at-point ()
  (interactive)
  (let ((link (org-element-property :raw-link (org-element-context))))
    (when link
      (kill-new link))
    ))

link 프로퍼티가 없으면 nil이니 검사해서 kill-new 함수를 사용해 클립보드로 복사한다.

(after! org
  (map! :map org-mode-map
        :localleader
        (:prefix ("l" . "links")
                 "y" #'my/org-copy-link-at-point)))

doom emacs에 이미 정의된 키바인딩 규칙에 끼워 넣었다. org mode에서 SPC m l 키를 누르면 link와 관련된 키바인딩이 보인다. 여기에 마침 y 가 비어있길래 SPC m l y 키로 바인딩했다.

참고

C-x C-s C-x C-c