Next: , Previous: , Up: Completion   [Contents][Index]


19.6.5 Reading File Names

高レベル補完関数read-file-nameread-directory-nameread-shell-commandはそれぞれ、ファイル名、ディレクトリー名、シェルコマンドを読み取るようデザインされています。これらはデフォルトディレクトリーの自動挿入を含む特別な機能を提供します。

Function: read-file-name prompt &optional directory default require-match initial predicate

この関数はプロンプトpromptとともに補完つきでファイル名を読み取る。

例外として以下のすべてが真ならば、この関数はミニバッファーのかわりにグラフィカルなファイルダイアログを使用してファイル名を読み取る:

  1. マウスコマンドを通じて呼び出された。
  2. グラフィカルなディスプレイ上の選択されたフレームがこの種のダイアログをサポートする。
  3. 変数use-dialog-boxが非nilの場合。Dialog Boxes in The GNU Emacs Manualを参照のこと。
  4. directory引数(以下参照)がリモートファイルを指定しない。Remote Files in The GNU Emacs Manualを参照のこと。

グラフィカルなファイルダイアログを使用したときの正確な振る舞いは、プラットホームに依存する。ここでは単にミニバッファーを使用したときの振る舞いを記す。

read-file-nameはリターンするファイル名を自動的に展開しない。絶対ファイル名が必要ならば、自分でexpand-file-nameを呼び出さなければならない。

オプション引数require-matchは、completing-readのときと同じ。Minibuffer Completionを参照のこと。

引数directoryは、相対ファイル名の補完に使用するディレクトリーを指定する。値は絶対ディレクトリー名。変数insert-default-directoryが非nilの場合は、初期入力としてミニバッファーにdirectoryも挿入される。デフォルトはカレントバッファーのdefault-directoryの値。

initialを指定した場合、それはミニバッファーに挿入する初期ファイル名になる(directoryが挿入された場合はその後に挿入される)。この場合、ポイントはinitialの先頭に配される。initialのデフォルト値はnil(ファイル名を挿入しない)。initialが何を行うか確認するには、ファイルをvisitしているバッファーでC-x C-vを試すとよい。注意: ほとんどの場合、initialよりもdefaultの使用を推奨する。

defaultが非nilの場合、ユーザーが最初にread-file-nameが挿入したものと同じ、空以外のコンテンツを残してミニバッファーをexitすると、この関数はdefaultをリターンする。insert-default-directoryが非nilの場合はそれがデフォルトとなるので、ミニバッファーの初期コンテンツは常に空以外になる。require-matchの値に関わらず、defaultの有効性はチェックされない。とはいえrequire-matchが非nilの場合、ミニバッファーの初期コンテンツは有効なファイル名(またはディレクトリー名)であるべきだろう。それが有効でない場合、ユーザーがそれを編集せずにexitするとread-file-nameは補完を試み、defaultはリターンされない。defaultはヒストリーコマンドからも利用できる。

defaultnilの場合、read-file-nameはその場所に代用するデフォルトを探そうと試みる。この代用デフォルトは、明示的にdefaultにそれが指定されたかのように、defaultとまったく同じ方法で扱われる。defaultnilでもinitialが非nilの場合、デフォルトはdirectoryinitialから得られる絶対ファイル名になる。defaultinitialの両方がnilで、そのバッファーがファイルをvisitしているバッファーの場合、read-file-nameはそのファイルの絶対ファイル名をデフォルトとして使用する。バッファーがファイルをvisitしていなければ、デフォルトは存在しない。この場合、ユーザーが編集せずにRETをタイプすると、read-file-nameは前にミニバッファーに挿入されたコンテンツを単にリターンする。

空のミニバッファー内でユーザーがRETをタイプした場合、この関数はrequire-matchの値に関わらず、空の文字列をリターンする。たとえばユーザーがM-x set-visited-file-nameを使用して、カレントバッファーをファイルをvisitしていないことにするのに、この方法を使用している。

predicateが非nilの場合、それは補完候補として許容できるファイル名を決定する、1引数の関数である。predicateが関数名にたいして非nilをリターンすれば、それはファイル名として許容できる値である。

以下はread-file-nameを使用した例である:

(read-file-name "The file is ")

