sref in filename.el
Katsumi Yamaoka
yamaoka @ jpl.org
2005年 6月 6日 (月) 09:34:38 JST
>>>>> In [apel-ja : No.01284] 村田さん wrote:
> どうやら, filename-special-filter (in filename.el) で sref が使わ
> れている様です.
> CVS 先端の emacs (と Meadow-3.00) では, sref の定義が削除されてし
> まっているので, 対応する必要があると思いますが, 単に aref に置き換
> えてしまって問題ないでしょうか?
Emacs 20.2 以下における非 ascii 文字の扱いは、それ以降のものとは
まったく異なるので、filename.el に古い Emacs もサポートさせるな
らば aref で置き換えることはできません。以下は Mule 2.3 @ 19.34 の
場合です。
(let ((index 0)
x rest)
(while (setq x (condition-case nil (aref "日本語" index) (error nil)))
(setq rest (cons (char-to-string x) rest)
index (1+ index)))
(nreverse rest))
=> ("\222" "\306" "\374" "\222" "\313" "\334" "\222" "\270" "\354")
(let ((index 0)
x rest)
(while (setq x (condition-case nil (sref "日本語" index) (error nil)))
(setq rest (cons (char-to-string x) rest)
index (1+ index)))
(nreverse rest))
=> ("日" "\306" "\374" "本" "\313" "\334" "語" "\270" "\354")
一方、最近まで sref が aref への alias だったように、きちんと書
かれた sref を使うコードを、上位の Emacs では aref に置き換えて
しまうことは可能です。
> 逆に, 古い emacs 用に aref を emulate する必要がありますか?
その必要は無いはずです。
(if (fboundp 'sref) (sref ...) (aref ...)) とするのも一つの手で
すが、そうやって byte code の互換性を考慮する必要は無い気がしま
す (そもそも Emacs 20.3 未満と以上で互換性があるのか?)。
(前にも書きましたが) mu-cite の MU-MK でやっているように、上位の
Emacs では byte compile するときに sref を aref で置き換えてしま
うということもできるでしょう。
(cond ((featurep 'xemacs)
...)
((and (boundp 'emacs-major-version)
(or (> emacs-major-version 20)
(and (eq emacs-major-version 20)
(>= emacs-minor-version 3))))
;; Compiler macro for replacing `sref' with `aref'.
(put 'sref 'byte-optimizer
(lambda (form)
(cons 'aref (cdr form))))))
あるいは、APEL が (defalias 'sref 'aref) を提供するか、ですね。
Emacs 18 用の defalias は poe-18.el で定義されています。
More information about the APEL-ja
mailing list