Thunderbird のメッセージフィルタ ― 2008年01月11日
Thunderbird (Icedove) 2.0.0.9 のメッセージフィルタ機能において設定した フィルタは msgFilterRules.dat に保存されるけど、このファイルに書き出す処理が 変な気がする。
msgFilterRules.dat から .procmailrc に変換するスクリプトでも書こうと、 msgFilterRules.dat のフォーマットを調べているあいだに変な点にでくわした。
「フィルタの設定」のダイアログで、たとえば、
[件名] [に含む] [word]
と書くと、msgFilterRules.dat の対応する行には
condition="OR (subject,contains,word)"
と出力される。
[件名] [に含む] [word1 (word2) word3]
のように、文字列中に ')' という文字を含まれるようにしてみると、
condition="OR (subject,contains,\"word1 (word2) word3\")"
となる。また、
[件名] [に含む] [word1 "word2" word3]
は
condition="OR (subject,contains,word1 \\"word2\\" word3)"
となる。さてここで、
[件名] [に含む] [word1 \" word2]
としてみると、
condition="OR (subject,contains,word11 \\\"word2)"
となる。バックスラッシュの数が何か変。Thunderbird を再起動し、 このように書き出された msgFilterRules.dat を読みこませると、
フィルタの定義ファイル msgFilterRules.dat が壊れてします。 古い定義ファイルの名前を rulesbackup.dat に変更し、新しい フィルタ定義ファイルを作成します。
というエラーが出て、フィルタの一覧がクリアされてしまう。Thunderbird を終了し、 rulesbackup.dat をふたたび msgFilterRules.dat として戻し、
condition="OR (subject,contains,word11 \\\\"word2)"
と手で修正すると正常にダイアログは表示され、該当文字列は入力した とおりに戻っている。
mailnews/base/search/src/nsMsgSearchTerm.cpp の nsresult nsMsgSearchTerm::OutputValue(nsCString &outputStr) あたりが怪しい。
最近のコメント