21.6.6 Переменные автодополнения

Ниже приведены некоторые переменные, которые можно использовать для изменения поведения автодополнения по умолчанию.

Пользовательская опция: completion-styles

Значение этой переменной представляет собой список стилей автодополнения (символов), которые используются для выполнения автодополнения. Стиль автодополнения — это набор правил для генерации дополнений. Каждый символ, встречающийся в этом списке, должен иметь соответствующую запись в completion-styles-alist.

Переменная: completion-styles-alist

Эта переменная хранит список доступных стилей автодополнения. Каждый элемент в списке имеет вид

(style try-completion all-completions doc)

Здесь style — это имя стиля автодополнения (символ), которое может использоваться в переменной completion-styles для ссылки на этот стиль; try-completion — это функция, выполняющая автодополнение; all-completions — это функция, перечисляющая дополнения; а doc — это строка, описывающая стиль автодополнения.

Функции try-completion и all-completions должны принимать по четыре аргумента: string, collection, predicate и point. Аргументы string, collection и predicate имеют те же значения, что и в try-completion (см. Функции базового автодополнения), а аргумент point — это позиция курсора внутри string. Каждая функция должна возвращать не-nil значение, если она выполнила свою работу, и nil, если не выполнила (например, если нет способа дополнить string в соответствии со стилем автодополнения).

Когда пользователь вызывает команду автодополнения, такую как minibuffer-complete (см. Команды минибуфера, выполняющие автодополнение), Emacs ищет первый стиль, перечисленный в completion-styles, и вызывает его функцию try-completion. Если эта функция возвращает nil, Emacs переходит к следующему перечисленному стилю автодополнения и вызывает его функцию try-completion, и так далее, пока одна из функций try-completion успешно не выполнит автодополнение и не вернет не-nil значение. Аналогичная процедура используется для перечисления дополнений с помощью функций all-completions.

См. Стили автодополнения в Руководство GNU Emacs для описания доступных стилей автодополнения.

Пользовательская опция: completion-category-overrides

Эта переменная указывает специальные стили автодополнения и другое поведение автодополнения для использования при дополнении определенных типов текста. Ее значение должно быть alist с элементами вида (category . alist). category — это символ, описывающий то, что дополняется; в настоящее время определены категории buffer, file и unicode-name, но другие могут быть определены с помощью специализированных функций автодополнения (см. Программируемое автодополнение). alist — это ассоциативный список, описывающий, как должно вести себя автодополнение для соответствующей категории. Поддерживаются следующие ключи alist:

styles

Значение должно быть списком стилей автодополнения (символов).

cycle

Значение должно быть значением для completion-cycle-threshold (см. Параметры автодополнения в Руководство GNU Emacs) для этой категории.

cycle-sort-function

Функция для сортировки элементов при циклировании.

display-sort-function

Функция для сортировки элементов в буфере *Completions*. Возможные значения: nil, что означает использование либо функции сортировки из метаданных, либо, если она nil, откат к completions-sort; identity, что означает полное отсутствие сортировки, сохраняя исходный порядок; или любое другое значение, не входящее в completions-sort (см. Параметры автодополнения в Руководство GNU Emacs).

group-function

Функция для группировки дополнений.

annotation-function

Функция для добавления аннотаций к дополнениям.

affixation-function

Функция для добавления префиксов и суффиксов к дополнениям.

См. Программируемое автодополнение для полного списка записей метаданных.

Переменная: completion-extra-properties

Эта переменная используется для указания дополнительных свойств текущей команды автодополнения. Она предназначена для установки с помощью специализированных команд автодополнения. Ее значение должно быть списком пар свойство-значение. Поддерживаются следующие свойства:

:category

Значение должно быть символом, описывающим, какой тип текста пытается дополнить функция автодополнения. Если символ соответствует одному из ключей в completion-category-overrides, описанным выше, обычное поведение автодополнения переопределяется.

:annotation-function

Значение должно быть функцией для добавления аннотаций в буфере дополнений. Эта функция должна принимать один аргумент — дополнение, и должна либо вернуть nil, либо строку, которая будет отображена рядом с дополнением. Если эта функция сама не устанавливает собственный фейс для строки суффикса аннотации, то фейс completions-annotations по умолчанию добавляется к этой строке.

:affixation-function

Значение должно быть функцией для добавления префиксов и суффиксов к дополнениям. Эта функция должна принимать один аргумент — список дополнений, и должна вернуть список аннотированных дополнений. Каждый элемент возвращаемого списка должен быть трехэлементным списком: дополнение, строка префикса и строка суффикса. Эта функция имеет приоритет над :annotation-function.

:group-function

Функция для группировки дополнений.

:display-sort-function

Функция для сортировки элементов в буфере *Completions*.

:cycle-sort-function

Функция для сортировки элементов при циклировании.

:exit-function

Значение должно быть функцией, которая выполняется после выполнения автодополнения. Функция должна принимать два аргумента: string и status, где string — это текст, к которому было выполнено дополнение, а status указывает, какой тип операции произошел: finished, если текст теперь завершен; sole, если текст не может быть дополнительно дополнен, но дополнение не завершено; или exact, если текст является действительным дополнением, но может быть дополнительно дополнен.