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

Re: URLのエコ ーとtextarea のminor化



TSUCHIYA Masatoshi <tsuchiya@namazu.org> writes:

> が,とりあえずの叩き台としてパッチを作ってみましたので,末尾に添付しま
> す.ただし,
>
> ・このパッチのままだと,オプションで動的に動作が変更できない.オプショ
>   ンを作ったとしても,再描画しない限り反映されない.
>
> ・レンダリングが更に遅くなりそう.バルーンヘルプを表示するときに,
>   decode して欲しい.

これらに関しては、w3m-make-help-echo で作成する lambda 式の中で
decode 処理を入れれば良いのではないでしょうか。

> ・単に undecided で運任せにするのではなくて,描画中のページの文字コー
>   ドと w3m-coding-system-priority-list を参照して,頑健にコード推定し
>   て欲しい.

w3m-url-decode-string に priority-list を渡せるようにしてみました。

これらを反映させた叩き台ですが、いかがでしょうか。
変数 w3m-decode-help-echo で動的に decode の有無が切り替わるはずです。

-- 
有沢 明宏
Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.1102
diff -u -r1.1102 w3m.el
--- w3m.el	24 Feb 2005 07:08:59 -0000	1.1102
+++ w3m.el	25 Feb 2005 04:09:50 -0000
@@ -2562,7 +2562,8 @@
 	   (nth 5 attrs)))
     `(nth 5 (w3m-attributes ,url ,no-cache))))
 
-(defmacro w3m-make-help-echo (property)
+(defvar w3m-decode-help-echo t)
+(defmacro w3m-make-help-echo (property &optional url-decode)
   "Make a function returning a string used for the `help-echo' message.
 PROPERTY is a symbol (which doesn't need to be quoted) of a text
 property (in XEmacs, it is an extent) with the value of a string which
@@ -2574,16 +2575,28 @@
 	    (lambda (extent)
 	      (if (and w3m-track-mouse
 		       (eq (extent-object extent) (current-buffer)))
-		  (get-text-property (extent-start-position extent)
-				     ',property)))))
+		  (let ((prop (get-text-property (extent-start-position extent)
+						 ',property)))
+		    (if (and ,url-decode w3m-decode-help-echo)
+			(w3m-url-decode-string
+			 prop
+			 (cons w3m-current-coding-system
+			       w3m-coding-system-priority-list))
+		      prop))))))
     `(if (>= emacs-major-version 21)
 	 (function
 	  (lambda (window object pos)
 	    (if w3m-track-mouse
 		(progn
 		  (w3m-message "")	; Clear the echo area.
-		  (get-text-property pos ',property
-				     (window-buffer window)))))))))
+		  (let ((prop (get-text-property pos ',property
+						 (window-buffer window))))
+		    (if (and ,url-decode w3m-decode-help-echo)
+			(w3m-url-decode-string 
+			 prop 
+			 (cons w3m-current-coding-system
+			       w3m-coding-system-priority-list))
+		      prop)))))))))
 
 (defmacro w3m-make-balloon-help (property)
   "Make a function returning a string used for the `balloon-help' message.
@@ -2776,12 +2789,18 @@
 	     (t " "))
 	    buf)
       (setq start (match-end 0)))
-    (decode-coding-string
-     (apply 'concat (nreverse (cons (substring str start) buf)))
-     (or coding
-	 w3m-default-coding-system
-	 w3m-coding-system
-	 'iso-2022-7bit))))
+    (setq str (apply 'concat (nreverse (cons (substring str start) buf))))
+    (when (listp coding)
+      (setq coding
+	    (with-temp-buffer
+	      (set-buffer-multibyte nil)
+	      (insert str)
+	      (w3m-detect-coding-region (point-min) (point-max) coding))))
+    (decode-coding-string str
+			  (or coding
+			      w3m-default-coding-system
+			      w3m-coding-system
+			      'iso-2022-7bit))))
 
 (defsubst w3m-url-transfer-encode-string (url &optional coding)
   "Encode non-ascii characters in URL into the sequence of escaped octets.
@@ -2927,7 +2946,7 @@
 
 (defun w3m-fontify-anchors ()
   "Fontify anchor tags in the buffer which contains halfdump."
-  (let ((help (w3m-make-help-echo w3m-href-anchor))
+  (let ((help (w3m-make-help-echo w3m-href-anchor t))
 	(balloon (w3m-make-balloon-help w3m-href-anchor))
 	prenames start end)
     (goto-char (point-min))