2006年12月10日(日)
MacBookPro 祭り (2) – Wanderlust から Spotlight を利用
Mac になっても相変わらず Emacs 上で Wanderlust をメールソフトとして使い続けているわけですが,せっかく Mac になったのですから,便利な検索システムである Spotlight を使いたいところ.いろいろ調べてみたところ,同じ Emacs 上で動く Mew では Spotlight を使って検索できるようになっているらしいのですが,残念ながら Wanderlust での事例は見つけられず.
Wanderlust から Spotlight で検索できるようにするためには,以下の 2 つが必要.
- MH 形式のメールを Spotlight の検索対象にする
- Wanderlust から Spotlight で検索して結果を表示する
それぞれ追って解決していこう.
MH 形式のメールを Spotlight の検索対象にする
これに関しては,すでに Mew で Spotlight を使うためにいろいろと開発されているので,それを導入すればよかった.こちらを参考に MHTextImporter を導入して完了.インデックスの作成は,件のページと同様のコマンドをときどき実行することで解決.
Wanderlust から Spotlight で検索して結果を表示する
これに関しては,開発版の Wanderlust ( Carbon Emacs に入っているものから入れ替えています)で導入されている Search フォルダを使うことで解決.この Search フォルダ,初めて使ってみたのですが,便利ですね.以前の Namazu フォルダのように,外部コマンドの実行結果を仮想的なフォルダとして表示できるわけですが,任意のコマンドが呼べるように拡張した感じでしょうか.今回は Spotlight の検索コマンドである mdfind を呼び出せばいいわけです.
ただ,これは僕の emacs lisp や mdfind に対する理解が少ないためなのですが,検索対象を絞る方法がうまく実装できず.とりあえず全体から検索する機能だけで実現しました.ただ,それだとメール以外のファイルが検索結果として出てきてしまうので,検索範囲を限定するラッパーを作成して,それを呼び出すことで解決.
Wanderlust から検索範囲を指定できるようにしました.
あと,これは Spotlight の問題か MHTextImporter の問題かわからないのですが,ときどき mdfind の検索結果として,ファイル名ではなく iNode が出てくることが・・・.これは困った.ただ,先ほど作ったラッパーで,検索結果が iNode だった場合に find コマンドでファイル名に置き換えるように工夫して,これもクリア.
なんか Spotlight そのものが不安定になって,強制的にインデックスを再構築.さらに iNode と表示されるファイルたちを,コピーして,オリジナルを消して,コピーをオリジナルと同じ名前で戻す,という作業をしたところ,とりあえず iNode とはでなくなったので,この対処もいらなくなりました.
というわけで wlfind は消え去りました.
で,無事に Wanderlust から Spotlight で検索できるようになりました!快適です!
以下,作成したものを列挙.
まず Search フォルダ用の emacs lisp の elmo-search-spotlight.el はこちら.
あと ~/.wl の設定.下記には書きませんでしたが,上記の elmo-search-spotlight.el のあるディレクトリを load-path に入れておいて下さいね.あと 2 行目は,デフォルトの検索エンジンとして使わない場合は必要なし.
(require 'elmo-search-spotlight) (setq elmo-search-default-engine 'spotlight)
これで完成.検索方法はこちらを参考にして下さい.
おまけとして,インデックス作成用のスクリプトは,前出の参考にしたサイトと同じように,以下の内容を mhindex として用意.今のところ手動で作成.
#!/bin/sh TARGET=~/Mail LOGFILE=~/var/log/mhindex.log find $TARGET -type f -newer $LOGFILE -print | grep -E "[0-9]$" | xargs /Developer/Tools/SetFile -t "MHTX" find $TARGET -type f -newer $LOGFILE -print | grep -E "[0-9]$" | xargs mdimport -f touch $LOGFILE
はい,無事完了です.今後検索範囲を Wanderlust から指定できるようにしたいと思いますが,今のところ不便はないかな(対応済み).あと,今回使用した MHTextImporter 以外に Gnus 用に MH メールをインデックスするものもあるみたい.どっちが便利なんだろう.
「インデックスの作成は,件のページと同様のコマンドをときどき実行することで解決.」と書かれていますが,「件のページ」がなくなっていて,どうすればいいのか分からないのですが.追記,お願いできませんでしょうか?