はじめに

Emacs で現在のパスを取得する方法を調べてみました.

以下の記事を参考にしました.

現在のファイルのパスを取得してクリップボードに保存

現在開いているファイルのパスを保存. dired を開いているときはディレクトリパスを保存.

  (defun my/get-curernt-path ()
    (if (equal major-mode 'dired-mode)
    default-directory
    (buffer-file-name)))

(defun my/copy-current-path ()                                                         
  (interactive)
  (let ((fPath (my/get-curernt-path)))
    (when fPath
      (message "stored path: %s" fPath)
      (kill-new (file-truename fPath)))))

(global-set-key (kbd "C-c 0") 'my/copy-current-path)

org-link 形式で クリップボードに保存

org-mode のヘビーユーザなので, url を org-link で扱いたい. org-link に変換した上で保存.

(defun my/copy-current-org-link-path ()
  (interactive)
  (let* ((fPath (my/get-curernt-path))
     (fName (file-relative-name fPath)))
    (my/copy-org-link fPath fName)))

(defun my/copy-org-link (my/current-path my/current-title)
  (let ((orgPath
     (format "[[%s][%s]]" my/current-path my/current-title)))
    (message "stored org-link: %s" orgPath)
    (kill-new orgPath)))

(global-set-key (kbd "C-x @ @") 'my/copy-current-org-link-path)

追記

よく考えたら, org-store-link という関数がすでにあったではないか!!

車輪の再発明をしてしまった.

eww で現在開いているページを org-link 形式で クリップボードに保存

eww-copy-page-url (w) で現在の URL をクリップボードにコピーできる.

(defun eww-copy-page-org-link ()
  (interactive)
  (my/copy-org-link (eww-current-url) (eww-current-title)))
(define-key eww-mode-map (kbd "0") 'eww-copy-page-org-link)