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

Re: follow anchors that point shimbun articles



問題は `w3m-goto-article-function' の利用を、第1 にぼくがコード
をよく見ず安易に勧めてしまったことと、第2 に変数名がユーザーオプ
ションとして絶好だったので、強引に仕様変更してしまったことですね。

>>>>> In [emacs-w3m : No.09644] 土屋さん wrote:

>>> On Mon, 24 Sep 2007 23:51:49 +0900
>>> tsuchiya@xxxxxxxxxx (TSUCHIYA Masatoshi) said as follows:

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

> ‥‥ああそうか,「何でも良い」を達成するために,非局所脱出を使うようにし
> たのですね?

はい。苦肉の策と言うか。

[...]

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

元の使い方としては nnshimbun.el と w3m.el が密接に連係しているの
で、双方で申し合わせたシンボルを使うことは必然だと言い張ることも
できるのですが、

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

はい、ぼくも現在のやり方が美しくないことを認めます。ただ、万が一
`w3m-goto-article-function' に設定した関数が success というシン
ボルで throw するとしても、その関数が catch してしまえば問題あり
ません。そういう設計が行なわれる可能性と、その関数の外に catch
要素がある設計が行なわれる可能性を比較すると、後者は格段に低いで
しょう。

> しかし,上記2点の問題点は変わりませんから,やっぱり筋の悪い解決策だという
> 印象はあります.

> browse-url() の返り値は,browse-url-browser-function の値に左右されるので
> すが,Emacs22 で最初から用意されている20関数の内,常に nil を返す関数は
> browse-url-cci() のみで,残りの関数は常に non-nil を返しそうです.

見どころは同じですね。ぼくもそのあたりを調べ上げました。

> 単純には,「失敗した場合には t を返す」というような関数に制限してやれば,
> browse-url 由来の関数でも大抵は無改造で済ませられるのですが.
> ‥‥‥しかし,「失敗した場合には t を返す」ってのはなあ.なんだかなあ.

たとえば `nnshimbun-foo-bar-flag' みたいな変数で媒介させるように
すれば、ソースコード上で設計意図を明示することはできます。これも、
なんだかなあ、ではありますが。
-- 
山岡