バッファリストを表示するツールとしてIbuffer Modeが存在する. カスタマイズするとなかなか便利に使えるツールである.
デフォルトで表示可能な項目にはバッファ名やメジャーモード名などがある. 私はこれらに加えて,各バッファの行数を表示したいと考えた.
ちょっと調べて試行錯誤した結果,以下のようにすればよいことが分かった.
define-ibuffer-column
を用いて表示用の関数を定義ibuffer-formats
に追加
Emacs Wikiをみると,他にもバッファのサイズ表示をhuman-readableにするというものが紹介されていたので,今回はそれも取り込んでみた:
;; number of rows (define-ibuffer-column row (:name "Rows" :inline t) (format "%5d" (count-lines (point-min) (point-max)))) ;; human readable size (define-ibuffer-column size-h (:name "Size" :inline t) (cond ((> (buffer-size) 1000000) (format "%7.1fM" (/ (buffer-size) 1000000.0))) ((> (buffer-size) 1000) (format "%7.1fk" (/ (buffer-size) 1000.0))) (t (format "%8d" (buffer-size))))) (setq ibuffer-formats '((mark modified read-only " " (name 30 40 :left :elide) " " (size-h 9 -1 :right) ;modified " " (row 5 -1 :right) ;modified " " (mode 16 16 :left :elide) " " filename-and-process) (mark " " (name 16 -1) " " filename)))
ibuffer-formats
の詳細についてはinfoを参考にしてもらえばいい訳だが,
ここではnameやrowの後ろに続く数字が表示文字数の最小値・最大値を表しており,
-1が限界なしということだけ付記しておく.