>>>> In <yosu7ld3wbpk.fsf(a)jpl.org>,
>>>> Katsumi Yamaoka <yamaoka(a)jpl.org> wrote:
ところでさらに別件なのですが、最近の Gnus の gnus.texi の第 1 行目が
\input texinfo @c -*-texinfo-*- -*- coding: iso-latin-1 -*-
となっていて、これには二つの問題があります。
`-*-...-*-' が 2 つ以上指定された場合の動作については Emacs Manual では
言及されていないようです. FSF Emacs, XEmacs とも, 基本的には 2 つ目以降
の `-*-...-*-' は無視するようです.
;; gnus.texi のこの部分は修正するべきだと思います.
何と FSFmacs では元のままでもちゃんと parse できるんです。
`coding:' は lisp/international/mule.el の `set-auto-coding-1' で,
`mode:' は lisp/files.el の `set-auto-mode' で,
残りの `-*-...-*-' は lisp/files.el の `hack-local-variables-prop-line'
で処理されます.
一方, XEmacs の場合には,
`coding:' は src/file-coding.c の `determine_real_coding_system' で,
`mode:' と残りの `-*-...-*-' は lisp/files.el の `hack-local-variables-
prop-line' で処理されます.
`set-auto-coding-1' は `-*- coding:...' といった文字列を探すようになって
いるため, それ以前に他の `-*-...-*-' が存在しても処理できてしまいます.
一方, `determine_real_coding_system' は最初の `-*-' に続く `coding:...'
を処理するようになっています. したがって, gnus.texi のような場合には,
XEmacs では (iso-8859-1 に変更しても) coding: は処理されないはずです.
;; ちなみに, この 2 つの関数は `-*-' が閉じているかどうかは調べません.
1. find-file すると、
File mode specification error: (void-function texinfo-*--mode)
というエラーになる。
`texinfo'-mode ではなく `texinfo-*-'-mode になるのは, XEmacs の
`hack-local-variables-prop-line' の処理が甘い(複数の `-*-...-*-' が連続
していると, 正規表現の greediness により 3 つ目の `-*-' まで match して
しまう)ためのようです.
;; やはり XEmacs の files.el は修正の必要があると思います:-p
--
Shuhei KOBAYASHI