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

Re: w3m-{weather,antenna,perldoc,...} do not popup buffer



>> On Mon, 24 Nov 2003 09:23:13 +0900
>> 「山」== yamaoka@jpl.org (Katsumi Yamaoka) said as follows:

土> そこで,かなり今更かなあという気はするのですが,w3m-goto-url() の 
土> default の動作は「window / frame を popup する」ということにしませ
土> んか?

山> これぞ妙案!

‥‥‥ですか?

山> 何となく w3m-goto-url() は、引数の多さからしても内部コアルーチンで
山> あって、派手な (ビジュアルな) 変化を起こすことが似合わないという気
山> がしていた一方で、インタラクティブなコマンドとして w3m() との地位
山> の関係がうまく整理されていないなあ、と思っていました。

同感です.

で,これまた今更なんですが,私が w3m() と w3m-goto-url() の切り分けを
実施した rev 1.117 のコードを取り出してきて眺めてみました.該当部分を
末尾に添付しましたが,

    うーん,なんてシンプルなんだ! なんて分かり易いんだ!

プロジェクトの進展って何なんだろう‥と改めて考えさせられてしまいます.

でまあ,rev 1.117 を眺めてはっきりしたんですが,当時の私の意図は

  ・w3m() は,基本的には URL の入力を受け取らず,単に emacs-w3m のバッ
    ファを表示するためのコマンド.
  ・w3m-goto-url() は,完全にバックエンドの関数.

だったんですねえ.ところが,そのように変更してしまうと,emacs-w3m のバッ
ファ内で g URL RET とするためのコマンドがなくなってしまったので,慌て
て w3m-goto-url() をコマンドにした,というのが真相のようです.

よく調べてみると,w3m-goto-url() がコマンドになったのは rev 1.118 なん
ですが,

    revision 1.118
    date: 2001/03/15 08:09:02;  author: tsuchiya;  state: Exp;  lines: +7 -5

    revision 1.117
    date: 2001/03/15 07:49:45;  author: tsuchiya;  state: Exp;  lines: +96 -92

と,僅かに20分しか経っていません.このことからも,いかに私が慌てていた
か分かります.

さて,そのように考えると,

山> しかし、自分用の解釈ですが、インタラクティブなコマンドのための内部
山> コア、それ自身もコマンド、しかし例外として派手な動作を抑制すること
山> が可能、とすれば、すべてがすっきりする気がします。w3m() の popup 
山> 機能を w3m-goto-url() に委ねるところあたりから作業をはじめようと思
山> います。

w3m() / w3m-goto-url() の基本的な違いは,引数の入力を必要とするか否か
の条件のみである,と考えれば良いのではないかと思います.すなわち,

  ・w3m() は,管轄外のバッファから emacs-w3m を起動するためのコマンド
    であって,基本は emacs-w3m のバッファの popup のみ.ただし,
    w3m-quick-start が nil の場合は,URL の問い合わせを行う.

  ・w3m-goto-url() は,管轄外・内を問わずに適当なバッファから,指定さ
    れた URL を表示する emacs-w3m のバッファを開くためのコマンドであり,
    常に URL を問い合わせる.

というように整理(現状追認?)すれば良いのではないでしょうか.

したがって,やはり w3m-goto-url() の default としては「window / frame 
を popup する」ということになると思います.

このように考えてくると,やっぱり,現行の w3m-goto-url() は,一つの関数
であまりにもたくさんのことを実行しすぎているので,適当な機能の分担が必
要ですね.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )

(defun w3m-goto-url (url &optional reload)
  "Retrieve URL and display it in this buffer."
  (cond
   ;; process mailto: protocol
   ((string-match "^mailto:\\(.*\\)" url)
    (w3m-goto-mailto-url url))
   ;; process ftp: protocol
   ((and (string-match "^ftp://" url)
	 (not (string= "text/html" (w3m-local-content-type url))))
    (w3m-goto-ftp-url url))
   (t
    ;; When this buffer's major mode is not w3m-mode, generate an
    ;; appropriate buffer and select it.
    (unless (eq major-mode 'w3m-mode)
      (set-buffer (get-buffer-create "*w3m*"))
      (unless (eq major-mode 'w3m-mode)
	(w3m-mode)
	(setq mode-line-buffer-identification
	      (list "%b" " / " 'w3m-current-title))))
    ;; Setup arrived database.
    (w3m-arrived-setup)
    (w3m-arrived-store-position w3m-current-url)
    ;; Retrive.
    (let ((orig url)
	  (name))
      (when (string-match "#\\([^#]+\\)$" url)
	(setq name (match-string 1 url)
	      url (substring url 0 (match-beginning 0))))
      (if (not (w3m-exec url nil reload))
	  (w3m-refontify-anchor)
	(w3m-arrived-add orig)
	(if name (w3m-arrived-add url))
	(w3m-fontify)
	(or (and name (w3m-search-name-anchor name))
	    (goto-char (point-min)))
	(setq w3m-display-inline-image-status 'off)
	(when w3m-display-inline-image
	  (sit-for 0)
	  (w3m-toggle-inline-images 'force reload))
	(setq buffer-read-only t)
	(set-buffer-modified-p nil))))))

(defun w3m (url &optional args)
  "*Interface for w3m on Emacs."
  (interactive
   (list (or (w3m-alive-p)
	     (w3m-input-url))))
  (if (bufferp url)
      (set-buffer url)
    (w3m-goto-url url))
  (switch-to-buffer (current-buffer)))