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

Re: shimbun関 連いろいろについて確認



>>>>> In [emacs-w3m : No.07354] 長さん wrote:

>> [emacs-w3m:07336] sb-mailman.elについて
>>  特にcase-fold-searchは良くないような...

遅い対応ですみません。元記事が発信されたころ (1月3日午前1時13分)、
ぼくは初夢を見ていたかもしれません。^^;;

sb-mailman.el と sb-wikimedia.el の変更のうち、正規表現の改善だ
けを commit しました。どうもありがとうございます。
case-fold-search については後述します。

;; [emacs-w3m:07016] は後ほど。

>>>>> In [emacs-w3m : No.07336] 長さん wrote:

> 3.case-fold-searchについて
>  さて、1の修正の時、frだけ小文字になっていたので、当初それが悪いのか
> と考えました。そこでcase-fold-searchを設定していないか確認したところ、

> sb-mailman.elのshimbun-mailman-headersの中で
>   (setq case-fold-search t)
> としていました。

> なので最初はスルーしていたのですが、改めて見た時 letで束縛する変数に
> case-fold-searchが無く、この処理が走るとglobalなcase-fold-searchを書
> き換えているのではないかと思います。

普通 case-fold-search は permanent local なのですよ↓。

(let ((case-fold-search 'foo))
  (with-temp-buffer
    (setq case-fold-search 'bar))
  case-fold-search)
 => foo

sb-mailman.el では " *temp*" バッファにおける値を

(setq case-fold-search t)

で設定しているのであって、長さんのやり方は Emacs 21 では有効なの
ですが、Emacs 20 や XEmacs ではまずいのです↓。

(let ((case-fold-search t))
  (let ((case-fold-search nil))
    (with-temp-buffer
      case-fold-search)))
 => t

ちょっと、ゾっとしますよね。Emacs の NEWS には書いてないみたいだ
なあ。default-case-fold-search の docstring には "don't override
it" と書いてあるので、次のような使い方もおそらくだめです↓。

(let ((case-fold-search t))
  (let ((default-case-fold-search nil))
    (with-temp-buffer
      case-fold-search)))
 => nil

Emacs 21 では default-case-fold-search の値は case-fold-search
と単に連動しているだけみたいですね (本当か?)。