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


24.1.1 Functions for Visiting Files

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

Lispプログラム内では、ファイル内容を見たいものの変更したくない場合はテンポラリーバッファー(temporary buffer: 一時的なバッファー)でinsert-file-contentsを使用例するのが、もっとも高速な方法です。時間を要するファイルの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に呼び出された場合は常にtrueである)の場合、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-fileまたはfind-file-noselectが存在しないファイル名を受け取った際に呼び出される、関数のリストである。存在しないファイルを検知すると、find-file-noselectは直ちにこれらの関数を呼び出す。これらのうち、いずれかが非nilをリターンするまで、リストの順に関数を呼び出す。buffer-file-nameはすでにセットアップ済みである。

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

Variable: find-file-literally

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