Next: MS-DOS Printing, Previous: MS-DOS File Names, Up: MS-DOS
GNU Emacsでは、テキスト行の区切りとして改行文字を使います。 これは、GNU Emacsが開発されたUNIXでの習慣であり、 UNIXをモデルとしたGNUシステムでの習慣でもあります。
MS-DOSとMS-Windowsでは、テキスト行の区切りとして、 通常、復帰・行送りの2文字列を使います。 (行送りは改行と同じ文字です。) したがって、Emacs において典型的なファイルを便利に編集するには、 これらの行末(end-of-line、EOL)文字列を変換する必要があります。 Emacsは通常つぎのようにします。 ファイルを読み込むときには復帰・行送りを改行に変換し、 ファイルを書き出すときには改行を復帰・行送りに変換します。 国際文字コードの変換を扱う機構でもこの変換を行います (see Coding Systems)。
ほとんどのファイルにおけるこの特別な書式変換のために、 Emacsが報告する文字位置(see Position Info)は、 オペレーティングシステム上でのファイルサイズ情報と食い違います。
内容がテキストではないある種のファイルは、変換すべきではありません。
したがって、MS-DOS用Emacsは、
ある種のファイルをバイナリファイルとして区別して、
そのまま読み書きします。
(この区別はMS-DOSのものではなく、Emacsがもたらすものです。)
これらには、実行プログラム、圧縮したアーカイブなどが含まれます。
Emacsはファイル名を用いて、バイナリファイルとして扱うべきかどうか決定します。
変数file-name-buffer-file-type-alist
には、
バイナリファイルを表すファイル名のパターンを定義しておきます。
file-name-buffer-file-type-alist
に指定したバイナリファイルの
パターンにファイル名が一致すると、
Emacsは行末変換だけでなくすべての符号変換を抑制する
コーディングシステム(see Coding Systems)no-conversion
を使います。
さらに、Emacsは、ファイルの内容から行区切りとして 復帰・行送りでなく改行を用いていると判断すると、 ファイルの読み書きにおいて変換を行いません。 したがって、特に努力しなくても、 UNIXやGNUシステムからのファイルをMS-DOS上で読んだり編集でき、 それらのファイルの行末はUNIX流の行末のままです。
コマンドfind-file-text
やコマンドfind-file-binary
を用いると、
ファイルをテキストとして扱うか
バイナリとして扱うかを指定して訪れることができます。
行末変換はコーディングシステムの一般的な変換機構の一部なので、
コーディングシステムを指定するコマンド(see Specify Coding)によって
ファイルをテキストとして扱うかバイナリとして扱うかを指定することもできます。
たとえば、C-x <RET> c undecided-unix <RET> C-x C-f foobar.txt
とすれば、行末変換をせずにファイルfoobar.txtを訪れることができます。
モード行にはカレントバッファで行末変換を行ったかどうか表示されます。 モード行の始めのほうにあるコーディングシステムを表す文字のうしろには、 通常、コロンが表示されます。 バッファでMS-DOSの行末変換を使っている場合には、 この文字はバックスラッシュに変わります。
NFSやSambaを用いてUNIXやGNUシステムを使った
コンピュータ上のファイルシステムを参照するとき、
これらのファイルシステム上のどのファイルに対しては、
新規作成時でなくても、Emacsは行末変換を行うべきではありません。
こうするためには、
該当するファイルシステムを無変換の
ファイルシステムと指定するために、
関数add-untranslated-filesystem
を呼びます。
この関数は、ファイルシステム名である引数を1つとりますが、
これにはドライブ名やディレクトリ名を含めることもできます。
たとえば、
(add-untranslated-filesystem "Z:")
は、ドライブZを無変換のファイルシステムとして指定しますし、
(add-untranslated-filesystem "Z:\\foo")
は、ドライブZ上のディレクトリ\fooを 無変換のファイルシステムとして指定します。
個人の_emacsファイルや
サイトの全ユーザーに便利なようにsite-start.elの中で、
add-untranslated-filesystem
を使うことが多いでしょう。
add-untranslated-filesystem
の効果を取り消すには、
関数remote-untranslated-filesystem
を使います。
この関数は、まえにadd-untranslated-filesystem
に使ったのと
同じ文字列を引数としてとります。