次: , 前: Intro to Minibuffers, 上: Minibuffers


19.2 ミニバッファでのテキスト文字列の読み取り

多くの場合、テキストを文字列として読み取るためにミニバッファを使います。 Lispオブジェクトのテキスト表現を読み取るためにも使えます。 ミニバッファでの入力のもっとも基本的な関数は read-from-minibufferであり、どちらの目的にも使えます。

多くの場合、Lisp関数の途中でミニバッファの入力関数を呼ぶべきではありません。 そのかわりに、interactiveの指定で、 コマンドの引数を読み取る操作の一部として すべてのミニバッファ入力を行います。 See Defining Commands

— 機能: read-from-minibuffer prompt-string &optional initial-contents keymap read hist default inherit-input-method

この関数は、ミニバッファから入力を得るもっとも汎用の方法である。 デフォルトでは、任意のテキストを受け取り文字列として返す。 しかし、readnil以外であれば、 readを用いてテキストを Lispオブジェクトへ変換する(see Input Functions)。

この関数がまず行うことは、ミニバッファを活性にし、 プロンプトprompt-stringとともに表示することである。 prompt-stringは文字列であること。 これで、ユーザーはミニバッファでテキストを編集できるようになる。

ユーザーがミニバッファを抜けるコマンドを打つと、 read-from-minibufferは ミニバッファ内のテキストから戻り値を構築する。 通常、当該テキストを含む文字列を返す。 しかし、readnil以外であると、 read-from-minibufferはテキストを読み取った結果である Lispオブジェクトを評価せずに返す。 (読み取りについてはsee Input Functions。)

引数defaultは、履歴コマンドで使うデフォルト値を指定する。 これは文字列かnilであること。 readnil以外である場合、 ユーザーの入力が空であるときには、 readへの入力としてもdefaultを用いる。 しかし、(readnilである)通常の場合、 ユーザーの入力が空のとき、read-from-minibufferdefaultを返さずに空文字列""を返す。 この意味において、この関数は本章の他のミニバッファ用入力関数と異なる。

keymapnil以外であると、 ミニバッファのローカルキーマップとして用いる。 keymapを省略したりnilであると、 minibuffer-local-mapの値をキーマップとして用いる。 キーマップを指定することは、 補完などのさまざまな応用向けにミニバッファをカスタマイズする もっとも重要な方法である。

引数histは、ミニバッファでの入力を保存し履歴コマンドを使用可能に するために用いる履歴リスト変数を指定する。 デフォルトはminibuffer-historyである。 see Minibuffer History

変数minibuffer-allow-text-propertiesnil以外であると、 返される文字列には、ミニバッファで指定されたテキスト属性が含まれる。 さもなければ、値を返すときにすべてのテキスト属性を取り除く。

引数inherit-input-methodnil以外であると、 ミニバッファに入るまえにどのバッファにいたかに関わらず、 そのバッファから現在の入力方式(see Input Methods)と enable-multibyte-characters(see Text Representations)の設定を 継承する。

initial-contentsが文字列であれば、 read-from-minibufferは、 ユーザーがテキスト編集を始めるまえに、 この文字列をミニバッファに挿入しその末尾にポイントを置く。 この文字列を初期内容とするミニバッファが現れる。

あるいは、initial-contentsは、 (string . position)という形式のコンスセルでもよい。 これは、文字列stringをミニバッファに挿入し、 ポイントは末尾にではなく 先頭からposition番目の文字に置くことを意味する。

使用上の注意: 引数initial-contentsdefaultは、 多かれ少なかれ同じことを行う代替方法を提供する。 read-from-minibufferの1つの呼び出しにおいて、 両者の機能を同時に使うことに意味はない。 一般には、defaultを使うことを勧める。 というのは、ユーザーがデフォルト値を望む場合にはデフォルト値を挿入でき、 それ以外の場合にはデフォルト値を削除しなくてもよいからである。

— 機能: read-string prompt &optional initial history default inherit-input-method

この関数はミニバッファから文字列を読み取り、それを返す。 引数promptinitialは、 read-from-minibufferと同様に使われる。 使用するキーマップはminibuffer-local-mapである。

省略可能な引数historyは、nil以外であると、 履歴リストと(省略可能な)リスト内での初期位置を指定する。 省略可能な引数defaultは、 ユーザー入力が空の場合に返されるデフォルト値であり、文字列であること。 省略可能な引数inherit-input-methodは、 カレントバッファの入力方式を継承するかどうかを指定する。

この関数は関数read-from-minibufferの インターフェイスを単純化したものである。

          (read-string prompt initial history default inherit)
          ==
          (let ((value
                 (read-from-minibuffer prompt initial nil nil
                                       history default inherit)))
            (if (equal value "")
                default
              value))
     
— 変数: minibuffer-allow-text-properties

この変数がnilであると、 read-from-minibufferはミニバッファで指定されたすべての テキスト属性を返すまえに取り除く。 すべてのミニバッファがread-from-minibufferを使うので、 この変数はすべてのミニバッファ入力に適用される。

この変数の値に関わらず、 補完関数は無条件にテキスト属性を廃棄することに注意。

— 変数: minibuffer-local-map

ミニバッファから読み取るときのデフォルトのローカルキーマップ。 デフォルトでは、以下のバインディングである。

C-j
exit-minibuffer
<RET>
exit-minibuffer
C-g
abort-recursive-edit
M-n
next-history-element
M-p
previous-history-element
M-r
next-matching-history-element
M-s
previous-matching-history-element

— 機能: read-no-blanks-input prompt &optional initial inherit-input-method

この関数はミニバッファから文字列を読み取るが、 入力には白文字を許さず、白文字は入力を終らせる。 引数promptinitialinherit-input-methodは、 read-from-minibufferと同様に使われる。

これは関数read-from-minibufferの インターフェイスを単純化したものであり、 引数keymapとしてminibuffer-local-ns-mapの値を渡す。 キーマップminibuffer-local-ns-mapでは C-qを再バインドしないため、 クォートすれば空白を文字列に含めることができる

          (read-no-blanks-input prompt initial)
          ==
          (read-from-minibuffer prompt initial minibuffer-local-ns-map)
     
— 変数: minibuffer-local-ns-map

この組み込み変数は、関数read-no-blanks-inputが ミニバッファ用のローカルキーマップとして使うキーマップである。 デフォルトでは、minibuffer-local-mapのバインディングに加えて 以下のバインディングである。

<SPC>
exit-minibuffer
<TAB>
exit-minibuffer
?
self-insert-and-exit