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

Re: w3m form textarea



From: TSUCHIYA Masatoshi <tsuchiya@xxxxxxxxxx> さん曰く
Subject: [emacs-w3m:09270] w3m form textarea
Message-ID: <87wt13cqrt.fsf@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 27 Mar 2007 12:24:38 +0900

> 他力本願モード.
> 
> 最近,WiKi で作業日誌をつけているのですが,*w3m form textarea* で編集し
> ながら,他のバッファに移動し,さらに戻るという操作をしばしば行うのです
> が,一発で戻れずに苦労しています.

ふむふむ。

> *w3m form textarea* バッファが開かれている場合は,M-x w3m RET 一発で戻
> れるか,または,*w3m form textarea* バッファも TAB で表示してくれると嬉
> しいなあと思うのですが,どうでしょう.

コードをみてみましたが、ぼくがやるには相当時間がかかりそうな感じ。

以下、ご参考までですが、

すでにぼくは土屋さんが望んでいる環境を自前で作っちゃっていまして、
それは elscreen を使って、w3m には(だいたいいつも)一つの screen
を割り当てる環境です。

http://www.morishima.net/~naoto/software/elscreen/

他の作業を、別の screen でやるようにすれば、おそらく↓だけで、
M-x w3m で textarea ごと復帰すると思います。お急ぎでしたら使って
みてくださいませ。

ただし、ぼくが使っている elsceen は 1.4.3 なので、最新の 1.4.5
だと *あたり* がでるかもしれません。elscreen がらみの関数はたく
さん書いているのでバージョンアップが止まっていますが、今回関係す
るのはこれぐらいかな?

(setq elscreen-display-tab nil) ;; <= こっちの方が好き

(defvar w3m-pop-elscreen t)
(make-variable-buffer-local 'w3m-pop-elscreen)

(add-hook 'w3m-mode-hook
	  (lambda ()
	    (setq w3m-pop-elscreen nil)))

(defadvice w3m-popup-buffer (around w3m-elscreen-poup-buffer activate compile)
  (if (or (not w3m-pop-elscreen)
	  (memq this-command '(w3m-copy-buffer
			       ;; w3m-goto-url-new-session
			       w3m-view-this-url-new-session))
	  (not (featurep 'elscreen))
	  (save-window-excursion
	    (catch 'detwin
	      (let ( ;; (owin (selected-window))
		    (oframe (selected-frame)))
		(mapcar (lambda (frame)
			  (unless (eq frame oframe)
			    (select-frame frame)
			    (mapcar (lambda (win)
				      (set-buffer (window-buffer win))
				      (when (eq major-mode 'w3m-mode)
					(throw 'detwin t)))
				    (window-list))))
			(frame-list))
		nil))))
      (let ((w3m-pop-up-frames nil)
	    (w3m-pop-up-windows nil))
	ad-do-it)
    (if (stringp buffer)
	(setq buffer (get-buffer buffer)))
    (let ((screen (elscreen-find-screen-by-buffer buffer))
	  (create t))
      (when (and (not screen)
		 (memq this-command '(w3m-goto-url-new-session)))
	(if (not (eq major-mode 'w3m-mode))
	    (setq create nil)
	  (setq screen
		(elscreen-find-screen
		 (lambda (num)
		   (elscreen-goto-internal num)
		   (save-selected-window
		     (catch 'find
		       (mapcar
			(lambda (window)
			  (select-window window)
			  (when (and (eq major-mode 'w3m-mode)
				     (not (eq (current-buffer) buffer)))
			    (throw 'find num)))
			(window-list))
		       nil)))))))
      (if screen
	  (progn
	    (when (/= (elscreen-get-current-screen) screen)
	      (elscreen-goto screen))
	    (if (not (or (one-window-p)
			 (eq major-mode 'w3m-mode)))
		(let* ((cwin (selected-window))
		       (win (previous-window cwin))
		       buf)
		  (catch 'detect
		    (while (not (eq cwin win))
		      (setq buf (window-buffer win))
		      (set-buffer buf)
		      (when (eq major-mode 'w3m-mode)
			(select-window win)
			(throw  'detect 'ok))
		      (setq win (previous-window win)))
		    (elscreen-create)
		    (set-window-buffer (selected-window) buffer)))
	      (unless (eq (current-buffer) buffer)
		(set-window-buffer (selected-window) buffer))))
	(when create
	  (elscreen-create))
	(set-window-buffer (selected-window) buffer)))))

# わたしゃ、elscreen 使い出してから複数フレームも使わなくなりま
# した。

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)