[mew-dist 21436] IMAP local refile
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2002年 8月 15日 (木) 17:00:36 JST
書かないと忘れてしまうので、投げておきます。IMAP local refile デザイン・
メモです。
・online、offline 問題
- online、offline というモードを作るのは嫌だ
- でも、offline か素早く判定する方法はない
* open-network-stream() は、getaddrinfo() や connect()
でブロックされる。どうも、getaddrinfo() でブロックさ
れた場合は、Emacs のタイマーが効かないみたい。Emacs
21 では、connect() でもタイマーが効かないみたい
* 4 秒で open-network-stream() が終了しないと、タイマー
抜けて、offline だと判定する現在の方法は、特定の環境
でしか役に立ちそうもない
- "x" して、open-network-stream() で刺さったら、C-g で抜けられ
る。抜けたら、invisible の行を visible に戻す今のコードのま
までよい
- exec-offline というコマンドを作って、どれかのキーに割り当て
る。ユーザに online/offline を意識させるが、モードはなし。コ
マンドを使い分ける
・exec-offline
- キャッシュ・メールをキャッシュ・フォルダへ移動
- 移動後のメッセージの番号は、"0" から始まる (これが無効マーク)
- リモート側の操作は、.imap/user at example.com/ ごとの job queue に入
れる
・Job queue
- IMAP のコネクションを張る("s" or "x")前に、job queue をチェッ
クし、あらかじめ処理する
- job queue に異なるフォルダへの処理があったらどうする?
1 コネクションで、複数回 SELECT して問題ないか?
→ 実装してから考える
・"g"
- リモート・フォルダへの "g" でも、ディレクトリの時間を調べる。
更新されていたら、無効なキャッシュ・メッセージを scan。
・"s"
- リモート・フォルダでの "s" で、ディレクトリの時間が更新され
ていたら、無効キャッシュを scan して終り。終らずに、コネクショ
ンを張ろうとすると、offline の際に刺さるので嫌。
"Type 's' again to scan remote messages" とか表示する。
- リモート・フォルダでの "s" で、ディレクトリの時間が更新され
ていないなら、今まで通りリモートのメッセージを scan する。無
効なキャッシュ・メッセージは上書きされる。
・"x"
- 変更なし
- C-g で復帰したときに、refile の情報が失われているような気が
するので、このバグを取る。
おまけ:
Emacs を終了しても、refile マークに対する refile 情報が失われ
ないようにするには、.mew-cache の 1 行目に書き込んでおけばよい?
.mew-cache を読み込む際に、この行を消す
--かず
Mew-dist メーリングリストの案内