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

Re: [mime-w3m] local-map



>> On Wed, 03 Oct 2001 16:19:08 +0900
>> 「山」== yamaoka@jpl.org (Katsumi Yamaoka) said as follows:

山> copy-region-as-kill は buffer-substring を使っている。
山> buffer-substring はすべての text props をコピーする仕様である。
山> kill した local-map を別の場所で再利用する可能性が無くは無い。

山> と考えると、Emacs の仕様を変えてもらうのは無理っぽい気がします。

やっぱりそうですよねえ…。

;; kill-ring を Emacs-Lisp プログラム内部で使うことってあるの? とは思
;; いますが。でも、そういうプログラムの存在を考えると advice で対処す
;; るのも副作用がありそうで怖い。


そうすると、

土> (1) local-map を利用している mime-w3m.el の実装が悪いのだか
土>     ら、mime-w3m.el 内部で閉じた解決を行うべきである。具体的
土>     には kill-ring-save() 相当のコマンドを再定義する。

という解決策で行くべきなのでしょう。でもって、kill-ring-save() が結構
色々とやっているので、非常に邪悪な方法で上書きする手段を思いつきました。

でも、こうしてしまうと、mime-w3m-kill-ring-save() が byte-compile され
なくて少し悲しいのですが、何とかする方法はないでしょうか?
Index: mime-w3m.el
===================================================================
RCS file: /home/tsuchiya/cvsroot/emacs-w3m/mime-w3m.el,v
retrieving revision 1.24
diff -u -u -r1.24 mime-w3m.el
--- mime-w3m.el	14 Sep 2001 07:52:51 -0000	1.24
+++ mime-w3m.el	3 Oct 2001 08:21:45 -0000
@@ -120,6 +120,8 @@
     (substitute-key-definition 'w3m-view-source nil map)
     (substitute-key-definition 'w3m-view-header nil map)
     (substitute-key-definition 'w3m-history nil map)
+    (substitute-key-definition 'kill-ring-save 'mime-w3m-kill-ring-save
+ 			       map global-map)
     (setq mime-w3m-mode-map map)))
 
 (defun mime-w3m-view-this-url ()
@@ -136,6 +138,18 @@
      (url (w3m url))
      (img (w3m-view-image))
      (t (message "No URL at point")))))
+
+(eval
+ `(defun mime-w3m-kill-ring-save ()
+    ,(documentation 'kill-ring-save)
+    (interactive)
+    (prog1 (call-interactively 'kill-ring-save)
+      (put-text-property 0 (length (car kill-ring))
+			 ,(if (featurep 'xemacs)
+			      (quote 'keymap)
+			    (quote 'local-map))
+			 nil
+			 (car kill-ring)))))
 
 (provide 'mime-w3m)
 ;;; mime-w3m.el ends here
-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )