direx でパスをコピー


direx は便利ですけどパスをコピーする機能がないようです。でちょっとフラストレーションが溜まってきたので適当にでっち上げてみました。

M-w でカーソルがある位置のファイルパスを kill-ring に入れます。C-j で direx を開く直前のバッファにファイルパスを insert します。

init.el
(with-eval-after-load 'direx
  (defun my-direx-fullpath-at-current-point ()
    "returns a fullpath of current point in direx-mode."
    (direx:file-full-name (direx:item-tree (direx:item-at-point))))
  (defun my-direx-kill-ring-save-current-path ()
    (interactive)
    (kill-new (my-direx-fullpath-at-current-point)))
  (defun my-direx-insert-current-path ()
    (interactive)
    (let ((path (my-direx-fullpath-at-current-point)))
      (quit-window)
      (insert path)))
  (define-key direx:direx-mode-map (kbd "M-w") #'my-direx-kill-ring-save-current-path)
  (define-key direx:direx-mode-map (kbd "C-j") #'my-direx-insert-current-path))

私のユースケースは必要な時に direx を表示させて必要なくなったらさっと消してしまうので C-j は direx のウィンドウを消しています。が、常時 direx バッファを表示している人にはこれだと困るかもしれませんね。消えたら困る人は挿入先のバッファを得てそっちに insert するコードを書く必要があるでしょう。

ところで direx は GitHub でアーカイブになってしまいました。ディスコンってことでしょうかね…。