[Mew-dist 15187] Re: thread

Shun-ichi TAHARA ( 田原 俊一 ) jado at example.com
2000年 11月 29日 (水) 00:25:53 JST


From: Hideyuki SHIRAI (白井秀行) <shirai at example.com>
Message-Id: <20001128.185103.68562143.shirai at example.com>

> 古いメールが入っている folder(*1) で実験したところ、300 通ぐらい
> のメールがあるのに
> 
> (setq mew-use-complete-thread t)
>  => 10通ぐらいしか表示されない。
> 
> (setq mew-use-complete-thread nil)
>  => 80通ぐらいしか表示されない。
> 
> という folder を見つけました。(残業時間だし)追求してみると

うちでも、+trashに1600通ほど入っているくせに、threadにすると200通程度
しか出ないという状態でした。

+trashの全行で
  (and (looking-at mew-regex-thread) (mew-match 1))
を実行して my-id 相当を抜き出してみると、

・Message-Id:に空白が混じっているもの
  (mew-regex-thread に引っかからないのでnilになる→threadで表示されない)
・Message-Id:がないもの
  (へッダが長すぎてmewlsが切り捨てたため、Message-Id:とSubject:が空白)

というものがそれぞれ1通ずつありました。

問題は後者で、my-id が "" になりますが、この場合、
  (set (intern my-id db) me)
しても、db のどこにも me が格納されないようです。

このメッセージはどこのスレッドにも属していないものですが、これが thread
の生成にどう影響するのかはまだ追いきれていません。

> mew-summary-thread-region() 内で
> 
> 	   (if (not (looking-at mew-regex-thread))
> 	       (forward-line)
> 	     (setq my-id (mew-match 1))
> 	     (if (string= my-id "")
> 		 (setq my-id (make-temp-name "foo")))
>  とか
> 		 (setq my-id "foobar"))
> 
> なことをすると、問題なく(問題があるメールも含め)すべて表示されま
> した。わざわざ make-temp-name しなくても大丈夫だったのだけど、こ
> の辺りのことは良くわかっていません。

おそらく、

  (set (intern my-id db) me)

で、きちんと db に me が突っ込まれる必要がありそうですので、my-id が
"" でないことが肝心なのでしょう。ハッシュの性質から見て、unique でなく
ても問題はないと思います。
# いや、もちろん、my-id がユニークじゃないと正しく thread を生成できな
# いでしょうけど。

というわけで、上記の変更でこちらでも問題なく thread が生成できました。
Message-Id: に空白が入っていた 1通だけは表示されていませんが、これはそ
のようなコーディングがされているので問題ではないと思っています。
# 次のバージョンで解決されそうな感じですし。

ちなみに、(make-temp-name "foo") ではあんまりなので、せめて、
(make-temp-name "null") とか (make-temp-name "dummy") とかの方がいいか
な。単にキモチの問題ですが。
--
田原 / jado at example.com



Mew-dist メーリングリストの案内