История минибуфера
Список истории минибуфера записывает предыдущие вводы минибуфера, чтобы пользователь мог удобно их повторно использовать. Это переменная, значение которой является списком строк (предыдущих вводов), от последних к первым.
Существует множество отдельных списков истории минибуфера, используемых для различных типов вводов. Задача программиста на Lisp — указать правильный список истории для каждого использования минибуфера.
Вы указываете список истории минибуфера с необязательным аргументом history для read-from-minibuffer или completing-read. Вот возможные значения для него:
- variable
-
Используйте variable (символ) в качестве списка истории.
- (variable . startpos)
-
Используйте variable (символ) в качестве списка истории, и предполагайте, что начальная позиция истории — startpos (неотрицательное целое число).
Указание 0 для startpos эквивалентно указанию только символа variable.
previous-history-elementотобразит самый последний элемент списка истории в минибуфере. Если вы укажете положительное значение startpos, функции истории минибуфера будут работать так, как будто(elt variable (1- startpos))был элементом истории, который в данный момент отображается в минибуфере.Для согласованности вы также должны указать этот элемент истории в качестве начального содержимого минибуфера, используя аргумент initial для функции ввода в минибуфер (см. Начальный ввод).
Если вы не указываете history, то используется список истории по умолчанию minibuffer-history. Для других стандартных списков истории см. ниже. Вы также можете создать свой собственный список истории; просто инициализируйте его значением nil перед первым использованием. Если переменная является локальной для буфера, каждый буфер будет иметь свой собственный список истории ввода.
Как read-from-minibuffer, так и completing-read автоматически добавляют новые элементы в список истории и предоставляют команды, позволяющие пользователю повторно использовать элементы из списка. Всё, что вашей программе нужно для использования списка истории, это инициализировать его и передать его имя функциям ввода, когда вам это необходимо. Но безопасно изменять список вручную, когда функции ввода минибуфера им не пользуются.
Функции Emacs, которые добавляют новый элемент в список истории, также могут удалять старые элементы, если список становится слишком длинным. Переменная history-length определяет максимальную длину для большинства списков истории. Чтобы указать другую максимальную длину для определённого списка истории, поместите длину в свойство history-length символа списка истории. Переменная history-delete-duplicates определяет, нужно ли удалять дубликаты в истории.
- Функция: add-to-history history-var newelt &optional maxelt keep-all
-
Эта функция добавляет новый элемент newelt, если он не пустая строка, в список истории, хранящийся в переменной history-var, и возвращает обновлённый список истории. Она ограничивает длину списка значением maxelt (если оно не
nil) илиhistory-length(описано ниже). Возможные значения maxelt имеют такое же значение, как значенияhistory-length. history-var не может ссылаться на локальную переменную.Обычно
add-to-historyудаляет дублирующиеся члены из списка истории, еслиhistory-delete-duplicatesнеnil. Однако, если keep-all неnil, это означает, что не следует удалять дубликаты и добавить newelt в список даже если он пустой.
- Переменная: history-add-new-input
Если значение этой переменной равно
nil, стандартные функции, которые читают из минибуфера, не добавляют новые элементы в список истории. Это позволяет программам Lisp явно управлять историей ввода, используяadd-to-history. Значение по умолчанию —t.
- Пользовательский параметр: history-length
Значение этой переменной определяет максимальную длину для всех списков истории, которые не указывают собственной максимальной длины. Если значение равно
t, это означает, что максимальной длины нет (не удалять старые элементы). Если символ переменной списка истории имеет не-nilhistory-lengthсвойство, оно переопределяет эту переменную для этого конкретного списка истории.
- Пользовательский параметр: history-delete-duplicates
Если значение этой переменной равно
t, это означает, что при добавлении нового элемента истории все предыдущие идентичные элементы удаляются.
Вот некоторые стандартные переменные списка истории минибуфера:
- Переменная: minibuffer-history
Список истории по умолчанию для ввода в минибуфер.
- Переменная: query-replace-history
Список истории для аргументов
query-replace(и аналогичных аргументов других команд).
- Переменная: file-name-history
Список истории для аргументов имён файлов.
- Переменная: buffer-name-history
Список истории для аргументов имён буферов.
- Переменная: regexp-history
Список истории для аргументов регулярных выражений.
- Переменная: extended-command-history
Список истории для аргументов, которые являются именами расширенных команд.
- Переменная: shell-command-history
Список истории для аргументов, которые являются командами оболочки.
- Переменная: read-expression-history
Список истории для аргументов, которые являются выражениями Lisp для вычисления.
- Переменная: face-name-history
Список истории для аргументов, которые являются стилями.
- Переменная: custom-variable-history
Список истории для аргументов имён переменных, считываемых
read-variable.
- Переменная: read-number-history
Список истории для чисел, считываемых
read-number.
- Переменная: goto-line-history
Список истории для аргументов команды
goto-line. Эту переменную можно сделать локальной в каждом буфере, настроив пользовательский параметрgoto-line-history-local.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Minibuffer-History.html