Previous: Terminal I/O Encoding, Up: Coding Systems


32.10.9 MS-DOSのファイル型

MS-DOSやMS-Windows上のEmacsは、 特定のファイル名をテキストファイルやバイナリファイルとして認識します。 『バイナリファイル』とは、必ずしも文字を意味しないバイト値のファイルです。 Emacsは、バイナリファイルに対しては行末変換や文字コード変換を行いません。 一方、その名前から『テキストファイル』と印が付いた 新規ファイルを作成すると、EmacsはDOSの行末変換を行います。

— Variable: buffer-file-type

この変数は、各バッファで自動的にバッファローカルになり、 バッファで訪問したファイルのファイル型を記録する。 バッファがbuffer-file-coding-systemで コーディングシステムを指定しない場合、 バッファ内容を書き出すときに用いるコーディングシステムを この変数を用いて決定する。 テキストに対してはnil、バイナリに対してtであること。 これがtであると、コーディングシステムはno-conversionである。 さもなければ、undecided-dosを用いる。

通常、この変数はファイルを訪問すると設定される。 いかなる変換も行わずにファイルを訪問するとnilに設定される。

— User Option: file-name-buffer-file-type-alist

この変数は、テキスト/バイナリファイルを認識するための連想リストを保持する。 各要素は(regexp . type)の形である。 ここで、regexpはファイル名に対して一致をとり、 typeは、テキストファイルではnil、 バイナリファイルではt、あるいは、 どちらであるかを計算するために呼び出す関数である。 それが関数であると、1つの引数(ファイル名)で呼ばれ、 tnilを返すこと。

MS-DOSやMS-Windowsで動作しているEmacsは、 この連想リストを調べて、ファイルを読む際に使用する コーディングシステムを決定する。 テキストファイルではundecided-dosが使われる。 バイナリファイルではno-conversionが使われる。

指定したファイルがこの連想リストの要素に一致しないと、 default-buffer-file-typeがファイルの扱い方を指定する。

— User Option: default-buffer-file-type

この変数は、file-name-buffer-file-type-alistが指定しない型の ファイルの扱い方を指定する。

この変数がnil以外であると、そのようなファイルはバイナリとして扱われ、 コーディングシステムno-conversionを用いる。 さもなければそれらに対して特別なことを行わずに、 Emacsの通常のとおりにファイル内容からコーディングシステムを決定する。