tree-view-mode.el
拙作 tree.el によって表示したディレクトリ・ツリーを折り畳んで表示できる閲覧モードです。
以前此処で公開した tree.el に、 データセーブや閲覧機能などをチョコチョコと追加拡張していたのですが、 公開するために整理してまとめてみました。
以前公開していたものとはカスタマイズ変数名等が変わっているので、 使っていた人は注意してください。 これについては後述します。
インストール
例によって此処から tree.el
と tree-view-mode.el
を DL し
load-path
の通ったディレクトリに置いて、 必要に応じバイト・コンパイル等します
そして init.el 等に以下を加えます。
(require 'tree-view-mode)
Emacs 28 のネイティブ・コンパイル機能は環境を整えていないためまだ試していません。
基本的な使い方
以下のように起動してディレクトリ名を入力すると、 ディレクトリツリーが折り畳まれた状態で表示され表のような操作ができます。
M-x tree
- 基本的には TAB を叩いていけば次々にディレクトリの中を見ていけるようなデザインにしてあります。
- isearch すると折り畳みされていてもマッチ箇所が開きます。
- ミゲモは問題なく使える場合とそうでない場合があるようです。(ascii 文字列サーチでマッチハイライトが暴れて引っかかる感じ?)
Key | 機能 |
---|---|
space or n | 次の行 |
BS or p | 前の行 |
< | 前のディレクトリ |
> | 次のディレクトリ |
s | ポイントのあるディレクトリを開く |
h | ポイントのあるディレクトリを閉じる |
i | ポイントのあるディレクトリを開閉する |
TAB | ディレクトリを開閉し次の行へ |
S-TAB | TAB のほぼ逆方向動作 |
C-c C-s | ポイントのディレクトリの枝をすべて開く |
C-c C-h | ポイントのあるディレクトリ以外すべて閉じる |
S | すべてのディレクトリを開く |
H | すべてのディレクトリを閉じる |
w | ポイントのファイル名をキルリングにコピー(prefix でフルパス) |
旧版ではプレフィクス起動するとインライン挿入されましたが、それは廃止し C-u 0 M-x tree でフラット表示するようになっています。単なるプレフィクスは何かのために取ってあります。
tree.el 側でのカスタマイズ
User Option
tree-options
以下のシンボルから必要なものをリストで並べてセットしておくと、 その機能がアクティブになります。
3列目は eshell からの起動時オプションで対応するキャラクタです。
Symbol | 機能 | eshell |
---|---|---|
size | ファイルサイズの表示 | s |
date | タイムスタンプの表示 | d |
quote | ファイル名をクォート | Q |
dir | ディレクトリオンリー | D |
(setq tree-options '(size date quote))
旧版の tree-option-d
, tree-option-Q
の機能がひとつにまとめられています。
eshell について
eshell からも tree で使えるようにしてあります。
オプションは tree -sd
のように通常のシェルコマンド風に指定します。
eshell から起動するときは tree-eshell-options
の値をデフォルトのオプションで使います。
デフォルトではこの変数に tree-options
の値がそのままセットされます。
tree のデータ化やコンバート等
DIR のツリーをリスト FILE にする
Command
tree-list-write dir file
ツリー TEXT を リスト FILE にする
Command
tree-text-to-list-file text file
ツリー・リストのデータ FILE をツリーとしてバッファに表示
Command
tree-buffer-display FILE
dired でポイントしているツリー・リスト・ファイルから REGEXP をサーチ
Command
dired-tree-search regexp
もっさり
tree-view-mode: 巨大なファイルだと重いです
Overlay で折り畳みしていますが、 Directory の数だけ Overlay を作るので
2万ディレクトリくらいある tree file のように、 あまりに Directory が多いと生成時間に加えバッファ操作も重くなり動作に現れます。
ですが、しばらく操作を続けていると普通に動くようになってきます。
よくわかりませんが Emacs が内部で Overlay 検索の最適化をするのかもしれません。
ツリー・テキストをスキャンしてリスト化する場合
空のディレクトリの場合ディレクトリとして認識ができずファイルになってしまいます。
テスト環境
Win10 or Win11
- GNU Emacs 29.0.50 (build 1, x86_64-w64-mingw32) of 2022-04-03
- GNU Emacs 28.1 (build 2, x86_64-w64-mingw32) of 2022-04-22