sref in filename.el

Katsumi Yamaoka yamaoka @ jpl.org
2005年 6月 6日 (月) 11:40:21 JST


>>>>> In [Wanderlust : No.13656] 村田さん wrote:

> 先ず前提として, ユーザに (defalias 'sref 'aref) させるのは, なしっ
> て事にしたいです.

[...]

> 古い Emacs では, sref と aref に互換性はないので, 単純に置き換えは
> 出来ないと言うのは理解しました. ただ, CVS head で sref の定義がな
> くなった以上,

>  1. このまま sref を使い, (defalias 'sref 'aref) も提供する
>  2. aref で置き換え, (aref と sref に互換性のない) 古い Emacs 用に
>     aref を再定義する

> のどちらかが必要だと思います. (そもそも 2が可能かどうかと言う問題
> もありますが)

村田さんがおっしゃる 2. の意味がやっとわかりました。

> 1 の方が簡単で影響も少ないのでしょうが, これから書かれる APEL を使っ
> て互換性を維持しようとするプログラムで, 文字列から文字を取り出す目
> 的で sref を使えって言うのもどうかと言う気がします.

>>> 逆に, 古い emacs 用に aref を emulate する必要がありますか?

> (fset 'aref-original (symbol-function 'aref))
> (defun aref (array index)
>   (if (stringp array)
>       (sref array index)
>     (aref-original array index)))

> この程度で済むのであれば, 上記の 2の方が良い様に思えます.

古い Emacs での (aref "非ascii文字" 0) は先頭の文字の一部ですら
ないし、次の文字が (aref "非ascii文字" 1) でもありません。後者は
filename-special-filter では以下のように実装されています。

(setq i (+ i (char-length chr)))

まあ、古い Emacs で非 ascii 文字に使える aref を定義することは、
できそうな気もしますが、それだけの労力を費やす価値があるとも思え
ません。

  filename-special-filter は 20.3 未満と以上用で関数定義全体を切
  り替えて、特に新しい Emacs における効率を改善する (古い Emacs
  用には sref を使うということです)。

  いまだに sref を使っているプログラムがあるのならば、作者に
  Emacs 20.2 以下のサポートをやめるか、バージョンによる切り替
  えの対策をお願いする。

ということでいかがでしょう?

つい先週 RMS から指摘を受けたのですが、Emacs には無い、あまりに
一般的または短い名前の関数をむやみに bind するのは混乱の元です。





More information about the APEL-ja mailing list