Wanderlustでanythingやauto-complete

auto-completeでメールアドレス補完

を参考に、bbdbではなくてwlのアドレス管理から取ってくるように修正。

.wlファイルに以下のように入れた。

(when (featurep 'auto-complete)
  ;; 参考
  ;; http://d.hatena.ne.jp/buzztaiki/20091110/1257863059

  (defun wl-draft-turn-on-ac ()
    (setq ac-sources '(ac-source-wl-address))
    (auto-complete-mode 1))

  (add-hook 'wl-draft-mode-hook 'wl-draft-turn-on-ac)

  (defvar ac-wl-address-header-list '("to" "from" "cc" "bcc"))

  (defvar ac-source-wl-address
    '((candidates . ac-wl-address-candidate)
      (match . substring)
      (prefix . ac-wl-address-prefix)))

  (defun ac-wl-address-candidate ()
    (mapcar (lambda (x) (cdr x)) wl-address-completion-list))

  (defun ac-wl-address-prefix ()
    (interactive)
    (let ((case-fold-search t))
      (when (and
             (< (point)
                (save-excursion
                  (goto-char (point-min))
                  (search-forward (concat "\n" mail-header-separator "\n") nil t)
                  (point)))
             (save-excursion
               (beginning-of-line)
               (while (and (looking-at "^[ \t]")
                           (not (= (point) (point-min))))
                 (forward-line -1))
               (looking-at (concat (regexp-opt ac-wl-address-header-list t) ":"))))
        (ac-prefix-symbol))))
 ) ; auto-complete

anythingでフォルダ選択

wl-〜-goto-folderを置きかえ。最小限の内容だけども個人的には満足。
余裕が有ればアイコンとか未読数とか出せると良いのかもしれない。
(追記:kitokitokiさんのヒントを元に未読数を出してみた。絞り込みできて確かに便利。)

(when (featurep 'anything)

  (defun wl-folder-list (srclist &optional out)
    (loop for i in srclist
          do (cond 
              ((listp i)
               (setq out (wl-folder-list i out)))
              ((stringp i)
               (unless (equal "Desktop" i)
                 (let* ((nums (wl-folder-get-entity-info i))
                        (new (car nums))
                        (unread (nth 1 nums))
                        (all (nth 2 nums)))
                   (push (cons ; 未読数対応 .. 新着/未読/総数
                          (format "%s %s : %s/%s/%s" 
                                  (cond 
                                   ((and new (> new 0)) "*")
                                   ((and unread (> unread 0)) "#")
                                   (t " "))
                                  (wl-folder-get-petname i)
                                  new unread all)
                          i) out))))))
    out)

  (defun wl-anything-goto-folder (action)
    (anything 
     `(((name . "Wl Folder Source")
        (candidates . ,(nreverse (wl-folder-list wl-folder-entity)))
        (action ("Select" . ,action))))
     nil "Folder : "))

  (defun wl-summary-goto-folder-anything ()
    (interactive)
    (wl-anything-goto-folder 
     (lambda (folder) (wl-summary-goto-folder-subr folder 'update))))

  (define-key wl-summary-mode-map "g" 'wl-summary-goto-folder-anything)

  (defun wl-folder-goto-folder-anything ()
    (interactive)
    (wl-anything-goto-folder 
     (lambda (folder) (wl-folder-goto-folder-subr folder))))

  (define-key wl-folder-mode-map "g" 'wl-folder-goto-folder-anything)
) ; anything