selective-display (Re: Bug? Xemacs 21.1/Flim 1.14.2: mel-b-el.elc not installed correctly)

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2001年 6月 5日 (火) 20:36:20 JST


mule-ja に移ります.

>>>>> In <200106042342.IAA04500 @ etlken.m17n.org>,
>>>>> Kenichi Handa <handa @ etl.go.jp> wrote:
> >>  ;; `write-region' が `selective-display' に影響される(らしい)
> 少なくとも Emacs にとってはこれは documented feature です。

すみません. ずいぶん前の記憶に頼って書いたので「(らしい)」という表現を
使いましたが, この feature 自体は 2 年ほど前に確認したことがありました.

問題は

    (let ((coding-system-for-write 'binary))
      (write-region ...))

では不十分で

    (let ((coding-system-for-write 'binary)
          (selective-display nil))
      (write-region ...))

とする必要がある. GNU Emacs では selective-display の処理は src/coding.c
内の各 coding-system の encoder の中で行なわれているので, coding-system
が binary の場合には selective-display を無視するという選択もあったかも
しれないのに.

ということと,

それにもかかわらず, 巷では

    (let ((coding-system-for-write 'binary))
      (write-region ...))

のような code がよく使われるが, それらはその部分では selective-display
を抑制する必要がないことを確認した上で書いてあるとは考えにくい.
;; 実際には, selective-display が設定されるような buffer と, binary で
;; 書き出されるような buffer はあまり重ならないと思いますが...

    (let ((coding-system-for-write 'binary)
          (selective-display nil))
      (write-region ...))

と書く必要があることはあまり知られていないのではないか?

ということです. 皆さん, やはり

    (let ((coding-system-for-write 'binary))
      (write-region ...))

で済ませたいと思いませんか?


ちなみに, XEmacs では src/lstream.c の中で selective-display の処理を
行なっているため, coding-system の値にかかわらず CR -> LF の変換が行な
われると予測していました.
-- 
Shuhei KOBAYASHI




More information about the Emacs-mime-ja mailing list