Re: wanderlust で GMail 風、新着レス順にソート

土曜日, 9月 20 2014 @ 11:53 午前 JST

投稿者: kazuhiro

元ネタは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

コメント (0件)


Kazuhiro's blog
http://ikazuhiro.s206.xrea.com/article.php/20140920115345919