Next: visitのためのサブルーチン, Up: ファイルのvisit [Contents][Index]
このセクションではファイルのvisitに通常使用される関数を説明します。歴史的な理由によりこれらの関数は‘visit-’ではなく、‘find-’で始まる名前をもちます。バッファーをvisitしているファイルの名前へのアクセスや、visitされたファイル名から既存のバッファーを見つける関数および変数についてはバッファーのファイル名を参照してください。
ファイル内容を見たいものの変更したくない場合にはテンポラリーバッファー(temporary buffer:
一時的なバッファー)でinsert-file-contents
を使用例するのが、Lispプログラム内ではもっとも高速な方法です。時間を要するファイルのvisitは必要ありません。ファイルからの読み込みを参照してください。
このコマンドはファイルfilenameをvisitしているバッファーを選択する。visitしている既存のバッファーがあればそのバッファー、なければバッファーを新たに作成してそのバッファーにファイルを読み込む。これはそのバッファーをリターンする。
技術的な詳細を除けばfind-file
関数のbodyは基本的には以下と等価:
(switch-to-buffer (find-file-noselect filename nil nil wildcards))
(ウィンドウ内のバッファーへの切り替えのswitch-to-buffer
を参照されたい。)
wildcardsが非nil
(interactiveに呼び出された場合は常に真)の場合、find-file
はfilename内のワイルドカード文字を展開してマッチするすべてのファイルをvisitする。
find-file
がinteractiveに呼び出された際にはミニバッファー内でfilenameの入力を求める。
このコマンドはfind-file
が行うようにfilenameをvisitするが、フォーマット変換(ファイルのフォーマット変換を参照)、文字コード変換(コーディングシステムを参照)、EOL変換(End of line
conversionを参照)を何も行わない。ファイルをvisitしているバッファーはunibyteになり、ファイル名とは無関係にバッファーのメジャーモードはFundamentalモードになる。ファイル内で指定されたファイルローカル変数(ファイルローカル変数を参照)は無視され、自動的な解凍とrequire-final-newline
によるファイル終端への改行追加(require-final-newlineを参照)も無効になる。
Emacsがすでにリテラリー(literally:
文字通り、そのまま)でない方法で同じファイルをvisitしているバッファーをもつ場合には、Emacsはその同じファイルをリテラリーにvisitせず、単に既存のバッファーに切り替えることに注意。あるファイルのコンテンツにたいして確実にリテラリーにアクセスしたければテンポラリーバッファーを作成して、insert-file-contents-literally
を使用してファイルのコンテンツを読み込むこと(ファイルからの読み込みを参照)。
これはファイルをvisitするすべての関数の要となる関数である。これはファイルfilenameをvisitしているバッファーをリターンする。望むならそのバッファーをカレントにしたり、あるウィンドウ内に表示することができるだろうがこの関数はそれを行わない。
関数は既存のバッファーがあればそれをリターンし、なければ新たにバッファーを作成してそれにファイルを読み込む。find-file-noselect
が既存のバッファーを使用する際は、まずファイルがそのバッファーに最後にvisit、または保存したときから変更されていないことを検証する。ファイルが変更されていれば、この関数は変更されたファイルを再読み込みするかどうかをユーザーに尋ねる。ユーザーが‘yes’と応えたら、以前に行われたそのバッファー内での編集は失われる。
ファイルの読み込みはEOL変換、フォーマット変換(ファイルのフォーマット変換を参照)を含むファイルコンテンツのデコードを要する(コーディングシステムを参照)。wildcardsが非nil
なら、find-file-noselect
はfilename内のワイルドカード文字を展開してマッチするすべてのファイルをvisitする。
この関数はオプション引数nowarnがnil
なら、さまざまな特殊ケースにおいて警告メッセージ(warning
message)、および注意メッセージ(advisory
message)を表示する。たとえば関数がバッファーの作成を必要とし、かつfilenameという名前のファイルが存在しなければ、エコーエリア内にメッセージ‘(New
file)’を表示してそのバッファーを空のままに留める。
find-file-noselect
関数は、ファイルを読み込んだ後に通常はafter-find-file
を呼び出す(visitのためのサブルーチンを参照)。この関数はバッファーのメジャーモードのセット、ローカル変数のパース、正に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>
このコマンドはファイルfilenameをvisitしているバッファーを選択するが、選択されたウィンドウではない他のウィンドウでこれを行う。これは別の既存ウィンドウを使用したり、ウィンドウを分割するかもしれない。ウィンドウ内のバッファーへの切り替えlを参照のこと。
このコマンドがinteractiveに呼び出された際はfilenameの入力を求める。
このコマンドはfind-file
のようにファイルfilenameをvisitしているバッファーを選択するが、そのバッファーを読み取り専用(read-only)とマークする。関連する関数と変数については読み取り専用のバッファーを参照のこと。
このコマンドがinteractiveに呼び出された際はfilenameの入力を求める。
この変数が非nil
なら、各種find-file
コマンドはワイルドカード文字をチェックして、それらにマッチするすべてのファイルをvisitする(interactiveに呼び出されたときやwildcards引数が非nil
のとき)。このオプションがnil
なら、find-file
コマンドはそれらのwildcards引数を無視してワイルドカード文字を特別に扱うことは決してない。
この変数の値はファイルがvisitされた後に呼び出される関数のリスト。ファイルのローカル変数指定は、(もしあれば)このフックが実行される前に処理されるだろう。フック関数実行時はそのファイルをvisitしているバッファーがカレントになる。
この変数はノーマルフックである。フックを参照のこと。
この変数の値はfind-file
やfind-file-noselect
が存在しないファイル名を受け取った際に呼び出される関数のリスト。存在しないファイルを検知するとfind-file-noselect
は直ちにこれらの関数を呼び出す。これらのいずれかが非nil
をリターンするまで、リスト順に関数を呼び出す。buffer-file-name
はすでにセットアップ済みである。
関数の値が使用されること、および多くの場合いくつかの関数だけが呼び出されるので、これはノーマルフックではない。
このバッファーローカル変数が非nil
値にセットされると、save-buffer
はあたかもそのバッファーがリテラリー、つまり何の変換も行わずにファイルをvisitしていたかのように振る舞う。コマンドfind-file-literally
はこの変数のローカル値をセットするが、その他の等価な関数およびコマンドも、たとえばファイル終端への改行の自動追加を避けるためにこれを同様に行うことができる。この変数は恒久的にローカルなのでメジャーモードの変更による影響を受けない。