Список истории минибуфера сохраняет предыдущие вводы в минибуфер, чтобы пользователь мог удобно повторно их использовать. Это переменная, значение которой является списком строк (предыдущих вводов), где самые последние находятся в начале.
Существует множество отдельных списков истории минибуфера, используемых для разных видов ввода. Задача программиста на Lisp — указать правильный список истории для каждого использования минибуфера.
Вы указываете список истории минибуфера с помощью необязательного аргумента
history для read-from-minibuffer или completing-read.
Вот возможные значения для него:
Использовать variable (символ) в качестве списка истории.
Использовать variable (символ) в качестве списка истории и считать, что начальная позиция истории равна startpos (неотрицательное целое число).
Указание 0 для startpos эквивалентно простому указанию символа
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) достигает конца
списка значений по умолчанию, предоставленных командой, инициировавшей чтение
ввода из минибуфера, M-n добавляет все варианты завершения,
заданные с помощью minibuffer-completion-table (см. Команды минибуфера, выполняющие завершение),
в список значений по умолчанию, чтобы все эти варианты были доступны в качестве
«будущей истории». Ваша программа может управлять этим через переменную
minibuffer-default-add-function: если её значение не является функцией,
это автоматическое добавление отключается, и вы также можете установить эту
переменную в свою собственную функцию, которая добавляет только некоторые
варианты или другие значения в «будущую историю».
Функции Emacs, которые добавляют новый элемент в список истории, также могут
удалять старые элементы, если список становится слишком длинным. Переменная
history-length задаёт максимальную длину для большинства списков
истории. Чтобы задать другую максимальную длину для конкретного списка истории,
поместите значение длины в свойство history-length символа списка
истории. Переменная history-delete-duplicates определяет, следует ли
удалять дубликаты в истории.
Эта функция добавляет новый элемент newelt, если он не является пустой
строкой, в список истории, хранящийся в переменной history-var,
и возвращает обновлённый список истории. Она ограничивает длину списка
значением maxelt (если не nil) или history-length
(описано ниже). Возможные значения 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, оно переопределяет эту переменную для данного
конкретного списка истории.
Если значение этой переменной равно t, это означает, что при
добавлении нового элемента истории все предыдущие идентичные элементы
удаляются.
Вот некоторые из стандартных переменных списков истории минибуфера:
Список истории по умолчанию для ввода истории минибуфера.
Список истории для аргументов query-replace (и аналогичных
аргументов других команд).
Список истории для аргументов — имён файлов.
Список истории для аргументов — имён буферов.
Список истории для аргументов — регулярных выражений.
Список истории для аргументов — имён расширенных команд.
Список истории для аргументов — команд оболочки.
Список истории для аргументов — выражений Lisp для вычисления.
Список истории для аргументов — имён лиц (faces).
Список истории для аргументов — имён переменных, читаемых с помощью
read-variable.
Список истории для чисел, читаемых с помощью read-number.
Список истории для аргументов goto-line. Эта переменная может
быть сделана локальной в каждом буфере путём настройки пользовательской опции
goto-line-history-local.