[Mew-Win32 02335] Re: すべてのフォルダに対してソートしたい
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2000年 1月 5日 (水) 10:19:25 JST
こんにちは、白井です。今日から仕事初めです。
# 結局、年末年始は何にも出来なかった。
From: Masahiro EGUCHI (江口 尚裕) <egu at example.com> さん曰く
Subject: [Mew-Win32 02333] すべてのフォルダに対してソートしたい
Message-ID: <20000104140927H.egu at example.com>
Date: Tue, 04 Jan 2000 14:09:27 +0900 (JST)
egu> Meadow1.10+mew1.94.1+im130を使っていますが、すべてのフォルダを
egu> それぞれ日付でソートしたいのですが、何か良い方法はありませんで
egu> しょうか?
sort 自体は、elisp から実行するよりも shell script(あるいは
bat)から実行する方が簡単だと思います。sort を行なうのは 'imsort'
で使い方は 'imsort --help' で見れますが、その folder のすべての
message を日付で sort するのは
% imsort --src=+inbox --field=date --mode=date all
なので、この '+inbox' を変えて folder の数だけ実行すればいいと思
います。じゃ、すべての folder は? というと、'~/Mail/.folders'
file に書いてあるので、'.folders' を適当にコピーして、sort した
い folder を抜き出して上記の command を実行するように書く、とい
うのが一番お手軽かしら? その後、各 folder の '.mew-cache' を更
新、あるいは削除するという感じ。
とここまでメールを書いたんですけど、リハビリがてらに elisp でやっ
てみました。Mew を立ち上げて、以下の関数を評価したあとで
'M-x mew-sort-all' ってやってください。それなりに時間はかかると
思いますけど。
(defun mew-sort-all ()
(interactive)
(let ((folder-list mew-folder-list)
folder)
(while (setq folder (car folder-list))
(condition-case err
(mew-sort-folder (directory-file-name folder))
(error nil))
(setq folder-list (cdr folder-list))))
(message "Sort all folders done."))
(defun mew-sort-folder (folder)
(let ((skip-folders '()))
;; sort したくない folder があったら、上記の行を
;; (let ((skip-folders '("+inbox" "+tmp")))
;; の様に書き換えます
(if (or (mew-folder-remotep folder)
(mew-folder-virtualp folder)
(member folder skip-folders))
()
(let* ((folder-dir (mew-expand-folder folder))
(cache-file (expand-file-name mew-summary-cache-file folder-dir))
(range "all"))
(message "Sort messages in %s ..." folder)
(apply (function call-process)
mew-prog-imsort
nil nil nil
(list
(format "--src=%s" folder)
"--field=date"
"--mode=date"
range))
(message "Scan in %s ..." folder)
(if (and (file-readable-p cache-file)
(file-writable-p cache-file))
(delete-file cache-file))
(mew-set-buffer-tmp)
(mew-piolet
mew-cs-scan mew-cs-scan
(apply (function call-process)
mew-prog-imls
nil
(current-buffer)
nil
(list
(format "--width=%d" (if mew-summary-scan-width
mew-summary-scan-width
(if (< (window-width) 80)
80
(window-width))))
(format "--mimedecodequoted=%s" (if mew-decode-quoted
"yes" "no"))
"--thread=no"
(concat "--src=" folder)
range)))
(goto-char (point-min))
(while (not (eobp))
(if (not (looking-at "^ *\\([1-9][0-9]*\\)[^0-9]"))
(let (pos)
(beginning-of-line)
(setq pos (point))
(forward-line)
(delete-region pos (point)))
(forward-line)))
(if (= (point-min) (point-max))
()
(mew-frwlet
mew-cs-scan mew-cs-scan
(write-region (point-min) (point-max) cache-file nil 'no-msg)))
(message "Scan in %s ... done." folder)))))
# とりあえず、動かして実験してみましたけど、不具合があったらごめ
# んなさい。
--
白井秀行@というわけで、今年もよろしくお願い致します。(_ _)
Mew-win32 メーリングリストの案内