Wanderlustで自分宛てのメールをGMailのように「>」で強調する

GMailで言う自分宛てのメールであれば, メール一覧の画面で「>」のようなマークをつけてくれて一発で分かる機能を追加ってだけ.
Wanderlustでの唯一の不満点やった.
ちょっと調べて解決してみた.

コード


こんなコードを追記した.
ぐぐったらそれっぽいコードが出てきたんだけど, そのままじゃ上手く動かなかったので, 自分用に修正した.
dolistの部分でlistじゃねーぞって怒られたんだよね.
以下ので大丈夫なはず.
自分宛てのメアドが複数ある場合,
特にGMailで「アカウント名+〜@gmail.com」とか「アカウント名+〜@googlemail.com」とかの形式を使っているなら,
wl-user-mail-address-regexpの設定は必須.

;; 自分宛てのメアドを示す正規表現
(setq wl-user-mail-address-regexp
      "ほげほげ〜ふがふが〜")

;; 追記(ちょっと下)に修正版のコードがあります
;; ;; 自分宛てのメールであれば, 「>」を返す
;; (defun wl-summary-line-for-me ()
;;   (if (catch 'found
;;         (let ((to (elmo-message-entity-field wl-message-entity 'to))
;;               (cc (elmo-message-entity-field wl-message-entity 'cc)))
;;           (when (or (stringp to) cc)
;;             (setq to
;;                   (append (if (stringp to) (list to) to)
;;                           (when cc
;;                             (if (stringp cc) (list cc) cc)))))
;;           (dolist (i to)
;;             (when (wl-address-user-mail-address-p i)
;;               (throw 'found t)))))
;;       ">"
;;     ""))

;; 一覧表示での置き換え規則に追加
(add-to-list 'wl-summary-line-format-spec-alist
             '(?> (wl-summary-line-for-me))
             t)

;; 一覧のフォーマットに追加
(setq wl-summary-line-format "%n%T%P%1@%1>%M/%D(%W)%h:%m %t%[%17(%c %f%) %] %s")

これはあると意外と便利やと思う.
機能とは関係ないけど, catch〜throwって便利だねえ.

追記

あーちょっぴり修正.
自分宛てなのに何故か「>」がつかないなあってのがあって, 調べたら直せたので追記.
修正点は、eword-decode-stringとしてメールアドレスをデコードしてる点.
これが無いと, たぶんマルチバイト文字が入ってるメールアドレス「ほげほげ <...@...>」のようなのは、
何らかの形式にエンコードされてて正規表現にマッチしなくなっちゃう.

(defun wl-summary-line-for-me ()
  (if (catch 'found
        (let ((to (elmo-message-entity-field wl-message-entity 'to))
              (cc (elmo-message-entity-field wl-message-entity 'cc)))
          (when (or (stringp to) cc)
            (setq to
                  (append (if (stringp to) (list to) to)
                          (when cc
                            (if (stringp cc) (list cc) cc)))))
          (dolist (i to)
            (when (wl-address-user-mail-address-p (eword-decode-string i))
              (throw 'found t)))))
      ">"
    ""))

いまのところこれでおkっぽいかな?

さらに追記


古いコードをいちおうコメントアウトしておいた.

更新時刻

  • 1かいめ 2008年, 2月7日, 3:52
  • 2かいめ 2008年, 2月7日, 4:16
  • 3かいめ 2008年, 2月14日, 2:27