История минибуфера
Список истории минибуфера хранит предыдущие вводы в минибуфер, чтобы пользователь мог удобно использовать их повторно. Это переменная, значением которой является список строк (предыдущих вводов), расположенных в порядке от самых новых к самым старым.
Существует множество отдельных списков истории минибуфера, используемых для разных типов ввода. Задача программиста на 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 автоматически добавляют новые элементы в список истории и предоставляют команды, позволяющие пользователю повторно использовать элементы списка (см. Команды минибуфера). Для использования списка истории программе достаточно инициализировать его и при необходимости передавать его имя функциям ввода. Однако список можно безопасно изменять вручную, когда функции ввода в минибуфер его не используют.
По умолчанию, когда M-n (next-history-element, см. следующий элемент истории) достигает конца списка значений по умолчанию, предоставленного командой, которая инициировала чтение ввода из минибуфера, M-n добавляет в список значений по умолчанию все варианты дополнения, определяемые функцией minibuffer-completion-table (см. Команды минибуфера, выполняющие дополнение), чтобы все эти варианты были доступны как «будущая история». Программа может управлять этим с помощью переменной minibuffer-default-add-function: если её значение не является функцией, автоматическое добавление отключено; также можно присвоить этой переменной собственную функцию, добавляющую в «будущую историю» лишь некоторые варианты или другие значения.
Функции 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, это означает отсутствие ограничения (старые элементы не удаляются). Если для символа переменной списка истории задано свойствоhistory-length, отличное отnil, оно переопределяет эту переменную для данного списка истории.
- Пользовательский параметр: 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-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Minibuffer-History.html