GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Reading-File-Names.html ・ emacs-doc.conao3.com

21.6.5 ファイル名の読み取り

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

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

この関数はファイル名を読み込み、prompt でプロンプトを表示して補完を行います。

例外として、以下の条件をすべて満たす場合、この関数はミニバッファではなくグラフィカルなファイルダイアログを用いてファイル名を読み込みます。

  1. マウスコマンドで呼び出されます。
  2. 選択されたフレームは、こうしたダイアログに対応したグラフィカルディスプレイ上に表示されています。
  3. 変数 use-dialog-box は non-nil です。The GNU Emacs Manual の Dialog Boxes を参照してください。
  4. 以下で説明する directory 引数は、リモートファイルを指定するものではありません。The GNU Emacs Manual の Remote Files を参照してください。

グラフィカルなファイルダイアログを使用した際の正確な挙動は、プラットフォームに依存します。ここでは、単にミニバッファを使用した場合の挙動について記述します。

read-file-name は、返されたファイル名を自動的に展開しません。絶対ファイル名が必要な場合は、自身で expand-file-name を呼び出すことができます。

オプション引数 require-match は、completing-read と同様の意味を持ちます。補完とミニバッファを参照してください。

引数 directory は、相対ファイル名を補完する際に使用するディレクトリを指定します。絶対ディレクトリ名である必要があります。変数 insert-default-directory が nil 以外の場合、directory も初期入力としてミニバッファに挿入されます。デフォルトでは、現在のバッファの default-directory の値が使用されます。

initial を指定すると、それはバッファに挿入される初期ファイル名となります(directory が挿入されている場合は、その後になります)。この場合、ポイントは initial の先頭に移動します。initial のデフォルトは nil であり、ファイル名は挿入されません。initial がどのような動作をするか確認するには、ファイルを開いたバッファで C-x C-v コマンドを実行してみてください。ご注意: ほとんどの場合、initial ではなく default を使用することを推奨します。

default が nil でない場合、ユーザーが read-file-name が最初に挿入した内容と同じ空でない内容でミニバッファを終了すると、関数は default を返します。insert-default-directory が nil でない場合(デフォルトではそうなります)、初期のミニバッファ内容は常に空ではありません。require-match の値にかかわらず、default の有効性はチェックされません。ただし、require-match が nil でない場合、初期のミニバッファ内容は有効なファイル名(またはディレクトリ名)である必要があります。そうでない場合、ユーザーが編集を行わずに終了すると read-file-name が補完を試み、default は返しません。default は履歴コマンドからも利用可能です。

default が nil である場合、read-file-name はその代わりに使用する代替デフォルト値を探そうとし、それを明示的に指定された場合と全く同様に扱います。default が nil であり、かつ initial が nil でない場合、デフォルト値は directory と initial から得られる絶対ファイル名となります。default と initial がともに nil であり、かつバッファがファイルを参照している場合、read-file-name はそのファイルの絶対ファイル名をデフォルトとして使用します。バッファがファイルを参照していない場合、デフォルト値は存在しません。その場合、ユーザーが編集を行わずに RET と入力すると、read-file-name は単にミニバッファに事前に挿入されていた内容を返します。

ユーザーが空のミニバッファに RET と入力した場合、この関数は require-match の値に関わらず空文字列を返します。例えば、これによりユーザーは M-x set-visited-file-name を用いて現在のバッファがいかなるファイルも参照しないようにできます。

predicate が nil 以外の場合、どのファイル名が補完候補として許容されるかを決定する、1つの引数を取る関数を指定します。predicate がそのファイル名に対して nil 以外を返す場合、そのファイル名は許容される値となります。

read-file-name の使用例を以下に示します。

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

;; After evaluation of the preceding expression,
;;   the following appears in the minibuffer:

---------- 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-function

nil 以外の場合、これは read-file-name と同じ引数を受け取る関数である必要があります。read-file-name が呼び出されると、通常の処理を行う代わりに、指定された引数を用いてこの関数を呼び出します。

ユーザーオプション: read-file-name-completion-ignore-case

この変数が nil 以外の場合、read-file-name は補完時に大文字小文字を区別しません。

関数: read-directory-name prompt &optional directory default require-match initial predicate

この関数は read-file-name と同様ですが、補完候補としてディレクトリ名のみを許可します。

default が nil であり、かつ initial が nil でない場合、read-directory-name は directory(または directory が nil であれば現在のバッファのデフォルトディレクトリ)と initial を組み合わせて代替デフォルトを構築します。default と initial がともに nil である場合、この関数は directory を代替デフォルトとして使用し、directory が nil であれば現在のバッファのデフォルトディレクトリを使用します。

ユーザーオプション: insert-default-directory

この変数は read-file-name で使用されており、したがって間接的に、ファイル名を読み込むほとんどのコマンドでも使用されます。(これには、対話形式でコード文字 ‘f’ または ‘F’ を使用するすべてのコマンドが含まれます。対話形式のコード文字を参照してください。)この変数の値によって、read-file-name がミニバッファにデフォルトディレクトリ名と、(もしあれば)初期ファイル名を配置して開始するかどうかが決まります。この変数の値が nil の場合、read-file-name はミニバッファに初期入力を配置しません(initial 引数で初期入力を指定した場合を除きます)。その場合、相対ファイル名の補完には引き続きデフォルトディレクトリが使用されますが、表示はされません。

この変数が nil であり、かつミニバッファの初期内容が空である場合、デフォルト値にアクセスするには、ユーザーが明示的に次の履歴要素を取得する必要がある場合があります。変数が nil 以外である場合、ミニバッファの初期内容は常に空ではなく、ユーザーは編集されていないミニバッファで直ちに RET と入力することで、いつでもデフォルト値を要求できます。(上記参照。)

例えば:

;; Here the minibuffer starts out with the default directory.
(let ((insert-default-directory t))
  (read-file-name "The file is "))

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

;; Here the minibuffer is empty and only the prompt
;;   appears on its line.
(let ((insert-default-directory nil))
  (read-file-name "The file is "))

---------- Buffer: Minibuffer ----------
The file is ∗
---------- Buffer: Minibuffer ----------
関数: 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 を参照)。args の残りの部分は、存在する場合、read-from-minibuffer の引数 default および inherit-input-method として使用されます(Reading Text Strings with the Minibuffer を参照)。

変数: minibuffer-local-shell-command-map

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