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

Re: [mime-w3m] local-map



>>>>> In [emacs-w3m : No.01626]
>>>>>	TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp> wrote:

土屋さん> mime-w3m.el を利用して記事を閲覧している時に、その記事中のテ
土屋さん> キストを M-w などで kill-ring に取り込んで、別バッファに貼り
土屋さん> 付けると、local-mapも込みで貼り付けられてしまうので、そのテ
土屋さん> キストの上で SPC などを押すと妙な現象が発生します。

土屋さん> とりあえず、手元では以下のような advice を定義して回避してい
土屋さん> ますが、これは何処で解決するべき問題でしょうか?

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

土屋さん> (2) local-map もコピーしてしまう、Emacs の kill-new() の動作
土屋さん>     が良くない。したがって、Emacs21 についてはバグ報告し、そ
土屋さん>     れ以外の Emacsen については w3m-xmas.el / w3m-om.el など
土屋さん>     に advice を仕込む。

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

と考えると、Emacs の仕様を変えてもらうのは無理っぽい気がします。
もっとも、こういう問題があることを知ってもらうためにリポートする
のは、けして無駄ではないと思いますが。

text prop ではなくて overlay を使うと、FSFmacs ではコピーされな
くなりますが、XEmacs では違います。それに今まで emacs-w3m が
overlay を使っていないのは、コーディングの混乱を避けられる点で個
人的には嬉しいので、なるべくなら今後もそうしていただきたいです。

というわけで、非常に消極的ですが、

土屋さん> (defadvice kill-new
土屋さん>   (after kill-new-without-local-map activate compile)
土屋さん>   (put-text-property 0 (length (car kill-ring))
土屋さん>                      (if (featurep 'xemacs) 'keymap 'local-map)
土屋さん>                      nil
土屋さん>                      (car kill-ring)))

必要な人はこういうものを使っていただく、ということではだめでしょ
うか? ^^;;
-- 
Katsumi Yamaoka <yamaoka@jpl.org>