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

21.2 ミニバッファによるテキスト文字列の読み取り

ミニバッファ入力における最も基本的なプリミティブは read-from-minibuffer であり、これを用いて文字列またはテキスト形式の Lisp オブジェクトを読み込むことができます。関数 read-regexp は、特殊な種類の文字列である正規表現(正規表現 を参照)の読み込みに使用されます。また、コマンド、変数、ファイル名などを読み込むための専用関数も用意されています(補完 を参照)。

ほとんどの場合、Lisp関数の途中でミニバッファ入力関数を呼び出すべきではありません。代わりに、interactive 仕様に従い、コマンドの引数を読み取る処理の一環として、すべてのミニバッファ入力を行ってください。コマンドの定義を参照してください。

関数: read-from-minibuffer prompt &optional initial keymap read history default inherit-input-method

この関数は、ミニバッファから入力を得るための最も汎用的な方法です。デフォルトでは、任意のテキストを受け取り、それを文字列として返します。ただし、read が nil でない場合は、read を使用してテキストを Lisp オブジェクトに変換します(入力関数を参照してください)。

この関数が最初に行うのは、ミニバッファを起動し、プロンプトとして prompt(文字列である必要があります)を表示することです。その後、ユーザーはミニバッファ内のテキストを編集できます。

ユーザーがミニバッファを終了するためのコマンドを入力すると、read-from-minibuffer はミニバッファ内のテキストから戻り値を構築します。通常は、そのテキストを含む文字列を返します。ただし、read が nil 以外の場合、read-from-minibuffer はテキストを読み込み、その結果得られた Lisp オブジェクトを未評価のまま返します。(読み込みに関する情報については、入力関数 を参照してください。)

引数 default は、履歴コマンドで利用可能にするためのデフォルト値を指定します。値は文字列、文字列のリスト、または nil である必要があります。この文字列(または複数の文字列)はミニバッファの「将来の履歴」となり、M-n を通じてユーザーが利用できるようになります。さらに、呼び出し時に補完が提供される場合(例:keymap 引数経由)、M-n によって default の値が使い果たされると、補完候補が「将来の履歴」に追加されます。minibuffer-default-add-function を参照してください。

read が nil 以外の場合、ユーザーが空の入力を行うと、default も read の入力として使用されます。default が文字列のリストである場合、最初の文字列が入力として使用されます。default が nil である場合、空の入力は end-of-file エラーとなります。ただし、通常の場合(read が nil である場合)には、ユーザーが空の入力を行うと read-from-minibuffer は default を無視し、空文字列 "" を返します。この点において、本章の他のすべてのミニバッファ入力関数とは異なります。

keymap が nil 以外の場合、そのキーマップがミニバッファで使用するローカルキーマップとなります。keymap が省略されているか、あるいは nil の場合は、minibuffer-local-map の値がキーマップとして使用されます。キーマップを指定することは、補完などのさまざまな用途に合わせてミニバッファをカスタマイズする上で最も重要な方法です。

引数 history は、入力の保存およびミニバッファで使用される履歴コマンドに用いる履歴リスト変数を指定します。デフォルトは minibuffer-history です。history がシンボル t である場合、履歴は記録されません。また、必要に応じて履歴リストの開始位置を指定することも可能です。ミニバッファ履歴 を参照してください。

