Next: ミニバッファーでのLispオブジェクトの読み取り, Previous: ミニバッファーの概要, Up: ミニバッファー [Contents][Index]
ミニバッファー入力にたいする基本的なプリミティブはread-from-minibuffer
で、これは文字列とLispオブジェクトの両方からテキスト表現されたフォームを読み取ることができます。関数read-regexp
は特別な種類の文字列である正規表現式(正規表現を参照)の読み取りに使用されます。コマンドや変数、ファイル名などの読み取りに特化した関数もあります(補完を参照)。
ほとんどの場合でにはLisp関数の途中でミニバッファー入力関数を呼び出すべきではありません。かわりにinteractive
指定されたコマンドの引数の読み取りの一環として、すべてのミニバッファー入力を行います。コマンドの定義を参照してください。
この関数はミニバッファーから入力を取得するもっとも一般的な手段である。デフォルトでは任意のテキストを受け入れて、それを文字列としてリターンする。しかしreadが非nil
なら、テキストをLispオブジェクトに変換するためにread
を使用する(入力関数を参照)。
この関数が最初に行うのはミニバッファーをアクティブにして、プロンプトにprompt(文字列でなければならない)を用いてミニバッファーを表示することである。その後にユーザーはミニバッファーでテキストを編集できる。
ミニバッファーをexitするためにユーザーがコマンドをタイプするとき、read-from-minibuffer
はミニバッファー内のテキストからリターン値を構築する。通常はそのテキストを含む文字列がリターンされる。しかしreadが非nil
なら、read-from-minibuffer
はテキストを読み込んで結果を未評価のLispオブジェクトでリターンする(読み取りについての詳細はSee 入力関数を参照)。
引数defaultはヒストリーコマンドを通じて利用できるデフォルト値を指定する。値には文字列、文字列リスト、またはnil
を指定する。文字列と文字列リストは、ユーザーがM-nで利用可能な“未来のヒストリー(future
history)”になる。更に(keymap引数を通じて)呼び出しで補完が提供された場合には、defaultの値をM-nで使い果たすと、その補完候補が“未来のヒストリー”に追加される。minibuffer-default-add-functionを参照のこと。
readが非nil
なら、ユーザーの入力が空のときのread
の入力としてもdefaultが使用される。defaultが文字列リストの場合には最初の文字列が入力として使用される。defaultがnil
なら、空の入力はend-of-file
エラーとなる。しかし通常(readがnil
)の場合には、ユーザーの入力が空のときread-from-minibuffer
はdefaultを無視して空文字列""
をリターンする。この点ではこの関数はこのチャプターの他のどのミニバッファー入力関数とも異なる。
keymapが非nil
なら、そのキーマップはミニバッファー内で使用されるローカルキーマップとなる。keymapが省略またはnil
なら、minibuffer-local-map
の値がキーマップとして使用される。キーマップの指定は補完のようなさまざまなアプリケーションにたいしてミニバッファーをカスタマイズする、もっとも重要な方法である。
引数historyは入力の保存やミニバッファー内で使用されるヒストリーコマンドが使用するヒストリーリスト変数を指定する。デフォルトはminibuffer-history
。historyがシンボルt
なら、ヒストリーを記録しない。同様にオプションでヒストリーリスト内の開始位置を指定できる。ミニバッファーのヒストリーを参照のこと。
ミニバッファーにおいてletバインドまたはバッファーローカルいずれかで変数minibuffer-allow-text-properties
が非nil
なら、リターンされる文字列にはミニバッファーでのすべてのテキストプロパティが含まれる。それ以外なら、値がリターンされるときすべてのテキストプロパティが取り除かれる(この変数はデフォルトではnil
)。
minibuffer-prompt-properties
内のテキストプロパティはプロンプトに適用される。このプロパティリストはデフォルトではプロンプトに使用するフェイスを定義する。このフェイスが与えられるとフェイスリストの最後に適用されて表示前にマージされる。
ユーザーがプロンプトの外観を完全に制御したければすべてのフェイスリストの最後にdefault
フェイスを指定するのがもっとも簡便な方法である。たとえば:
(read-from-minibuffer (concat (propertize "Bold" 'face '(bold default)) (propertize " and normal: " 'face '(default))))
引数inherit-input-methodが非nil
なら、ミニバッファーにエンターする前にカレントだったバッファーが何であれ、カレントの入力メソッド(入力メソッドを参照)、およびenable-multibyte-characters
のセッティング(テキストの表現方法を参照)が継承される。
ほとんどの場合、initialの使用は推奨されない。非nil
値の使用は、historyにたいするコンスセル指定と組み合わせる場合のみ推奨する。入力の初期値を参照のこと。
この関数はミニバッファーから文字列を読み取ってそれをリターンする。引数prompt、initial、history、inherit-input-methodはread-from-minibuffer
で使用する場合と同様。使用されるキーマップはminibuffer-local-map
。
オプション引数defaultはread-from-minibuffer
の場合と同様に使用されるが、ユーザーの入力が空の場合にリターンするデフォルト値も指定する。read-from-minibuffer
の場合と同様に値は文字列、文字列リスト、またはnil
(空文字列と等価)である。defaultが文字列のときは、その文字列がデフォルト値になる。文字列リストのときは、最初の文字列がデフォルト値になる(これらの文字列はすべて“未来のミニバッファーヒストリー(future
minibuffer history)”としてユーザーが利用できる)。
この関数はread-from-minibuffer
を呼び出すことによって機能する。
(read-string prompt initial history default inherit) ≡ (let ((value (read-from-minibuffer prompt initial nil nil history default inherit))) (if (and (equal value "") default) (if (consp default) (car default) default) value))
長い文字列(たとえば複数行に跨がるような文字列)を編集したい場合にread-string
を使うのは理想的ではないかもしれない。そのような場合にはその文字列をユーザーが編集できる通常のバッファーを新たにポップアップしたほうが便利かもしれない。これはread-string-from-buffer
を使用して行うことができる。
この関数はミニバッファーから文字列として正規表現を読み取ってそれをリターンする。ミニバッファーのプロンプト文字列promptが‘:’(とその後にオプションの空白文字)で終端されていなければ、この関数はデフォルトのリターン値(空文字列でない場合。以下参照)の前に‘: ’を付加する。
オプション引数defaultsは、入力が空の場合にリターンするデフォルト値を制御する。値は文字列、nil
(空文字列と等価)、文字列リスト、シンボルのうちのいずれか。
defaultsがシンボルの場合、read-regexp
は変数read-regexp-defaults-function
(以下参照)の値を調べて非nil
のときはdefaultsよりそちらを優先的に使用する。この場合は値は以下のいずれか:
regexp-history-last
。これは適切なミニバッファーヒストリーリスト(以下参照)の最初の要素を使用することを意味する。
nil
、文字列、文字列リストのいずれか)がdefaultsの値となる。
これでread-regexp
がdefaultsを処理した結果はリストに確定する(値がnil
または文字列の場合は1要素のリストに変換する)。このリストにたいしてread-regexp
は以下のような入力として有用な候補をいくつか追加する:
これで関数はユーザー入力を取得するためにread-from-minibuffer
に渡す正規表現のリストを得た。リストの最初の要素は入力が空の場合のデフォルト値である。リストのすべての要素は“未来のミニバッファーヒストリー(future
minibuffer history)”となるリスト(see future list in The GNU Emacs Manualを参照)としてユーザーが利用可能になる。
オプション引数historyが非nil
なら、それは使用するミニバッファーヒストリーリストを指定するシンボルである(ミニバッファーのヒストリーを参照)。これが省略またはnil
なら、ヒストリーリストのデフォルトはregexp-history
となる。
ユーザーはcase foldingをオンまたはオフにするかどうかを示すために、M-s
cコマンドを使うことができる。ユーザーがこのコマンドを使うと、リターンされる文字列のテキストプロパティcase-fold
にはfold
またはinhibit-fold
のいずれかがセットされる。この値を実際に使うかどうかはread-regexp
の呼び出し側に任されており、そのための利便的関数としてread-regexp-case-fold-search
が提供されている。典型的な使い方は以下のようになるだろう:
(let* ((regexp (read-regexp "Search for: ")) (case-fold-search (read-regexp-case-fold-search regexp))) (re-search-forward regexp))
関数read-regexp
は、デフォルトの正規表現リストを決定するためにこの変数の値を使用するかもしれない。非nil
なら、この変数は以下のいずれかである:
regexp-history-last
。
nil
、文字列、文字列リストのいずれかをリターンする引数なしの関数。
これらの変数の使い方についての詳細は、上述のread-regexp
を参照のこと。
この変数がnil
(デフォルト)ならread-from-minibuffer
、およびミニバッファーで入力を司るすべての関数は、ミニバッファー入力からすべてのテキストプロパティを取り除いてリターンする。
ただしread-minibuffer
、およびその関連関数(Reading
Lisp Objects With the Minibufferを参照)は、この変数の値とは関係なく無条件でテキストプロパティを取り除く。
ミニバッファーにおいてこの変数がletバインドあるいはバッファーローカルで非nil
の場合にはread-from-minibuffer
、read-string
、および関連するすべての関数はテキストプロパティを保持する。ただし補完つきのミニバッファー入力を司る関数については、face
プロパティを取り除く(他のテキストプロパティは保持する)。
(minibuffer-with-setup-hook (lambda () (setq-local minibuffer-allow-text-properties t)) (completing-read "String: " (list (propertize "foobar" 'face 'baz 'data 'zot)))) => #("foobar" 0 6 (data zot))
この例ではユーザーが‘foo’とタイプしてからTABキーを押下しており、face
プロパティ以外のテキストプロパティが保持される。
これはミニバッファーからの読み取りにたいするデフォルトローカルキーマップである。デフォルトでは以下のバインディングをもつ:
exit-minibuffer
exit-minibuffer
minibuffer-beginning-of-buffer
abort-recursive-edit
next-history-element
previous-history-element
next-matching-history-element
previous-matching-history-element
変数minibuffer-mode-map
はこの変数にたいするエイリアス。
この関数はミニバッファーから文字列を読み取るが、入力の一部として空白文字を認めず、そのかわりに空白文字は入力を終端させる。引数prompt、initial、inherit-input-methodはread-from-minibuffer
で使用するときと同様。
これは関数read-from-minibuffer
の簡略化されたインターフェイスであり、キーマップminibuffer-local-ns-map
の値をkeymap引数としてread-from-minibuffer
関数に渡す。キーマップminibuffer-local-ns-map
はC-qをリバインドしないので、クォートすることによって文字列内にスペースを挿入することが可能である。
このビルトイン変数は関数read-no-blanks-input
内でミニバッファーローカルキーマップとして使用されるキーマップである。デフォルトではminibuffer-local-map
のバインディングに加えて、以下のバインディングが有効になる:
minibuffer-default-prompt-format
変数に応じたデフォルト値defaultでpromptをフォーマットする。
minibuffer-default-prompt-format
はフォーマット文字列(デフォルトは‘" (default
%s)"’)であり、これは‘"Local filename (default somefile):
"’のようなプロンプトの“default”部分をどのようにフォーマットするかを指示する。
これをどのように表示させるかをユーザーがカスタマイズできるようにするには、ユーザーに(デフォルト値をもつ)値の入力を求めるコードが、そのコードスニペット行に沿って何らかを調べる必要がある:
(read-file-name (format-prompt "Local filename" file) nil file)
format-argsがnil
なら、promptはリテラル文字列として使用される。format-argsが非nil
ならpromptはフォーマットコントロール文字列として使用され、promptとformat-argsがformat
に渡される(文字列のフォーマットを参照)。
minibuffer-default-prompt-format
は‘""’でもよく、その場合には何のデフォルト値も表示されない。
defaultがnil
ならデフォルト値はなく、したがって結果となる値には“default
value”文字列は含まれない。defaultが非nil
のリストなら、プロンプトでリストの最初の要素が使用される。
promptとminibuffer-default-prompt-format
はいずれもsubstitute-command-keys
を通じて実行される(ドキュメント内でのキーバインディングの置き換えを参照)。
このオプションが非nil
(デフォルト)の場合には、ミニバッファーからの入力を取得してexitする際に、ミニバッファーにエンターしたフレーム、それが別のフレームならミニバッファーウィンドウを所有するフレームのウィンドウ構成をリストアする。これはたとえば同じフレームにあるミニバッファーから入力を所得中にユーザーがウィンドウを分割した場合には、ミニバッファーのexit時にその分割が取り消されることを意味する。
このオプションがnil
なら、そのようなリストアは行われない。したがって上記のような分割はミニバッファーexit後も保持される。
Next: ミニバッファーでのLispオブジェクトの読み取り, Previous: ミニバッファーの概要, Up: ミニバッファー [Contents][Index]