[Date Prev][Date Next][Thread Prev][Thread Next][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>