GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Writing-to-Files.html ・ emacs-doc.conao3.com

26.4 ファイルへの書き込み

append-to-file および write-region 関数を使用すると、バッファの内容、またはバッファの一部をディスク上のファイルに直接書き込むことができます。現在参照中のファイルにこれらの関数を使用して書き込まないでください。参照メカニズムに混乱を招く恐れがあります。

コマンド: append-to-file start end filename

この関数は、現在のバッファ内で start と end で区切られた領域の内容を、ファイル filename の末尾に追加します。そのファイルが存在しない場合は、作成されます。この関数は nil を返します。

filename を書き込みまたは作成できない場合、エラーが通知されます。

Lisp から呼び出された場合、この関数は以下と完全に等価です:

(write-region start end filename t)
コマンド: write-region start end filename &optional append visit lockname mustbenew

この関数は、現在のバッファ内で start と end で区切られた領域を、filename で指定されたファイルに書き込みます。

start が nil の場合、このコマンドはバッファの内容全体(アクセス可能な部分のみではなく)をファイルに書き込み、end を無視します。

start が文字列の場合、write-region はバッファ内のテキストではなく、その文字列を書き込みまたは追記します。この場合、end は無視されます。

append が nil 以外の場合、指定されたテキストが既存のファイル内容(もしあれば)の末尾に追加されます。append が数値の場合、write-region はファイル先頭からそのバイトオフセット位置までシークし、そこからデータを書き込みます。

mustbenew が nil でない場合、filename が既存のファイル名を指定していれば、write-region は確認を求めます。mustbenew がシンボル excl である場合、write-region は確認を求めず、代わりにファイルが既に存在していればエラー file-already-exists を通知します。通常、write-region はシンボリックリンクを辿り、当該シンボリックリンクがダングリング状態であればリンク先のファイルを作成しますが、mustbenew が excl である場合はシンボリックリンクを辿りません。

mustbenew が excl である場合の既存ファイルのテストでは、システムの特殊な機能が利用されます。少なくともローカルディスク上のファイルに関しては、Emacs が気づく前に、他のプログラムが同名のファイルを作成する可能性はありません。

visit が t である場合、Emacs はバッファとファイルの関連付けを行い、そのバッファがそのファイルを参照する状態になります。また、現在のバッファの最終ファイル更新日時を filename の modtime に設定し、バッファを未変更としてマークします。この機能は save-buffer で利用されていますが、ご自身で使用することは避けたほうがよいでしょう。

visit が文字列の場合、アクセス先のファイル名を指定します。これにより、データをあるファイル (filename) に書き込みつつ、バッファを別のファイル (visit) へのアクセスとして記録できます。引数 visit は echo 領域のメッセージおよびファイルロックに使用され、visit は buffer-file-name に格納されます。この機能は file-precious-flag の実装に用いられています。自分が何をしているのかを十分に理解していない限り、自身で使用しないでください。

オプション引数 lockname が nil 以外の場合、ロックおよびアンロックに使用するファイル名を指定し、その目的における filename および visit を上書きします。

関数 write-region は、書き込むデータを buffer-file-format で指定された適切なファイル形式に変換し、あわせてリスト write-region-annotate-functions 内の関数を呼び出します。ファイル形式の変換 を参照してください。

通常、write-region はエコー領域にメッセージ ‘Wrote filename’ を表示します。visit が t でも nil でも文字列でもない場合、あるいは Emacs がバッチモードで動作している場合(バッチモード を参照)、このメッセージの表示は抑制されます。この機能は、内部的な目的でファイルを使用するプログラム、つまりユーザーが知る必要のないファイルを扱うプログラムに有用です。

変数: write-region-inhibit-fsync

この変数の値が nil の場合、write-region はファイルを書き込んだ後に fsync システムコールを使用します。値が t の場合、Emacs は fsync を使用しません。デフォルト値は t です。ファイルと二次記憶装置 を参照してください。

マクロ: with-temp-file file body…

with-temp-file マクロは、一時的なバッファを現在のバッファとして body 形式を評価し、最後にそのバッファの内容をファイル file に書き込みます。処理が完了すると一時的なバッファを破棄し、with-temp-file 形式の前に現在のバッファであったものを復元します。その後、body にある最後の形式の値を返します。

throw による異常終了やエラーが発生した場合でも、現在のバッファは復元されます(非局所的な終了を参照)。

with-temp-buffer(カレントバッファを参照)と同様に、このマクロで使用される一時バッファでは、フック kill-buffer-hook、kill-buffer-query-functions(バッファの削除を参照)、および buffer-list-update-hook(バッファリストを参照)は実行されません。