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

w3m-view-this-url-new-session (was: w3m-filter and w3mmee/w3m-m17n)



>> On Tue, 01 Jul 2003 08:57:30 +0900
>> 「山」== yamaoka@jpl.org (Katsumi Yamaoka) said as follows:

山> もう一つ、これはまったく関係無いことですが、坂本さんのページ
山>     http://www2u.biglobe.ne.jp/%7Ehsaka/w3m/index-ja.html
山> で「マルチリンガル化(M17N) w3m」などのリンクを SHIFT-RET
山> (w3m-view-this-url-new-session) で辿ることができません。対策してあっ
山> たような記憶があるんですが、こんなものでしたっけ?

理由が分かったと思います.

w3m-goto-url() は実際に retrieve する前に,

          (w3m-process-do
              (action
               (if (and (not reload)
                        (not redisplay)
                        (stringp w3m-current-url)
                        (string= url w3m-current-url))
                   (progn
                     (w3m-refontify-anchor)
                     'cursor-moved)

と w3m-current-url の値を調べて,同一ならば,同一ページ内の移動と見な
して retrieve を行わずに手抜きするようになっています.それに対して,
w3m-view-this-url-1() は何故か w3m-current-url を元のページと同一にな
るように代入を行っているので,実際には empty なのに同一ページと判定さ
れて失敗する,ということのようです.ですから,添付のパッチで一応は動く
ようになります.

しかし,問題の本質は別の個所にありそうな気がして調べてみたのですが,こ
れらの session 管理周辺の処理は非常に謎が多くて,よく理解できませんで
した.まず,

    ;; When new URL has `name' portion, we have to goto the base url
    ;; because generated buffer has no content at this moment.

このコメントはどういう意味なんでしょうか?
w3m-view-this-url-new-session() は,煎じ詰めれば,

    (defun simple-w3m-view-this-url-new-session ()
      (interactive)
      (let ((url (w3m-anchor)))
        (with-current-buffer (w3m-copy-buffer)
          (w3m-goto-url url))))

という処理(生成元になったバッファでの refontify が抜けてますが)だと思
うのですが,実際にはわざと empty な複製ページを作成したりしています.
w3m-goto-url-new-session() も同じように empty な複製ページを作っていま
す.

どうしてこういうコードになっているのか,少し説明をお願いできないでしょ
うか.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )

--- w3m.el	3 Jul 2003 09:05:05 -0000	1.495.2.103
+++ w3m.el	3 Jul 2003 14:20:12 -0000
@@ -4337,14 +4337,13 @@
 	(if w3m-view-this-url-new-session-in-background
 	    (set-buffer (w3m-copy-buffer nil nil nil 'empty))
 	  (switch-to-buffer (w3m-copy-buffer nil nil t 'empty)))
-	(setq w3m-current-url referer))
-      ;; When new URL has `name' portion, we have to goto the base url
-      ;; because generated buffer has no content at this moment.
-      (when (and (string-match w3m-url-components-regexp url)
-		 (match-beginning 8))
-	(save-window-excursion
-	  (w3m-goto-url (substring url 0 (match-beginning 8))
-			reload nil nil w3m-current-url))))
+	;; When new URL has `name' portion, we have to goto the base
+	;; url because generated buffer has no content at this moment.
+	(when (and (string-match w3m-url-components-regexp url)
+		   (match-beginning 8))
+	  (save-window-excursion
+	    (w3m-goto-url (substring url 0 (match-beginning 8))
+			  reload nil nil referer)))))
     (let (handler)
       (w3m-process-do
 	  (success