;; 前の式を評価した後に、
;;   ミニバッファーに以下が表示される。:

---------- Buffer: Minibuffer ----------
The file is /gp/gnu/elisp/∗
---------- Buffer: Minibuffer ----------

manual TABをタイプすると以下がリターンされる:

---------- Buffer: Minibuffer ----------
The file is /gp/gnu/elisp/manual.texi∗
---------- Buffer: Minibuffer ----------

ここでユーザーがRETをタイプすると、read-file-nameは文字列"/gp/gnu/elisp/manual.texi"をファイル名としてリターンする。

Variable: read-file-name-function

nilの場合は、read-file-nameと同じ引数を受け取る関数である。read-file-nameが呼び出されたとき、read-file-nameは通常の処理を行なうかわりに、与えられた引数でこの関数を呼び出す。

User Option: read-file-name-completion-ignore-case

この変数が非nilの場合、read-file-nameは補完を行なう際に大文字小文字を無視する。

Function: read-directory-name prompt &optional directory default require-match initial

この関数はread-file-nameと似ているが、補完候補としてディレクトリーだけを許す。

defaultnilinitialが非nilの場合、read-directory-namedirectory(directorynilならカレントバッファーのデフォルトディレクトリー)とinitialを組み合わせて代替えのデフォルトを構築する。defaultinitialの両方がnilの場合、この関数はdirectorydirectorynilの場合はカレントバッファーのデフォルトディレクトリーを代替えのデフォルトとして使用する。

User Option: insert-default-directory

この変数はread-file-nameにより使用されるため、ファイル名を読み取るほとんどのコマンドにより、間接的に使用される。(これらのコマンドにはコマンドのインタラクティブフォームに‘f’や‘F’のコードレター(code letter))をふくむすべてのコマンドが含まれる。Code Characters for interactiveを参照のこと。)この変数の値は、(もしあれば)デフォルトディレクトリー名をミニバッファー内に配してread-file-nameを開始するかどうかを制御する。変数の値がnilの場合、read-file-nameはミニバッファーに初期入力を何も配さない(ただしinitial引数で初期入力を指定しない場合)。この場合、依然としてデフォルトディレクトリーが相対ファイル名の補完に使用されるが、表示はされない。

この変数がnilでミニバッファーの初期コンテンツが空の場合、ユーザーはデフォルト値にアクセスするために次のヒストリー要素を明示的にフェッチする必要があるだろう。この変数が非nilならミニバッファーの初期コンテンツは常に空以外となり、ミニバッファーで編集をおこなわず即座にRETをタイプすることにより、常にデフォルト値を要求できる(上記参照)。

たとえば:

;; デフォルトディレクトリーとともにミニバッファーが開始。
(let ((insert-default-directory t))
  (read-file-name "The file is "))

---------- Buffer: Minibuffer ----------
The file is ~lewis/manual/∗
---------- Buffer: Minibuffer ----------

;; ミニバッファーはプロンプトだけで空。
;;   appears on its line.
(let ((insert-default-directory nil))
  (read-file-name "The file is "))

---------- Buffer: Minibuffer ----------
The file is ∗
---------- Buffer: Minibuffer ----------
Function: read-shell-command prompt &optional initial history &rest args

この関数は、プロンプトpromptと優れた補完を提供して、ミニバッファーからのシェルコマンドを読み取る。これはコマンド名にたいして適切な候補を使用してコマンドの最初の単語を補完する。コマンドの残りの単語はファイル名として補完する。

この関数はミニバッファー入力にたいするキーマップとしてminibuffer-local-shell-command-mapを使用する。history引数は使用するヒストリーリストを指定する。省略、またはnilの場合のデフォルトはshell-command-history(shell-command-historyを参照)。オプション引数initialはミニバッファーの初期コンテンツを指定する(Initial Inputを参照)。もしあれば、残りのargsread-from-minibuffer内のdefaultおよびinherit-input-methodとして使用される(Text from Minibufferを参照)。

Variable: minibuffer-local-shell-command-map

このキーマップはread-shell-commandにより、コマンドおよびシェルコマンドの一部となるファイル名の補完のために使用される。これは親キーマップとしてminibuffer-local-mapを使用し、TABcompletion-at-pointにバインドする。