direx から quick-preview でプレビューする


direx はとても便利ですが、例えば画像ファイルをプリビューしようとするとかなり残念な気分になります。

ところで ELPA には quick-preview という素敵なパッケージがあって、OS ごとに用意されたチラ見プログラムを起動できます。例えば macOS では QuickLook を起動しています。なのでそれらチラ見プログラムで表示できるものは何でも表示できるようになります。画像でも動画でも音声でもエクセルでもワードでも (対応していれば)。

direx から quick-preview にファイルを渡してやればかなり幸せになりそうだったのですが一筋縄ではいきませんでした。でもまあなんとかできるようになったのでここに記しておきます。

direx と quick-preview の内部構造をカンニングしてでっち上げたものなのでバージョンが変われば動かなくなる可能性があります。

前提条件として direx と quick-preview が パッケージシステムを使ってインストールされている 必要があります。package-installed-p なんて関数使ってるので…。でもいまどきこんな条件普通クリアしてますよね?

init.el
(when (package-installed-p 'quick-preview)
  (global-set-key (kbd "C-c C-p") 'quick-preview-at-point)

  ;; direx において [SPACE] でプレビュー
  (with-eval-after-load "direx"
    (define-key direx:direx-mode-map (kbd "SPC") 'quick-preview-at-point)
    (defun my-advice-quick-preview---get-file-name-for-direx (f &rest args)
      (if (eq major-mode 'direx:direx-mode)
          (direx:file-full-name (direx:item-tree (direx:item-at-point)))
        (apply f args)))
    (advice-add 'quick-preview--get-filename :around #'my-advice-quick-preview---get-file-name-for-direx)))

direx では SPACE を押すとプリビューです (他のメジャーモードでは C-c C-p でプリビューです)。もともとはスペースにページを送る関数をバインドしてあったようですがそんなのは C-v でいいので潰しました。