変数 minibuffer-allow-text-properties が nil ではなく、ミニバッファ内で let-bound または buffer-local である場合、返される文字列にはミニバッファに存在していたテキストプロパティがすべて含まれます。そうでない場合は、値が返される際にすべてのテキストプロパティが削除されます。(デフォルトでは、この変数は 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 の使用はほぼ非推奨となっています。history にコンスセルを指定する場合に限り、nil 以外の値を使用することを推奨します。初期入力 を参照してください。

関数: read-string prompt &optional initial history default inherit-input-method

この関数はミニバッファから文字列を読み込み、それを返します。引数 prompt、initial、history、inherit-input-method は read-from-minibuffer と同様に使用されます。使用されるキーマップは minibuffer-local-map です。

オプション引数 default は read-from-minibuffer と同様に使用されますが、nil 以外の場合は、ユーザーが null 入力を入力した際に返されるデフォルト値も指定します。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 関数を利用できます。

関数: read-regexp prompt &optional defaults history

この関数は、ミニバッファから正規表現を文字列として読み込み、それを返します。ミニバッファのプロンプト文字列 prompt が ‘:’(その後に任意の空白が続く)で終わっていない場合、デフォルトの戻り値(後述)が空でなければ、その値の前に ‘: ’ を付加します。

オプション引数 defaults は、ユーザーが null 入力を指定した場合に返されるデフォルト値を制御するもので、文字列、空文字列に相当する 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」リストとして提供されます(The GNU Emacs Manual の future list を参照してください)。

オプション引数 history は、nil 以外の場合、使用するミニバッファ履歴リストを指定するシンボルとなります(ミニバッファ履歴 を参照)。省略された場合や nil の場合は、履歴リストはデフォルトで regexp-history となります。

ユーザーは M-s c コマンドを使用して、大文字小文字の変換を有効にするか無効にするかを指定できます。ユーザーがこのコマンドを使用した場合、返される文字列の text プロパティ 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-defaults-function

関数 read-regexp は、この変数の値を用いてデフォルトの正規表現リストを決定する場合があります。nil 以外の場合、この変数の値は以下のいずれかである必要があります:

  • 記号 regexp-history-last。
  • 引数を取らず、nil、文字列、または文字列のリストのいずれかを返す関数。

これらの値の使用方法の詳細については、上記の read-regexp を参照してください。

変数: minibuffer-allow-text-properties

この変数がデフォルトの nil である場合、read-from-minibuffer およびミニバッファ入力を行うすべての関数は、ミニバッファ入力を返す前にそのすべてのテキストプロパティを削除します。

ただし、read-minibuffer および関連関数(ミニバッファを用いた Lisp オブジェクトの読み込み を参照)は、この変数の値にかかわらず、無条件にテキストプロパティを削除します。

この変数が nil ではなく、ミニバッファ内で let-bound または buffer-local である場合、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 プロパティを除くすべてのテキストプロパティが保持されています。

変数: minibuffer-local-map

このは、ミニバッファから読み込む際のデフォルトのローカルキーマップです。デフォルトでは、以下のバインディングが設定されています:

C-j

exit-minibuffer

RET

exit-minibuffer

M-<

minibuffer-beginning-of-buffer

C-g

abort-recursive-edit

M-n
DOWN

next-history-element

M-p
UP

previous-history-element

M-s

next-matching-history-element

M-r

previous-matching-history-element

変数 minibuffer-mode-map は、この変数のエイリアスです。

関数: read-no-blanks-input prompt &optional initial inherit-input-method

この関数はミニバッファから文字列を読み込みますが、入力の一部として空白文字を含めることはできません。代わりに、それらの文字は入力を終了させます。引数 prompt、initial、inherit-input-method は read-from-minibuffer と同様に使用されます。

これはread-from-minibuffer関数への簡略化されたインターフェースであり、minibuffer-local-ns-mapキーマップの値を同関数のkeymap引数として渡します。キーマップminibuffer-local-ns-mapはC-qを再バインドしないため、文字列をクォートすることで中にスペースを入れることが可能です。

変数: minibuffer-local-ns-map

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

SPC

exit-minibuffer

TAB

exit-minibuffer

?

self-insert-and-exit

関数: format-prompt prompt default &rest format-args

変数 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 が nil 以外のリストである場合、リストの最初の要素がプロンプトに使用されます。

prompt と minibuffer-default-prompt-format はどちらも substitute-command-keys を経由します(ドキュメントにおけるキーバインドの置換 を参照)。

変数: read-minibuffer-restore-windows

このオプションが non-nil(デフォルト)の場合、ミニバッファから入力を取得すると、終了時に、ミニバッファが入力されたフレームのウィンドウ構成が復元され、それが異なる場合はミニバッファウィンドウを所有するフレームの構成が復元されます。つまり、例えばユーザーが同じフレーム上でミニバッファから入力を取得している間にウィンドウを分割した場合、ミニバッファを終了する際にその分割が取り消されます。

このオプションが nil の場合、このような復元は行われません。したがって、前述のウィンドウ分割はミニバッファを抜けた後も維持されます。