Next: , Up: Visiting Files   [Contents][Index]


24.1.1 ファイルをvisitする関数

このセクションではファイルのvisitに通常使用される関数を説明します。歴史的な理由によりこれらの関数は‘visit-’ではなく、‘find-’で始まる名前をもちます。バッファーをvisitしているファイルの名前へのアクセスや、visitされたファイル名から既存のバッファーを見つける関数および変数についてはBuffer File Nameを参照してください。

ファイル内容を見たいものの変更したくない場合にはテンポラリーバッファー(temporary buffer: 一時的なバッファー)でinsert-file-contentsを使用例するのが、Lispプログラム内ではもっとも高速な方法です。時間を要するファイルのvisitは必要ありません。Reading from Filesを参照してください。

Command: find-file filename &optional wildcards

このコマンドはファイルfilenameをvisitしているバッファーを選択する。visitしている既存のバッファーがあればそのバッファー、なければバッファーを新たに作成してそのバッファーにファイルを読み込む。これはそのバッファーをリターンする。

技術的な詳細を除けばfind-file関数のbodyは基本的には以下と等価:

(switch-to-buffer (find-file-noselect filename nil nil wildcards))

(Switching Buffersswitch-to-bufferを参照されたい。)

wildcardsが非nil (interactiveに呼び出された場合は常に真)の場合、find-filefilename内のワイルドカード文字を展開してマッチするすべてのファイルをvisitする。

find-fileがinteractiveに呼び出された際にはミニバッファー内でfilenameの入力を求める。

Command: find-file-literally filename

このコマンドはfind-fileが行うようにfilenameをvisitするが、フォーマット変換(Format Conversionを参照)、文字コード変換(Coding Systemsを参照)、EOL変換(End of line conversionを参照)を何も行わない。ファイルをvisitしているバッファーはunibyteになり、ファイル名とは無関係にバッファーのメジャーモードはFundamentalモードになる。ファイル内で指定されたファイルローカル変数(File Local Variablesを参照)は無視され、自動的な解凍とrequire-final-newlineによるファイル終端への改行追加(require-final-newlineを参照)も無効になる。

Emacsがすでにリテラリー(literally: 文字通り、そのまま)でない方法で同じファイルをvisitしているバッファーをもつ場合には、Emacsはその同じファイルをリテラリーにvisitせず、単に既存のバッファーに切り替えることに注意。あるファイルのコンテンツにたいして確実にリテラリーにアクセスしたければテンポラリーバッファーを作成して、insert-file-contents-literallyを使用してファイルのコンテンツを読み込むこと(Reading from Filesを参照)。

Function: find-file-noselect filename &optional nowarn rawfile wildcards

これはファイルをvisitするすべての関数の要となる関数である。これはファイルfilenameをvisitしているバッファーをリターンする。望むならそのバッファーをカレントにしたり、あるウィンドウ内に表示することができるだろうがこの関数はそれを行わない。

関数は既存のバッファーがあればそれをリターンし、なければ新たにバッファーを作成してそれにファイルを読み込む。find-file-noselectが既存のバッファーを使用する際は、まずファイルがそのバッファーに最後にvisit、または保存したときから変更されていないことを検証する。ファイルが変更されていれば、この関数は変更されたファイルを再読み込みするかどうかをユーザーに尋ねる。ユーザーが‘yes’と応えたら、以前に行われたそのバッファー内での編集は失われる。

ファイルの読み込みはEOL変換、フォーマット変換(Format Conversionを参照)を含むファイルコンテンツのデコードを要する(Coding Systemsを参照)。wildcardsが非nilなら、find-file-noselectfilename内のワイルドカード文字を展開してマッチするすべてのファイルをvisitする。

この関数はオプション引数nowarnnilなら、さまざまな特殊ケースにおいて警告メッセージ(warning message)、および注意メッセージ(advisory message)を表示する。たとえば関数がバッファーの作成を必要とし、かつfilenameという名前のファイルが存在しなければ、エコーエリア内にメッセージ‘(New file)’を表示してそのバッファーを空のままに留める。

find-file-noselect関数は、ファイルを読み込んだ後に通常はafter-find-fileを呼び出す(Subroutines of Visitingを参照)。この関数はバッファーのメジャーモードのセット、ローカル変数のパース、正にvisitしたファイルより新しいauto-saveファイルが存在する場合にユーザーへの警告を行い、find-file-hook内の関数を実行することにより終了する。

オプション引数rawfileが非nilならafter-find-fileは呼び出されず、失敗時にfind-file-not-found-functionsは呼び出されない。さらに非nil値のrawfileは、コーディングシステム変換とフォーマット変換を抑制する。

find-file-noselect関数は、通常はファイルfilenameをvisitしているバッファーをリターンする。しかしワイルドカードが実際に使用、展開された場合には、それらのファイルをvisitしているバッファーのリストをリターンする。

(find-file-noselect "/etc/fstab")
     ⇒ #<buffer fstab>
Command: find-file-other-window filename &optional wildcards

このコマンドはファイルfilenameをvisitしているバッファーを選択するが、選択されたウィンドウではない他のウィンドウでこれを行う。これは別の既存ウィンドウを使用したり、ウィンドウを分割するかもしれない。Switching Bufferslを参照のこと。

このコマンドがinteractiveに呼び出された際はfilenameの入力を求める。

Command: find-file-read-only filename &optional wildcards

このコマンドはfind-fileのようにファイルfilenameをvisitしているバッファーを選択するが、そのバッファーを読み取り専用(read-only)とマークする。関連する関数と変数についてはRead Only Buffersを参照のこと。

このコマンドがinteractiveに呼び出された際はfilenameの入力を求める。

User Option: find-file-wildcards

この変数が非nilなら、各種find-fileコマンドはワイルドカード文字をチェックして、それらにマッチするすべてのファイルをvisitする(interactiveに呼び出されたときやwildcards引数が非nilのとき)。このオプションがnilなら、find-fileコマンドはそれらのwildcards引数を無視してワイルドカード文字を特別に扱うことは決してない。

User Option: find-file-hook

この変数の値はファイルがvisitされた後に呼び出される関数のリスト。ファイルのローカル変数指定は、(もしあれば)このフックが実行される前に処理されるだろう。フック関数実行時はそのファイルをvisitしているバッファーがカレントになる。

この変数はノーマルフックである。Hooksを参照のこと。

Variable: find-file-not-found-functions

この変数の値はfind-filefind-file-noselectが存在しないファイル名を受け取った際に呼び出される関数のリスト。存在しないファイルを検知するとfind-file-noselectは直ちにこれらの関数を呼び出す。これらのいずれかが非nilをリターンするまで、リスト順に関数を呼び出す。buffer-file-nameはすでにセットアップ済みである。

関数の値が使用されること、および多くの場合いくつかの関数だけが呼び出されるので、これはノーマルフックではない。

Variable: find-file-literally

このバッファーローカル変数が非nil値にセットされると、save-bufferはあたかもそのバッファーがリテラリー、つまり何の変換も行わずにファイルをvisitしていたかのように振る舞う。コマンドfind-file-literallyはこの変数のローカル値をセットするが、その他の等価な関数およびコマンドも、たとえばファイル終端への改行の自動追加を避けるためにこれを同様に行うことができる。この変数は恒久的にローカルなのでメジャーモードの変更による影響を受けない。