Next: , Previous: , Up: Saving   [Contents][Index]


18.3.3 ファイル保存のカスタマイズ

変数require-final-newlineの値がtのとき、ファイルの保存または書き込みにより、ファイルの終端に改行がないときは、何も尋ねずに改行を追加します。値がvisitの場合、Emacsはファイルをvisitした直後に、終端に改行がないファイルの改行を追加します(これによりバッファーは変更されたとマークされます。undoはできません)。値がvisit-saveの場合、Emacsはそのような改行をvisitと保存のときに追加します。値がnilの場合、Emacsはファイルの終端を変更しません。それ以外の非nil値は、改行を追加するかをEmacsが尋ねることを意味します。デフォルトはnilです。

ファイルの終端に常に改行があると想定する、特定の種類のファイルのためにデザインされたメジャーモードがいくつかあります。そのようなメジャーモードは、変数require-final-newlineに、変数mode-require-final-newlineの値(デフォルトはt)をセットします。後者の変数の値をセットすることにより、これらのモードが終端の改行を取り扱う方法を制御できます。

通常プログラムがファイルに書き込むとき、オペレーティングシステムはデータをディスクにコミットする前に、ファイルのデータをメインメモリーにキャッシュします。これにより大幅にパフォーマンスを向上できます。たとえばラップトップを使っている場合、ファイルを書き込む度にディスクをスピンアップ(spin-up)しなくて済みます。しかし、キャッシュをディスクにコミットする前にオペレーティングシステムがクラッシュすることにより、データを失うリスクもあります。

このリスクを減少させるため、Emacsはファイルを保存した後にfsyncシステムコールを呼び出すことができます。fsyncにより、データを失うリスクを皆無にすることはできません。その理由の一部は、多くのシステムはfsyncを正しく実装していないことであり、他の理由の一部はEmacsのファイル保存手段は通常ディレクトリー更新に頼っており、これはfsyncが正しく実装されていても、クラッシュを生き延びることはできないでしょう。

write-region-inhibit-fsync変数は、ファイルを保存した後にEmacsがfsyncを呼び出すかを制御します。この変数のデフォルト値は、Emacsを対話的に使用しているときはnil、バッチモードの時はtです(Batch Modeを参照)。

Emacsは自動保存ファイルの書き込みにfsyncを使うことはありません。なぜなら、それらのファイルのデータは、いずれにせよ失われるものだからです。