[mew-dist 21213] Re: mew-summary-ls-all-folders
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2002年 7月 22日 (月) 10:04:21 JST
白井です。
From: rio-t at example.com < rio-t at example.com> さん曰く
Subject: [mew-dist 21203] mew-summary-ls-all-folders
Message-ID: <20020719.193807.110252884.rio-t at example.com>
Date: Fri, 19 Jul 2002 19:38:07 +0900 (JST)
> mew-summary-lsを、任意の複数(もしくは全て)のフォルダに対して
> 一括して行う方法はないでしょうか。
>
> ということがあるので、ときどき全フォルダを手動で巡回してリス
> トを更新したりしています。
> フォルダの数が多くなってくるとこれもなかなか面倒で。
ぼくもこう思って、数年前に作ったものがあるのでのせます。
基本的な使い方は M-x mew-make-cache-all で scan が必要な folder
だけ scan します。
以下、注意点。
(1) UNIX でも、ずっと mew-touch-folder-p => t で使っているので、
今、mew-touch-folder-p => nil な環境向けに拡張したので、その
辺 enbug していたらごめんなさい。
(2) なるだけ速く全部の scan が終わるように、summary で動かすいろ
いろな hook を外してしまいます。そのため、
mew-make-cache-all() が終了した後は、一度 Mew も終了して、再
度 M-x mew した方が幸せです。
P.S.
これ作っていたときに、ふと気付いたバグ(仕様?)を思い出してしまっ
たので、その話は、また、後程。
--
白井秀行 (mailto:shirai at example.com)
(defun mew-make-cache-all (&optional arg)
".mew-cache を一気に作る"
(interactive "P")
(let ((fldlst (mapcar 'car mew-local-folder-alist))
(mew-summary-mode-hook nil)
(font-lock-mode nil)
(font-lock-support-mode nil)
fld)
(while (setq fld (car fldlst))
(condition-case err
(mew-make-cache arg (directory-file-name fld))
(error nil))
(setq fldlst (cdr fldlst))))
(mew-summary-visit-folder mew-inbox-folder)
(message "Make .mew-cache done")
(mew-summary-quit))
(defun mew-make-cache (arg fld)
(if (or (mew-folder-virtualp fld)
(and (fboundp 'mew-nmz-skip-folder) (mew-nmz-skip-folder fld))
(not (mew-dir-messages (mew-expand-folder fld)))
(and (not arg) (not (mew-make-folder-dir-newp fld))))
(message "no Make %s" fld)
(message "Make %s in %s ..." mew-summary-cache-file fld)
(let ((mew-summary-mode-hook nil)
(mew-scan-sentinel-hook nil)
(mew-scan-wait-for 0))
(mew-summary-visit-folder fld)
(font-lock-mode -1)
(while mew-summary-buffer-process
(sit-for 0.5)
(discard-input))
(message "Make %s in %s ...done" mew-summary-cache-file fld))))
(defun mew-make-folder-dir-newp (fld)
(let* ((dir (file-chase-links (mew-expand-folder fld)))
(tdir (if mew-touch-folder-p
(mew-file-get-time
(expand-file-name mew-summary-touch-file
(mew-expand-folder dir)))
(mew-file-get-time dir)))
(cache (expand-file-name mew-summary-cache-file dir))
(tcache (mew-file-get-time cache))
t1 t2)
(setq t1 tdir)
(setq t2 tcache)
(cond
((null t1)
(if mew-touch-folder-p
(if (and (file-writable-p (expand-file-name mew-summary-touch-file
(mew-expand-folder dir)))
(mew-dir-messages (mew-expand-folder dir)))
(progn (mew-touch-folder fld) t)
nil)
nil))
((null t2) t) ;; do update
((> (nth 0 t1) (nth 0 t2)) t)
((= (nth 0 t1) (nth 0 t2))
(if (> (nth 1 t1) (nth 1 t2)) t nil)) ;; nil if equal
(t nil))))
Mew-dist メーリングリストの案内