ミニバッファーヒストリーリスト(minibuffer history list)は手軽に再利用できるように以前のミニバッファー入力を記録します。ミニバッファーヒストリーリストは、(以前に入力された)文字列のリストであり、もっとも最近の文字列が先頭になります。
多数のミニバッファーが個別に存在し、異なる入力の種類に使用されます。それぞれのミニバッファー使用にたいして正しいヒストリーリストを指定するのはLispプログラマーの役目です。
ミニバッファーヒストリーリストは、read-from-minibuffer
とcompleting-read
のオプション引数historyに指定します。以下が利用できる値です:
ヒストリーリストとしてvariable(シンボル)を使用する。
ヒストリーリストとしてvariable(シンボル)を使用して、ヒストリー位置の初期値をstartpos(負の整数)とみなす。
startposに0を指定するのは、単にシンボルvariableだけを指定するのと等価である。previous-history-element
はミニバッファー内のヒストリーリストの最新の要素を表示するだろう。
正のstartposを指定すると、ミニバッファーヒストリー関数は(elt variable(1-
startpos))
がミニバッファー内でカレントで表示されているヒストリー要素であるかのように振る舞う。
一貫性を保つためにミニバッファー入力関数のinitial引数(入力の初期値を参照)を使用して、ミニバッファーの初期内容となるヒストリー要素も指定すべきである。
historyを指定しない場合には、デフォルトのヒストリーリストminibuffer-history
が使用されます。他の標準的なヒストリーリストについては以下を参照してください。最初に使用する前にnil
に初期化するだけで、独自のヒストリーリストを作成することもできます。変数がバッファーローカルなら各バッファーが独自に入力ヒストリーリストを所有することになります。
read-from-minibuffer
とcompleting-read
は、どちらも新たな要素を自動的にヒストリーリストに追加して、ユーザーがそのリストのアイテムを再使用するためのコマンドを提供します(ミニバッファーのコマンドを参照)。ヒストリーリストを使用するためにプログラムが行う必要があるのはリストの初期化と、使用するときに入力関数にリストの名前を渡すだけです。しかしミニバッファー入力関数がリストを使用していないときに手動でリストを変更しても問題はありません。
デフォルトではM-n (next-history-element
, next-history-elementを参照)によってミニバッファーから入力の読み取りを開始したコマンドが提供デフォルト値の終端に達すると、minibuffer-completion-table
(補完を行うミニバッファーコマンドを参照)で指定されている補完候補すべてがデフォルトのリストに追加されるので、これらの候補がすべて“未来のヒストリー(future
history)”として利用できます。あなたのプログラムは変数minibuffer-default-add-function
を通じてこれを制御することができます。値が関数以外ならこの自動的な追加は無効になります。またはこの変数に独自に関数をセットして一部の候補だけを、あるいは何か他の値を“未来のヒストリー”に追加することもできます。
新たな要素をヒストリーリストに追加するEmacs関数は、リストが長くなりすぎたときに古い要素の削除を行うこともできます。変数history-length
は、ほとんどのヒストリーリストの最大長を指定する変数です。特定のヒストリーリストにたいして異なる最大長を指定するには、そのヒストリーリストのシンボルのhistory-length
プロパティにその最大長をセットします。変数history-delete-duplicates
にはヒストリー内の重複を削除するかどうかを指定します。
この関数はneweltが空文字列でなければ、それを新たな要素として変数history-varに格納されたヒストリーリストに追加して、更新されたヒストリーリストをリターンする。これはmaxeltかhistory-length
がが非nil
なら、リストの長さをその変数の値に制限する(以下参照)。maxeltに指定できる値の意味はhistory-length
の値と同様。history-varはレキシカル変数を参照できない。
add-to-history
は通常はhistory-delete-duplicates
が非nil
ならば、ヒストリーリスト内の重複メンバーを削除する。しかしkeep-allが非nil
なら、それは重複を削除しないことを意味し、たとえneweltが空でもリストに追加する。
この変数の値がnil
なら、ミニバッファーから読み取りを行う標準的な関数はヒストリーリストに新たな要素を追加しない。これによりLispプログラムがadd-to-history
を使用して明示的に入力ヒストリーを管理することになる。デフォルト値はt
。
この変数の値は、最大長を独自に指定しないすべてのヒストリーリストの最大長を指定する。値がt
なら最大長がない(古い要素を削除しない)ことを意味する。ヒストリーリスト変数のシンボルのhistory-length
プロパティが非nil
なら、その特定のヒストリーリストにたいする最大長として、そのプロパティ値がこの変数をオーバーライドする。
この変数の値がt
なら、それは新たなヒストリー要素の追加時に以前からある等しい要素が削除されることを意味する。
以下は標準的なミニバッファーヒストリーリスト変数です:
ミニバッファーヒストリー入力にたいするデフォルトのヒストリーリスト。
query-replace
の引数(と他のコマンドの同様の引数)にたいするヒストリーリスト。
ファイル名引数にたいするヒストリーリスト。
バッファー名引数にたいするヒストリーリスト。
正規表現引数にたいするヒストリーリスト。
拡張コマンド名引数にたいするヒストリーリスト。
シェルコマンド引数にたいするヒストリーリスト。
評価されるためのLisp式引数にたいするヒストリーリスト。
フェイス引数にたいするヒストリーリスト。
read-variable
が読み取る変数名引数にたいするヒストリーリスト。
read-number
が読み取る数値にたいするヒストリーリスト。
goto-line
の引数にたいするヒストリーリスト。ユーザーオプションgoto-line-history-local
をカスタマイズすれば、各バッファーにたいしてこの変数をローカルにできる。