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

customize w3m-use-mule-ucs の謎



Emacs-21.2 での話です。(21.1 や 21.3, XEmacs では確かめていません)

w3m-use-mule-ucs は

(defcustom w3m-use-mule-ucs
  (and (eq w3m-type 'w3m) (featurep 'un-define))
  "*Non nil means using multi-script support with Mule-UCS."
  :group 'w3m
  :type 'boolean
  :require 'w3m-ucs)

となっていて、customize で t とかにすると、~/.emacs では

(custom-set-variables
 '(w3m-use-mule-ucs t nil (w3m-ucs)))

のようになります。しかし、~/.emacs にこれが書かれた状態で、emacs
を立ち上げ直して M-x w3m とすると、なぜだか、w3m-ucs-to-char()
が w3m-e21.el で定義されている方を使います。

(defun w3m-ucs-to-char (codepoint)
  (decode-char 'ucs codepoint)) <== w3m-e21 


w3m-use-mule-ucs を自動設定にするか、(setq w3m-use-mule-ucs t)
とするか、または、defcustom から require を外して

(defcustom w3m-use-mule-ucs
  (and (eq w3m-type 'w3m) (featurep 'un-define))
  "*Non nil means using multi-script support with Mule-UCS."
  :group 'w3m
  :type 'boolean)

にして、customize の結果が

(custom-set-variables
 '(w3m-use-mule-ucs t))

の状態だと、ちゃんと w3m-ucs.el をロードして、w3m-ucs.el 内の
w3m-ucs-to-char() を使うようになります。

(defun w3m-ucs-to-char (codepoint)
  (or (ucs-to-char codepoint) ?~)) <== w3m-ucs 


私にはなんでこうなるのか全然わからないのです ^^;;;
対応は、defcustom から :require を外すだけでも良いような気がする
のですが、正直言って、:require がついていると load しない理由が
わかっていないので気持ち悪いです。どんなものでしょう。

## というのが mew-shimbun がエラーになります、とダイレクトメール
## をいただいて解析した結果です。調べてみると、その方の環境では、
## 上記のために w3m-e21 から Mule-UCS 付属の
## mucs.el:decode-char() が呼ばれるんだけど、こいつは、
## unicode.el が load されるまで nil が帰ってくるのでした。
## で、
## shimbun-decode-entities() => w3m-entity-value("#45")
## => (w3m-ucs-to-char 45) => nil => 爆発

P.S.
注意一秒怪我一生という言葉を思い出してしまいました。ご愁傷さまで
す。> 山岡さん

-- 
白井秀行 (mailto:shirai@rdmg.mgcs.mei.co.jp)