メインPCをVistaからWin7に移行させて半月。
Vitaをリリース時から使い続ける、というある意味の「苦行」をしてきた修行者だけが味わうことができる至福の時を存分に味わっているが、今のところ一つだけ困っている問題があった。それは「メールが検索できない」というもの。
普段使いしているメーラーであるところの「Mew」は、Vistaで使っていた「NTEmacs」ごとバイナリをコピーしたら使えたのでまったく問題無かったのだが、メールの検索に使用しているWindows標準の機能である「Windows Search」関連で問題が発生したのだった。
問題は「インデックスを作成しても検索できない(1件もヒットしない)」という致命的なもの。
実務にも多大なる影響を与えていた。
MewからWindows Searchを使うには「wdsgrep」という素敵なプログラムを介するのだが、どうもこのプログラムからの応答が空っぽになっている様子。Vistaでは問題無く動いていたのでWin7固有の問題であろう、ということで、ソースを持ってきて少しデバッグしてみた。
で、あれこれ調べてみたら、wdsgrepの中で指定している検索フィルタが原因であった。
現在の実装では検索する対象を絞り込むために、検索対象となるファイルを「ext:mew」というように拡張子で指定している。Vistaまではこれで問題無く動いていたのだが、Win7では検索フィルタの指定は「日本語」で行う必要があるようなのである。
エクスプローラーの検索ボックスに検索文を入力するとよく分かる。
wdsgrepの現在の実装で使われている検索文と同じものを入力する。
「ext:mew」の部分が検索フィルタとして認識されていない。
検索フィルタとして認識されると以下のように青い文字となって表示される。
これなら正しい結果が得られる。
というわけで、安直だが以下のようにソースを変更してビルドしてみた。
*** wdsgrep.cs.old Wed Mar 25 14:44:54 2009
--- wdsgrep.cs Tue Jan 19 01:18:15 2010
*************** namespace wdsgrep
*** 185,191 ****
if (regexstr != null) urlregex = new Regex(regexstr, RegexOptions.IgnoreCase);
//if (ext != null) query += " " + ext_withoutdot(ext); // "mew" is faster than ".mew"
! if (ext != null) query += " ext:" + ext_withoutdot(ext); // a little fanster than "mew"
string query_no_path = query;
// if path_frargment
--- 185,191 ----
if (regexstr != null) urlregex = new Regex(regexstr, RegexOptions.IgnoreCase);
//if (ext != null) query += " " + ext_withoutdot(ext); // "mew" is faster than ".mew"
! if (ext != null) query += " 拡張子:" + ext_withoutdot(ext); // a little fanster than "mew"
string query_no_path = query;
// if path_frargment
「拡張子」じゃなくても「種類」でも期待する結果が得られる。
Vistaのときは、検索フィルタのキーは日本語/英語のどちらでも正常に動作していた。
Win7 x64がいけないのか、Windows Searchのv4がいけないのか、はたまた設定で回避できる問題なのか。
詳細は現時点ではよく分かっていない。
が、ひとまず動くようにはなったのでよしとしよう‥。
参考:
Using Windows Search to search for Windows Live Mail e-mail will return incomplete results on Windows 7 64-bit Operating Systems
http://support.microsoft.com/default.aspx/kb/969165