3
1

More than 1 year has passed since last update.

tree-view-mode

Last updated at Posted at 2022-04-30

tree-view-mode.el

拙作 tree.el によって表示したディレクトリ・ツリーを折り畳んで表示できる閲覧モードです。

以前此処で公開した tree.el に、 データセーブや閲覧機能などをチョコチョコと追加拡張していたのですが、 公開するために整理してまとめてみました。

以前公開していたものとはカスタマイズ変数名等が変わっているので、 使っていた人は注意してください。 これについては後述します。

tree-sample.png

インストール

例によって此処から tree.eltree-view-mode.el を DL し
load-path の通ったディレクトリに置いて、 必要に応じバイト・コンパイル等します

そして init.el 等に以下を加えます。

  (require 'tree-view-mode)

Emacs 28 のネイティブ・コンパイル機能は環境を整えていないためまだ試していません。

基本的な使い方

以下のように起動してディレクトリ名を入力すると、 ディレクトリツリーが折り畳まれた状態で表示され表のような操作ができます。

mini-buffer
M-x tree
  1. 基本的には TAB を叩いていけば次々にディレクトリの中を見ていけるようなデザインにしてあります。
  2. isearch すると折り畳みされていてもマッチ箇所が開きます。
  3. ミゲモは問題なく使える場合とそうでない場合があるようです。(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
sample
(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

  1. GNU Emacs 29.0.50 (build 1, x86_64-w64-mingw32) of 2022-04-03
  2. GNU Emacs 28.1 (build 2, x86_64-w64-mingw32) of 2022-04-22
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1