org-cliplink 패키지로 title과 url을 편하게 삽입

1 minute read

org-mode에서 웹 페이지 링크를 삽입할 때, C-c C-l 키를 눌러서 링크와 제목을 따서 추가했는데, 이걸 편하게 해주는 rexim/org-cliplink 패키지를 찾았다.

(use-package org-cliplink :ensure t)

패키지를 설치한 후에 M-x org-cliplink 함수를 실행하면 클립보드에 복사한 url로 웹페이지를 방문해 title을 가져와 org link를 삽입해준다.

[[https://www.youtube.com/watch?v=f84n5oFoZBc][Hammock Driven Development - Rich Hickey - YouTube]]
[[https://github.com/rexim/org-cliplink][GitHub - rexim/org-cliplink: Insert org-mode links from clipboard]]

title을 변경하고 싶다. Hammock Driven Development - Rich Hickey - youtube.com 이런 식으로 host url을 뒤에 붙여넣고 싶다. github은 rexim/org-cliplink - github.com 이런 식으로 url path와 host를 사용하고 싶다.

친절하게도 README.org에 방법을 써놨다. README에 어울리는 확장자는 뭐다? md가 아니라 org다. 아무튼.

(defun my-org-cliplink ()
  (interactive)
  (org-cliplink-insert-transformed-title
   (org-cliplink-clipboard-content)     ;take the URL from the CLIPBOARD
   (lambda (url title)
     (let* ((parsed-url (url-generic-parse-url url)) ;parse the url
            (host-url (replace-regexp-in-string "^www\\." "" (url-host parsed-url)))
            (clean-title
             (cond
              ;; if the host is github.com, cleanup the title
              ((string= (url-host parsed-url) "github.com")
               (replace-regexp-in-string "^/" ""
                                         (car (url-path-and-query parsed-url))))
              ;; (replace-regexp-in-string "GitHub - .*: \\(.*\\)" "\\1" title))
              ((string= (url-host parsed-url) "www.youtube.com")
               (replace-regexp-in-string "\\(.*\\) - Youtube" "\\1" title))
              ;; otherwise keep the original title
              (t title)))
            (title-with-url (format "%s - %s" clean-title host-url)))
       ;; forward the title to the default org-cliplink transformer
       (org-cliplink-org-mode-link-transformer url title-with-url)))))

예제 함수를 고쳐서 github과 youtube URL을 커스터마이징하고 host url을 항상 뒤에 붙이게 고쳤다.

[[https://www.youtube.com/watch?v=f84n5oFoZBc][Hammock Driven Development - Rich Hickey - youtube.com]]
[[https://github.com/rexim/org-cliplink][rexim/org-cliplink - github.com]]

M-x my-org-cliplink 함수를 실행하면 원하는 대로 title이 가공돼서 삽입된다.

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