ここでは、ファイル名を読み取るように設計された高レベルの 別の補完関数について述べます。 デフォルトディレクトリの自動挿入などの特別な機能を提供します。
この関数は、promptをプロンプトとし、 補完を行ってミニバッファでファイル名を読み取る。 defaultが
nil
以外であると、 ユーザーが単に<RET>を打つと、この関数はdefaultを返す。 defaultが正しいかどうかは検査せず、 それがなんであれ、ユーザーがミニバッファを空で抜けるとそれを返す。existingが
nil
以外であると、 ユーザーは既存ファイルの名前を指定する必要がある。 <RET>は、可能ならば正しい名前に補完を行うが、 それが正しくない場合には抜けない。 existingの値がnil
でもt
でもないと、 <RET>は補完後の確認を必要とする。 existingがnil
であると、 存在しないファイルの名前も許す。引数directoryは、相対ファイル名の補完に用いるディレクトリを指定する。
insert-default-directory
がnil
以外であると、 初期入力としてdirectoryをミニバッファに挿入する。 カレントバッファのdefault-directory
の値がデフォルトになる。initialを指定すると、 (directoryがあればそれを挿入後に)バッファに 挿入される初期ファイル名になる。 この場合、ポイントはinitialの先頭に置かれる。 initialのデフォルトは
nil
であり、 いかなるファイル名も挿入しない。 initialの動作を見るには、コマンドC-x C-vを試してほしい。 注意: ほとんどの場合、initialではなくdefaultを使うことを勧める。例を示す。
(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"
として返す。
この変数は
read-file-name
が使う。 その値は、read-file-name
が、 デフォルトディレクトリの名前と(あれば)初期ファイル名を ミニバッファに入れて動作を開始するかどうかを制御する。 この変数の値がnil
であると、read-file-name
は (引数initialで初期入力を指定しない限り) ミニバッファに初期入力を入れない。 その場合でも、相対ファイル名の補完には デフォルトディレクトリを使うが表示はしない。例を示す。
;; デフォルトディレクトリを入れて始める (let ((insert-default-directory t)) (read-file-name "The file is ")) ---------- Buffer: Minibuffer ---------- The file is ~lewis/manual/-!- ---------- Buffer: Minibuffer ---------- ;; ミニバッファは空であり、プロンプトのみ (let ((insert-default-directory nil)) (read-file-name "The file is ")) ---------- Buffer: Minibuffer ---------- The file is -!- ---------- Buffer: Minibuffer ----------