アーカイブを透過的に操作できるAVFSが素敵だったし、dired-avfs.elを使えば展開とかしなくて良くなると思った


AVFSって知ってますか。僕は今日知りました。以下のリンク先の説明が詳しいので、諸々割愛しますが、

Linux/AVFS – まんどいてっくうぃき

要は、tarやzipなどを仮想のファイルシステムとすることで透過的に操作できるようになるみたいです。もうこの時点でかなり便利そうです。

このAVFSを知ったのはdired-hackの中に、dired-avfs.elなるものを見つけたのがきっかけです。diredにはそもそもアーカイブ向け auto-compression-modetar-mode がありますが、いつものdiredとは雰囲気が違うのでまごつきますし、なにせ圧縮、展開時にブロックするのがいただけません。

avfsを使えばアーカイブであることを意識せずにdiredで操作できます。

使いかたはとても簡単で、dired-hackをインストールして (require 'dired-avfs) を設定ファイルに書いときます。 後は、diredを開き中身を見たいアーカイブの上で M-x dired-avfs-open とすれば、中身をいつものdiredで見ることができます。

これだけでも十分便利ですが、いちいち M-x dired-avfs-open とするのは少し面倒です。

というわけで、空気を読んでアーカイブを開いてくれるコマンドを作ってみました。

(require 'cl-lib)
(defun dired-find-dwim-alternate-file ()
  "In Dired, visit this file or directory instead of the Dired buffer. 
If this file archive, it open via avfs"
  (interactive)
  (if (cl-loop for ext in dired-avfs-archives
               thereis (string-match-p (concat "." ext "$") (dired-get-filename)))
      (dired-avfs-open)
    (dired-find-alternate-file)))

したらば、RETキーにバインド。

(define-key dired-mode-map (kbd "RET") 'dired-find-dwim-alternate-file)

これで、アーカイブの存在を忘れてしまいそうなくらい、自然に開くことができると思います。

アーカイブを開く機会が多い方はとても便利な拡張だと思います。