前: Magic File Names, 上: Files


24.12 ファイル書式変換

変数format-alistは、 Emacsバッファ内のデータ(テキスト、テキスト属性、その他の情報)を ファイル内でテキスト表現する方法を記述した ファイル書式(file format)のリストを定義します。 Emacsはファイルを読み書きするときに必要ならば書式変換を行います。

— 変数: format-alist

このリストは、各ファイル書式の定義を含んだリストである。

各書式定義はつぎの形のリストです。

     (name doc-string regexp from-fn to-fn modify mode-fn)

書式定義の各要素の意味はつぎのとおりです。

name
当該書式の名前。
doc-string
当該書式の説明文字列。
regexp
当該書式で表現されたファイルを認識するために使用する正規表現。
from-fn
当該書式のデータを復号化(ファイル内のデータをEmacsの通常のデータ表現へ 変換)するためのシェルコマンドか関数。

シェルコマンドは文字列で表現し、 Emacsは変換を行うために当該コマンドをフィルタとして実行する。

from-fnが関数であると、 バッファの変換すべき部分を指定するbeginendの2つの引数で 呼ばれる。 当該関数はその場で編集してテキストを変換すること。 これによりテキストの長さが変わる可能性があるので、 from-fnは変更部分の末尾位置を返すこと。

from-fnの責任の1つは、 ファイルの先頭がregexpで始まらないように保証することである。 さもないと、再度呼び出される可能性がある。

to-fn
当該書式にデータを符号化するためのシェルコマンドか関数。 つまり、Emacsの通常のデータ表現を当該書式に変換する。

to-fnが文字列であるとそれはシェルコマンドであり、 Emacsは変換を行うために当該コマンドをフィルタとして実行する。

to-fnが関数であると、 バッファの変換すべき部分を指定するbeginendの2つの引数で 呼ばれる。 変換を行うには2つの方法がある。


modify
フラグであり、 符号化関数がバッファを変更する場合にはt、 注記のリストを返す場合にはnilである。
mode
当該書式から変換されたファイルを訪問後に呼び出されるモード関数。

関数insert-file-contentsは、指定されたファイルを読み込むときに ファイル書式を自動的に認識します。 ファイルの先頭のテキストを書式定義の正規表現に対して検査して、 一致がみつかれば当該書式の復号化関数を呼び出します。 そして、既知の書式について再度調べ直します。 適用できる書式がなくなるまで検査し続けます。

関数find-file-noselectやこれを使うコマンドでファイルを訪問すると、 (insert-file-contentsを呼び出すので)同様に変換を行います。 さらに、この関数は、復号した各書式についてモード関数を呼び出します。 バッファローカルな変数buffer-file-formatに 書式名のリストを保存します。

— 変数: buffer-file-format

この変数は、訪問したファイルの書式を記述している。 より正確には、カレントバッファのファイルを訪問する過程で 復号したファイル書式名のリストである。 この変数は、すべてのバッファにおいてつねにバッファローカルである。

write-regionがデータをファイルに書き出すときには、まず、 buffer-file-formatで指定された書式の符号化関数を リストに現れる順に呼び出します。

— コマンド: format-write-file file format

このコマンドは、カレントバッファの内容を書式formatにて ファイルfileに書き出す。 さらに、当該書式をバッファを将来保存するときのデフォルトとする。 引数formatは、書式名のリストである。

— コマンド: format-find-file file format

このコマンドは、ファイルfileを探し、 それを書式formatに従って変換する。 さらに、当該書式をバッファをのちに保存するときのデフォルトとする。

引数formatは、書式名のリストである。 formatnilであると、変換を行わない。 対話的に呼び出した場合、 formatnilを指定するには<RET>のみを打つ。

— コマンド: format-insert-file file format &optional beg end

このコマンドは、ファイルfileの内容を書式formatに従って 変換して挿入する。 begendnil以外であると、 それらは、insert-file-contents(see Reading from Files)と同様に、 読み込むべきファイルの部分を指定する。

戻り値は、insert-file-contentsが返す値に似ており、 絶対ファイル名と挿入データの(変換後の)長さのリストである。

引数formatは、書式名のリストである。 formatnilであると、変換を行わない。 対話的に呼び出した場合、 formatnilを指定するには<RET>のみを打つ。

— 変数: auto-save-file-format

この変数は、自動保存に対して使用する書式を指定する。 その値は、buffer-file-formatの値のように、書式名のリストであるが、 buffer-file-formatのかわりに 自動保存ファイルを書くために使われる。 この変数は、すべてのバッファにおいてつねにバッファローカルである。