階層表示した場合の親フォルダ名部分を消してみた
フォルダを階層表示すると普通↓になる。
[-]:gmail::0/83353/84447 :gmail:INBOX:0/9/117 [-]:gmail:ml:0/26841/24794 :gmail:ml/wanderlust:0/27/195 :gmail:ml/gnu-emacs-sources:0/217/322 :gmail:ml/emacs-mime:0/0/6 :gmail:ml/emacs-devel:0/21714/19327 :gmail:ml/bug-gnu-emacs:0/4883/4938 :gmail:ml/apel:0/0/6
これを↓な風になるようにしてみた
[-]:gmail::0/83353/84447 INBOX:0/9/117 [-]ml:0/26841/24794 wanderlust:0/27/195 gnu-emacs-sources:0/217/322 emacs-mime:0/0/6 emacs-devel:0/21714/19327 bug-gnu-emacs:0/4883/4938 apel:0/0/6
長いフォルダ名のときに嬉しい。グループの箇所もやろうとすると面倒そうだからやってない。
追記
- [2008-10-28] imap フォルダとかの接続方法付きのフォルダ名に対応。複雑になっちゃった。
- [2008-10-27] アイコンでなくなってたのを修正。
- [2008-10-27] wl-folder-buffer-search-group でこけてたから、overlayつかうように修正。
- [2008-10-27] 起動時にDesktopを書くとこでエラーになってたのを修正。
- [2008-10-26] 以外と簡単にグループ対応できたから修正。
ソース
(require 'cl) (defvar wl-folder-same-name-entity-string "[---]") (defvar wl-folder-parent-name-regexp-alist '((?% . "^\\([%-][^/@:!]*\\)") (t . "\\(.+\\)"))) (defun wl-folder-setup-inhibit-parent-name-overlay (start end same-name-p) (let ((overlay (find-if (lambda (x) (overlay-get x 'wl-inhibit-parent-name)) (overlays-in start end)))) (unless overlay (setq overlay (make-overlay (point) (point))) (overlay-put overlay name t) (overlay-put overlay 'evaporate t)) (overlay-put overlay 'invisible t) (overlay-put overlay 'before-string (and same-name-p wl-folder-same-name-entity-string)) (move-overlay overlay start end (current-buffer)))) (defadvice wl-folder-insert-entity (around inhibit-parent-name activate) "inhibit parent folder name of current entity." (let ((orig-pos (point))) ad-do-it (let ((inhibit-read-only t) (indent (ad-get-arg 0)) (entity (ad-get-arg 1)) parent submatch same-name-p) (save-excursion (goto-char orig-pos) (back-to-indentation) (when (>= (- (length indent) 2) 0) (save-excursion (setq parent (and (re-search-backward (concat "^" (make-string (- (length indent) 2) ? ) "[^ ]") nil t) (wl-folder-get-entity-from-buffer))))) (when (consp entity) (setq entity (car entity))) (when (and parent (string= entity (wl-folder-get-petname entity))) (setq same-name-p (string= parent entity)) (setq submatch (and (string-match (or (cdr (assq (aref parent 0) wl-folder-parent-name-regexp-alist)) "\\(.+\\)") parent) (match-string 0 parent))) (when (and submatch (re-search-forward (concat (regexp-quote submatch) "[./]?") (line-end-position) t)) (wl-folder-setup-inhibit-parent-name-overlay (match-beginning 0) (match-end 0) same-name-p) (when (and (re-search-forward (concat "\\(" "\\(:[^@:/!]+\\(/[^@:/!]+\\)?\\)?" "\\(@[^@:/!]+\\)?\\(:[0-9]+\\)?\\(!.*\\)?" "\\)" ":\\([0-9*]+/?\\)+$") (line-end-position) t) (not (= (match-beginning 0) (match-end 0)))) (wl-folder-setup-inhibit-parent-name-overlay (match-beginning 1) (match-end 1) same-name-p)) (back-to-indentation) (let ((icon-overlay (find-if (lambda (x) (overlay-get x 'wl-e21-icon)) (overlays-in (point) (line-end-position))))) (while (find-if (lambda (x) (overlay-get x 'invisible)) (overlays-at (point))) (goto-char (next-overlay-change (point)))) (move-overlay icon-overlay (point) (overlay-end icon-overlay)))))))))