[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: refresh tab status



>>>>> In [emacs-w3m : No.05817] 土屋さん wrote:

> Emacs-21.2 で使っていると,以前は,

>     コンテンツ取得中を示して,タブ中のタイトルの色が黒から赤に変わる
>     コンテンツ取得完了を示して,タブ中のタイトルの色が赤から黒に戻る

> となっていたと思うのですが,最近になって,カーソルを一度動かさないと
> 上記の変化が起こらないようになりました.

申し訳ない、favicon の表示に気を取られて、そっちがおろそかになっ
てしまっていました。とりあえず、黒/赤の変化が起こらない原因になっ
ている 0.1秒タイマーを取り去りましたが、もっと根本的なところから
やり直そうと思っています。

> 取得開始時と終了時に適当に refresh してくれると嬉しいんですけど.

その「適当に」が曲者でして、現在 Emacs 21 では header-line の表
示を

(symbol-value 'header-line-format)
 => ((:eval (w3m-tab-line)))

という固定値で行なっていて、Emacs が w3m-tab-line という関数を
「適当に頻繁に」呼んでくれることによって、その戻り値が表示に反映
されています。Emacs が外部プロセスとつながっているときは非常に頻
繁に (一つのページを reload する間に 1000回前後) 呼ばれるのです
が、それで spinner を回したのでは速すぎるので、0.1秒未満の周期で
呼ばれた場合は何もしないようにしたのでした。じゃあ 0.1秒経てば
タイトルの色が変化するかと言うと、そうはならないのが不可解なとこ
ろです。

一方、favicon を取得して画像を header-line に張り付けた後では外
部プロセスとの通信が行なわれないので、ただ待っていても画像が現れ
ない問題が以前はありました。これは前記とは別のタイマーで解決して
あります。

ぼくが考えている根本的な解決は、header-line-format の :eval 機能
を使わずに、header-line-format を外部プロセスの開始終了にしっか
り同期して書き換えることです。うまくいくかどうか判りませんが。
-- 
Katsumi Yamaoka <yamaoka@jpl.org>