Spec-Zone.ru › Elisp

История минибуфера

Список истории минибуфера хранит предыдущие вводы в минибуфер, чтобы пользователь мог удобно использовать их повторно. Это переменная, значением которой является список строк (предыдущих вводов), расположенных в порядке от самых новых к самым старым.

Существует множество отдельных списков истории минибуфера, используемых для разных типов ввода. Задача программиста на 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API