Re: wanderlust で GMail 風、新着レス順にソート
元ネタはMatsubaraさんの記事とfumiさんの記事および2ちゃんねるから。
エラーの原因は最初の(cdr x)が(cddr x)の誤りであるからだったような気がしますが、詳細は忘れました。fletを取り除いたり、速度も(多分)速くしたものを公開しておきます。 condition-caseは二つともいらない気がしますが、wl-summary-overview-entity-compare-by-dateがそうなっているので合わせておきました。
(defun wl-summary-overview-entity-compare-by-reply-date (a b)
"Compare entity A and B by latest date of replies."
(let ((fx
#'(lambda (x)
(let* ((number (elmo-message-entity-number x))
(list (cons number
(wl-thread-entity-get-descendant
(wl-thread-get-entity number))))
max time)
(while list
(when (condition-case nil
(elmo-time-less-p
max
(setq time
(elmo-message-entity-field
(elmo-message-entity
wl-summary-buffer-elmo-folder (car list))
'date)))
(error nil))
(setq max time))
(setq list (cdr list)))
max))))
(condition-case nil
(elmo-time-less-p (funcall fx a) (funcall fx b))
(error nil))))
(add-to-list 'wl-summary-sort-specs 'reply-date)
尚、実用上はメッセージの時刻をわざわざ比較せずともメッセージ番号の比較で十分だと思いますので、下記のコードを利用して、reply-numberでソートするのが速度的には有利です。
(defun wl-summary-overview-entity-compare-by-reply-number (a b)
"Compare entity A and B by latest number of replies."
(let ((fx #'(lambda (x)
(setq x (elmo-message-entity-number x))
(apply 'max x (wl-thread-entity-get-descendant
(wl-thread-get-entity x))))))
(< (funcall fx a) (funcall fx b))))
(add-to-list 'wl-summary-sort-specs 'reply-number)
タグ:Wanderlust Emacs