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

Re: history error



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

> 最近,reload した時に以下のエラーが出ることがあります.

>   error in process sentinel: Symbol's value as variable is void: history-position

> Backtrace を取ると,

> Debugger entered--Lisp error: (void-variable history-position)
>   (if history-position (setcar w3m-history (w3m-history-regenerate-pointers history-position)))
>   (let ((w3m-history-reuse-history-elements t)) (w3m-history-push w3m-current-url (list :title w3m-current-title)) (if history-position (setcar w3m-history ...)))

> なので,w3m-goto-url() の該当部分を lexical-let で保護すれば,場当た
> り的な対処にはなるのですが,この history-position が何を意図している
> 変数なのか,よく分からなかったので,まだ対処してません.

ご指摘ありがとうございます。lexical-let での対処が正しいと思いま
す。あそこでの history-position の値は about://history/ のページ
に表示される各行が text-property で持っている値で、整数のリスト
です。

Emacs-w3m の各セッション (w3m-mode のバッファ) で訪れたことがあ
るページは、ご承知のように木構造の履歴として保存されるのですが、
つい最近まで、一つの木構造の履歴の中に同じ URL のページが複数含
まれることはなく、about://history/ のページに表示されたあるペー
ジへの移動を行なう場合に、木構造のどの位置にジャンプすれば良いか
を一意に決定することができました。

しかし、例えば A -> B -> C -> B とページを辿ったときに、木構造の
履歴には A-B-C というデータと B が現在位置であるという情報しかな
かったので、B から一つ戻ると行き先は A になり、普通にユーザが期
待していた一つ前のページ、すなわち C とは違うものになってしまう
のでした。

そこで、現在は木構造の履歴が A-B-C-B のようなデータを持つことが
できるようにしてあります。しかし about://history/ のページにも同
じ URL のページが複数現れることになり、それらのうちのどれか一つ
に移動した後で「一つ進む」「一つ戻る」という操作を行なった場合に
正しい結果を得るためには、単なる URL 文字列だけではなくて、木構
造の履歴のどこかを特定しなければなりません。history-position は
その位置情報を持っているわけです。

これはたぶん究極の履歴管理システムで、ユーザの嗜好調査などの目的
には有効なのですが、そんな需要があるはずもなく、ユーザに違和感を
感じさせないもっと簡単なやり方があるのではないか、例えば一次元の
履歴だけでも十分なのではないかと、近ごろは思っています。

> それから,ページが見つからないなどの理由でエラーメッセージのページに
> 行ってしまった場合,その後で w3m-view-previous-page すると,2つペー
> ジが戻ってしまいます.

おおっと、いかにも起こりそう。後で確認しますね。

> それにしても,w3m-goto-url() 肥大化しすぎですよね.何が何だか訳が分
> からなくなってきてます.何とか整理しないと….

おっしゃる通りです。^^;;
-- 
Katsumi Yamaoka <yamaoka@jpl.org>