[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: html 記事中の name アンカー
- From: Naohiro Aota <nao.aota@xxxxxxxxx>
- Date: Sat, 06 Sep 2008 08:53:53 +0900
- X-ml-name: emacs-w3m
- X-mail-count: 10354
- References: <b4mtzd9iqjc.fsf@xxxxxxx> <20080825.185504.138086734.shirai.hideyuki@xxxxxxxxxxx>
青田です。
ちょっと時間がとれたので白井さんのをベースに書いてみました。 白井さんの
案から変更した部分は以下の通りです。
Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxx> writes:
> From: Katsumi Yamaoka <yamaoka@xxxxxxx> さん曰く
> Subject: [emacs-w3m:10336] html 記事中の name アンカー
> Message-ID: <b4mtzd9iqjc.fsf@xxxxxxx>
> Date: Mon, 25 Aug 2008 14:59:03 +0900
>
>> html 記事の中に
>>
>> <a href="#a">...</a>
>>
>> のようなリンクがある場合に、これが指し示す同じ記事の中の
>>
>> <a name="a">...</a>
>>
>> という場所に移動することができません (少なくとも Gnus では)。
>
> (1) base url で "buffer://" とか新しいものを導入して、
> (w3m-region pos1 pos2 "buffer://") という感じで実行する。
"buffer://" という url を導入していますが、 w3m-region() の外から url と
して渡すのではなく、 w3m-region() の中で url が nil の時に url を
"buffer://"として扱うようにしています。
> (2) href が "buffer://" なら、view-this-url などでそれなりの処理
> をする。
w3m-view-this-url() はそのまま通してしまうので問題はないのですが、
w3m-safe-view-this-url() が "buffer://*" を安全でないとみなすことがあるの
で "buffer://*" は常に安全とするようにしてあります。
> (3) name anchor なら良いけど、他のファイルだとどうするんだろう。
とりあえず他のファイルの時は default-directory で展開するようにしてみまし
た。
> というぐらいしか考え付きませんでした。ううぅむ。
とりあえずの実装ですのでいくつか問題も残っています。
- buffer の2個所以上で w3m-region している時の処理
-- 同名アンカーが複数の region にある場合、別の region のアンカーに移動
してしまう
- 普通の w3m buffer で "buffer://" を同様に処理してしまってもよいのか。
# shimbun 用で使う分には気にすることもないでしょうけど ^^;
--
青田
Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.1380
diff -u -r1.1380 w3m.el
--- w3m.el 1 Sep 2008 10:14:41 -0000 1.1380
+++ w3m.el 5 Sep 2008 15:58:03 -0000
@@ -8494,6 +8494,11 @@
(setq w3m-modeline-title-timer nil))))
(current-buffer)))))))
+(defconst w3m-buffer-local-url "buffer://")
+(defun w3m-buffer-local-url-p (url)
+ (save-match-data
+ (string-match (concat "^" w3m-buffer-local-url) url)))
+
;;;###autoload
(defun w3m-goto-url (url &optional reload charset post-data referer handler
element)
@@ -8576,6 +8581,22 @@
(eval w3m-local-find-file-function))
file)))))
(error nil)))
+ ;; process buffer-local url
+ ((w3m-buffer-local-url-p url)
+ (let (file-part fragment-part)
+ (w3m-string-match-url-components url)
+ (setq file-part (concat (match-string 4 url)
+ (match-string 5 url))
+ fragment-part (match-string 9 url))
+ (cond
+ ((and (string= file-part "")
+ fragment-part)
+ (w3m-search-name-anchor fragment-part))
+ ((not (string= file-part ""))
+ (w3m-goto-url (w3m-expand-url (substring url (match-beginning 4))
+ (concat "file://" default-directory))
+ reload charset post-data referer handler element))
+ (t (w3m-message "No URL at point")))))
((w3m-url-valid url)
(w3m-buffer-setup) ; Setup buffer.
(w3m-arrived-setup) ; Setup arrived database.
@@ -9195,7 +9216,9 @@
(let ((w3m-current-buffer (current-buffer)))
(unless charset
(setq charset (w3m-correct-charset (w3m-detect-meta-charset))))
- (setq w3m-current-url url
+ (setq url (or url
+ w3m-buffer-local-url)
+ w3m-current-url url
w3m-current-base-url url
w3m-current-coding-system
(if charset
@@ -10037,6 +10060,7 @@
(url
(setq safe-regexp (get-text-property (point) 'w3m-safe-url-regexp))
(if (or (not safe-regexp)
+ (w3m-buffer-local-url-p url)
(string-match safe-regexp url)
(and force
(or (not (interactive-p))
@@ -10071,6 +10095,7 @@
(let ((safe-regexp (get-text-property (point) 'w3m-safe-url-regexp))
(use-dialog-box t))
(when (or (not safe-regexp)
+ (w3m-buffer-local-url-p url)
(string-match safe-regexp url)
(y-or-n-p "\
This link is considered to be unsafe; continue? "))