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) あたりが怪しい。

<< 2008/01 >>
01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

RSS