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

Improving textarea-backup (was Re: emacs-w3m-1_4 branch)



さっそく新版を使い始めました。

>>>>> In [emacs-w3m : No.07729] 白井秀行さん wrote:

>>> すみません。やっぱり「勝手にバッグアップ化」はときどき煩わしくな
>>> るので、禁止するオプションを作っていただけないでしょうか?

> 良く考えたら、
> (setq w3m-form-use-textarea-backup nil)
> で、まったくバックアップしませんね。

> # だけど、これを nil にするのは悲しいです :-)

ありゃ、そんなのがあったんですね。見なかったことにして t のまま。

>>> 具体的には http://www.excite.co.jp/world/english/ を、英和と和英
>>> 用に二つの tab で表示させ、交互に操作していると (y or n) を聞い
>>> てくることがよくあります。

> いろいろと見ていたら、従来からあった問題にも気付いてしまいました。

> 1. 山岡さんの指摘の内容ですが、同じ URL を複数の tab で開いてい
>   るときに、textarea のバッグアップファイルが同じものになる。

>  => 同じ URL が複数開いているときは、*w3m*<n> の番号の若い方だけ
>     勝手にバックアップするようにした。

;; 実はさっき、http://www.excite.co.jp/world/ が .../english と
;; 同じもので、英和と和英の url を別ものにできそうであることに気
;; がついたんですが、後の祭。^^;;

> 2. 似たような問題で、同じ URL で同じ textarea を同時に edit しよ
>   うとすると、一つの textarea buffer で衝突してしまう。

>  => 親分の w3m buffer も加味して同一性を判定するようにした。

うーむ...

> 3. w3m-delete-buffer(), w3m-delete-other-buffer() などをしたときに、
> 3.1 親分の w3m buffer が消えても、その子分の textarea buffer が
>   生き残ってしまう。

>  => 消すようにした。(*1)

なるほど、

> 3.2 親分の w3m buffer が変わっても、子分の textarea buffer がそ
>   の変更(*w3m*<3> => *w3m*<2> など) についていっていない。

>  => 追従するようにした。

すごいーっ。これもそうだけれど、emacs-w3m って実に複雑な処理が多
いですねえ。お疲れさまでした。本当にありがとうございます。

> といった感じです。1. の変更でほとんどの場合は (y or n) を聞かれ
> ないと思うのですが、

> *w3m* => excite 翻訳  <- (1) 
> *w3m*<2> => excite 翻訳

> の状態から (1) を w3m-delete-buffer() すると、

> *w3m* => excite 翻訳 <- もとは *w3m*<2> だった

> となり、(1) で保存したバックアップを使うようになり (y or n) を聞
> かれてしまいます。これをガードするのは勝手にバックアップをしない
> のとほとんど同じぐらいのレベルに落しちゃうことになるので許してく
> ださい。

了解しました。日々使っているものなので、今後十分なテストができる
と思っています。

> 心残りは、(*1) で消される運命の textarea buffer の window が表面
> に(たくさん)出ていると、消した後の残心が汚い、というのがあるので
> すが、そんな状態はレアケースだと思うのでぼくは気にしないことにし
> ました。

そんなふうになると操作も混乱してくるので、つとめて要らないものは
消すようにしています。実はぼくの `C-c C-k' は以下です。;-)

(eval-after-load "w3m-form"
  '(defadvice w3m-process-stop (around exit-forms-when-no-process activate)
     "Exit all forms when there is no process."
     (if w3m-process-queue
	 ad-do-it
       (let ((cur (current-buffer))
	     buffers)
	 (walk-windows (lambda (window)
			 (push (window-buffer window) buffers)))
	 (dolist (buffer buffers)
	   (with-current-buffer buffer
	     (cond ((eq cur w3m-form-input-textarea-buffer)
		    (w3m-form-input-textarea-exit))
		   ((eq cur w3m-form-input-select-buffer)
		    (w3m-form-input-select-exit))
		   ((eq cur w3m-form-input-map-buffer)
		    (w3m-form-input-map-exit)))))))))