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

Re: follow anchors that point shimbun articles



>> On Wed, 04 Jul 2007 15:32:49 +0900
>> yamaoka@xxxxxxx (Katsumi Yamaoka) said as follows:

>土屋さんがこのときに追加された変数を流用して

>  (setq w3m-goto-article-function 'browse-url)

>とすることを提案し、これを defcustom で定義するように変更、かつこの変数
>に設定した関数の戻り値が何でも良いことにしました。

>一方、本来の目的である `gnus-summary-refer-shimbun-article' という関数
>(nnshimbun.el にあります) が、その url を Xref として持つ新聞記事がロー
>カルシステムに無い場合に nil を返したら、通常の方法でその取得を再度試み
>るという従来の仕様は変えていません。

>ただし`gnus-summary-refer-shimbun-article' を単独で (catch 無しで) 使う
>とエラーになりますが、問題無いですよね?

問題ありと思います.

斜めにコードを読んだだけですが,非局所脱出を使わなければならない必然性が
分かりません.非局所脱出を使って,外部プログラムとインターフェースを取ろ
うとすると,非局所脱出のためのシンボルと返り値という2つの要素が必要になり
ます.つまり,emacs-w3m と外部プログラム(この場合,browse-url)の両方で同
一のシンボルを使うと同時に,同じ semantics の返り値を使う必要があり,互換
性問題を複雑にします.

また,非局所脱出用のシンボルとして,success という非常にありがちなシンボ
ルを使っていますが,これも疑問です.このようなありがちなシンボル名は,外
部プログラムの内部でも使われる可能性が高いですから,少なくとも,外部プロ
グラムとの間の通信で使うべき名前ではないと思います.

すみませんが,下記の変更ではまずい理由を解説して頂けませんか.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )
--- w3m.el	24 Sep 2007 09:48:29 -0000	1.1310
+++ w3m.el	24 Sep 2007 14:40:23 -0000
@@ -9547,12 +9547,10 @@
 ;;; w3m-minor-mode
 (defcustom w3m-goto-article-function nil
   "Function used to visit an article pointed to by a given URL.
-Normally, this is used only when you follow a link in an html article.
-A function set to this variable takes one argument URL.
-
-If the function throws nil, that means the function failed in fetching
-URL, to the catch tag `success', the default function tries to fetch
-URL again.  See `gnus-summary-refer-shimbun-article' in nnshimbun.el."
+Normally, this is used only when you follow a link in an html
+article.  A function set to this variable must take one argument
+URL, and must returns non-nil value when it fails in fetching a
+given URL."
   :group 'w3m
   :type '(radio (const :tag "Use emacs-w3m" nil)
 		(function :value browse-url)))
@@ -9578,9 +9576,7 @@
 	(url (w3m-url-valid (w3m-anchor))))
     (cond
      (url (or (and (functionp w3m-goto-article-function)
-		   (catch 'success
-		     (funcall w3m-goto-article-function url)
-		     t))
+		   (funcall w3m-goto-article-function url))
 	      (if (and w3m-make-new-session
 		       (not (eq major-mode 'w3m-mode)))
 		  (w3m-goto-url-new-session url)
--- shimbun/nnshimbun.el	8 Aug 2007 01:07:57 -0000	1.60
+++ shimbun/nnshimbun.el	24 Sep 2007 14:40:23 -0000
@@ -875,14 +875,12 @@
   (interactive "sURL: ")
   (let ((method (gnus-find-method-for-group gnus-newsgroup-name))
 	(header))
-    (throw
-     'success
-     (and (eq 'nnshimbun (car method))
-	  (nnshimbun-possibly-change-group nil (nth 1 method))
-	  (setq header (nnshimbun-search-xref
-			(gnus-group-short-name gnus-newsgroup-name) url))
-	  (with-current-buffer gnus-summary-buffer
-	    (gnus-summary-refer-article (shimbun-header-id header)))))))
+    (and (eq 'nnshimbun (car method))
+	 (nnshimbun-possibly-change-group nil (nth 1 method))
+	 (setq header (nnshimbun-search-xref
+		       (gnus-group-short-name gnus-newsgroup-name) url))
+	 (with-current-buffer gnus-summary-buffer
+	   (gnus-summary-refer-article (shimbun-header-id header))))))
 
 (defun nnshimbun-setup-article-mode ()
   (set (make-local-variable 'w3m-goto-article-function)