「bbdb」タグアーカイブ

gravatar.elをbbdbでも使いたい

ここのところ、bbdbなどwanderlust関連の設定をやっていまして、そういったことをtwitterでつぶやいていましたところ、gravatar.elなるものがあることを教えてもらいました。

@myuhe あと、https://github.com/dabrahams/wl-gravatar みたいなの利用したりするですFri May 20 12:17:29 via Afficheur for Mac

gravatarは、アイコンとE-mailを紐づけているwebサービス。gtihubやDISQUSもgravatarからアイコンを持ってきてるみたいです。 gravatar.elはEmacsのMUAで受信メールを表示している時にそのアイコンを表示してくれるもので、GNUSやwanderlustに対応しているようです。

https://cacoo.com/api/v1/diagrams/TiwovYL3X1hUhZ4D-5A314.png

EmacsのMUAは地味でついしょんぼりしてしまうので、こういう画像があるだけでちょっとだけ心がウキウキします。 せっかくなので、先日導入したbbdbを表示した時にもこの画像が表示されるようにしてみました。 先程のリンク先にあるwl-gravatar.elのコメントを参考にgravatar.elをインストールしたら、次のようなコードを貼り付けます。bbdbの関数を上書きするという行儀の悪さが際立ちますが勘弁してください。

(defun bbdb-format-record-name-company (record)
  "Display nam
e, company and picture.
Override function defined in bbdb.el."
  (let ((name (or (bbdb-record-name record) "???"))
        (company (bbdb-record-company record))
        (start (point))
        (net (car (bbdb-record-net record))))
    (message "net %s" net)
    (insert name)
    (put-text-property start (point) 'bbdb-field '(name))
    (when (stringp net)
      (gravatar-retrieve
       net
       (lambda (image buffer)
         (unless (eq image 'error)
           (with-current-buffer buffer
             (insert " ")
               (insert-image image))));)
       `(,(current-buffer))))
    (when company
      (insert " - ")
      (setq start (point))
      (insert company)
      (put-text-property start (point) 'bbdb-field '(company)))))

モザイクだらけでアレですが、恐らく次のような感じになると思います。

https://cacoo.com/api/v1/diagrams/TiwovYL3X1hUhZ4D-0A25F.png

X-Faceは今

bbdbを調べている時にX-Faceというものをを知りました。今はあまり使われていないようですが。

X-Face – Wikipedia

gravatar.elはまさに現代版X-Faceって感じです。実はこっそり受信メールのX-Faceを収集しているのですが、今だにX-Faceのついたメールが来ません。。。

Gmailのアドレス帳をbbdbにインポート

Gmailって便利ですね。Androidを使うようになって連絡先も同期されるようになったので、さらに便利になった気がします。
便利は便利なんですが、いざ文章を書くとなるとブラウザではなかなか書きにくいもので、メールを送る時にはEmacsでWanderlustを起動させて書いてます。
この使い方で結構満足していたのですが、Wanderlustのアドレス帳はとても貧弱でいちいち自分で入力しないといけないのが不満でした。
Gmailのアドレス帳を取りこめないもんかなーと思ってたら、なかなか便利なものがあったので紹介します。

bbdbをインストール

bbdbとは、Emacsで動作するアドレス帳管理ツール。Gnus、WanderlustなどEmacsのMUAと協調して動作します。メールを読めば,そのメールの送信者などを勝手にアドレス帳に追加してくれる便利なツールです。

The Insidious Big Brother DataBase @ SourceForge

インストールについては次のサイトで詳しく書かれていました。要はいつもの ./configure > make で良いわけですが ファイルの配置、info追加に伴うdirの修正などは自前でする必要があります。

インストール: BBDB – Computer

Wanderlustと併用する場合は次のようなコードを.emacsとかに入れとくと良いようです。

(require 'bbdb-wl)

(bbdb-wl-setup)
;; メールを開いた時にbbdbバッファをポップアップ表示
(setq bbdb-use-pop-up t)
;; 自動収集させる
(setq bbdb/mail-auto-create-p t)
;; 自動収集しないフォルダの指定
(setq bbdb-wl-ignore-folder-regexp "^@")
(setq signature-use-bbdb t)
(setq bbdb-north-american-phone-numbers-p nil)
;; サマリに bbdb の名前を表示
(setq wl-summary-from-function 'bbdb-wl-from-func)
;; 自動的に ML フィールドを加える
(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook)
(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0))))

(setq bbdb-complete-name-allow-cycling t)

(setq bbdb-auto-notes-alist 
      '(("X-Mailer" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-ML-Name" (".*$" ML 0))
        ("User-Agent" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-Newsreader" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-Emacs"  (".*" emacs 0))
        ("X-Url"    (".*" www 0))
        ("X-Uri"    (".*" www 0))
        ("To"       ("kose@" ml "direct"))
        ("X-Ml-Name" (".*" ml 0))
        ("reply-to" ("^\([^@]+\)@" ml 1))))


;; 問い合わせなしでセーブ
(setq bbdb-offer-save nil)

Gmailのアドレス帳をbbdbにインポート

これで、新しく来るメールはアドレス帳に取りこむことができるわけですが、Gmailのアドレス帳にあってメールが来ない人たちのアドレスが取りこまれません。
もう二度とメールが来ないような人たちもたくさんいますが、世の中何が起こるかわかりませんので、この際取りこんでおきます。
これには、google-contacts.elというelispを使わせてもらいました。

GNU Emacs | Tools and Hacks

使い方は簡単。リンク先にもありますが、まずファイルを読みこんでおいて、

;; Load library
(load-file "/path/to/google-contacts.el")

Gmailのアドレスとパスワードを設定しておきます。

;; Configure username/password to GMail
(setq google-contacts-email "my-email@gmail.com")
(setq google-contacts-passwd "secret")

そして、次のような関数を定義。

;; Here's an interactive function that retrieves Google contacts and updates
;; BBDB:
(defun google-contacts-update-bbdb()
  "Fetch contacts from Google and merge them into local BBDB."
  (interactive)
  (google-contacts-merge-with-bbdb (google-contacts-retrieve)))

後は、定義した関数を実行すれば、bbdbにGmailのアドレス帳が取りこまれます。つか、Gmailのアドレス帳ってこんな簡単に抜けていいんだろうか。。。