ミニバッファ履歴リストは、ユーザーが便利に再利用できるよう、過去のミニバッファ入力を記録します。これは、値として文字列(過去の入力)のリスト(新しい順)を持つ変数です。
さまざまな種類の入力に対応するため、個別のミニバッファ履歴リストが多数用意されています。ミニバッファを使用する場面ごとに適切な履歴リストを指定するのが、Lispプログラマの役割です。
read-from-minibuffer または completing-read のオプション引数 history
で、ミニバッファ履歴リストを指定します。指定可能な値は以下の通りです。
履歴リストとして variable(記号)を使用してください。
履歴リストとして variable(記号)を使用し、初期の履歴位置を startpos(非負整数)とする。
startpos に 0 を指定することは、単にシンボル variable を指定することと同等です。previous-history-element
を指定すると、履歴リストの最新の要素がミニバッファに表示されます。正の値である startpos
を指定すると、ミニバッファの履歴機能は、あたかも (elt variable (1- startpos))
が現在ミニバッファに表示されている履歴要素であるかのように動作します。
一貫性を保つため、minibuffer入力関数のinitial引数を用いて、履歴のその要素を初期ミニバッファ内容として指定することも推奨されます(初期入力を参照)。
history を指定しない場合は、デフォルトの履歴リスト minibuffer-history
が使用されます。その他の標準的な履歴リストについては、以下を参照してください。また、独自の履歴リスト変数を作成することも可能です。その場合は、初回使用前に
nil
で初期化してください。変数がバッファローカルである場合、各バッファに個別の入力履歴リストが用意されます。
read-from-minibuffer と completing-read
はいずれも履歴リストに新しい要素を自動的に追加し、ユーザーがリスト内の項目を再利用するためのコマンドを提供します(ミニバッファコマンドを参照)。履歴リストを利用するためにプログラムが行う必要があるのは、リストを初期化し、必要に応じてその名前を入力関数に渡すことだけです。ただし、ミニバッファ入力関数がリストを使用していないときは、手動でリストを変更しても問題ありません。
デフォルトでは、M-n(next-history-element、next-history-elementを参照)が、ミニバッファからの入力読み取りを開始したコマンドによって提供されたデフォルト値のリストの末尾に達すると、M-nはminibuffer-completion-table(Minibuffer Commands that Do
Completionを参照)で指定されたすべての補完候補をデフォルト値のリストに追加し、それらすべての候補が「将来の履歴」として利用可能になります。プログラムは変数minibuffer-default-add-functionを通じてこれを制御できます。この変数の値が関数でない場合、この自動追加は無効になります。また、この変数に独自の関数を設定して、一部の候補やその他の値のみを「将来の履歴」に追加することも可能です。
履歴リストに新しい要素を追加するEmacs関数は、リストが長くなりすぎた場合に古い要素を削除することもできます。変数 history-length
は、ほとんどの履歴リストにおける最大長を指定します。特定の履歴リストに別の最大長を指定するには、その履歴リストシンボルの history-length プロパティに長さを記述します。変数 history-delete-duplicates は、履歴内の重複を削除するかどうかを指定します。
この関数は、空文字列でない場合に新しい要素 newelt を変数 history-var に格納された履歴リストに追加し、更新後の履歴リストを返します。リストの長さは、maxelt(nil でない場合)または history-length(後述)の値に制限されます。maxelt に指定可能な値は、history-length
の値と同じ意味を持ちます。history-var は字句変数を参照することはできません。
通常、history-delete-duplicates が nil 以外の場合、add-to-history
は履歴リストから重複したメンバーを削除します。ただし、keep-all が nil 以外の場合は、重複を削除せず、たとえ空であっても newelt をリストに追加することを意味します。
この変数の値が nil
の場合、ミニバッファから読み込む標準関数は履歴リストに新しい要素を追加しません。これにより、Lispプログラムは add-to-history を用いて入力履歴を明示的に管理できます。デフォルト値は t です。
この変数の値は、独自の最大長を指定していないすべての履歴リストにおける最大長を規定します。値が t
の場合、最大長は設定されていない(古い要素は削除されない)ことを意味します。履歴リスト変数のシンボルが nil または history-length
以外のプロパティを持つ場合、その特定の履歴リストに関してはこの変数よりも優先されます。
この変数の値が t
の場合、新しい履歴要素を追加する際に、それまでの同一要素がすべて削除されることを意味します。
標準的なミニバッファ履歴リスト変数をいくつか挙げます:
ミニバッファ履歴入力用のデフォルト履歴リスト。
query-replace への引数(および他のコマンドへの同様の引数)の履歴一覧。
ファイル名引数の履歴リスト。
バッファ名引数の履歴リスト。
正規表現引数の履歴リスト。
拡張コマンド名である引数の履歴リスト。
シェルコマンドである引数の履歴リスト。
評価対象のLisp式である引数の履歴リスト。
顔である論証の履歴リスト。
read-variable で読み込まれる変数名引数の履歴リスト。
read-number で読み取られる数値の履歴リスト。
goto-line への引数の履歴リスト。この変数は、ユーザーオプション goto-line-history-local
をカスタマイズすることで、すべてのバッファでローカルに設定できます。