39.2 Определение аббревиатур

define-abbrev — это низкоуровневая базовая функция для определения аббревиатуры в таблице аббревиатур.

Когда основной режим определяет системную аббревиатуру, он должен вызывать define-abbrev и указывать t для свойства :system. Имейте в виду, что любые сохранённые несистемные аббревиатуры восстанавливаются при запуске, то есть до загрузки некоторых основных режимов. Следовательно, основные режимы не должны предполагать, что их таблицы аббревиатур пусты при первой загрузке.

Функция: define-abbrev abbrev-table name expansion &optional hook &rest props

Эта функция определяет аббревиатуру с именем name в abbrev-table, которая раскрывается в expansion и вызывает hook, со свойствами props (см. Свойства аббревиатур). Возвращаемое значение — name. Свойство :system в props обрабатывается особым образом: если оно имеет значение force, то оно перезапишет существующее определение, даже для несистемной аббревиатуры с тем же именем.

name должно быть строкой. Аргумент expansion обычно представляет собой желаемое раскрытие (строку) или nil для отмены определения аббревиатуры. Если это не строка и не nil, то аббревиатура раскрывается исключительно путём выполнения hook.

Аргумент hook — это функция или nil. Если hook не равен nil, то он вызывается без аргументов после замены аббревиатуры на expansion; точка находится в конце expansion во время вызова hook.

Если hook — это не равный nil символ, свойство no-self-insert которого не равно nil, то hook может явно управлять тем, будет ли вставлен самовставляющийся вводимый символ, вызвавший раскрытие. Если в этом случае hook возвращает не nil, это предотвращает вставку символа. Напротив, если hook возвращает nil, то expand-abbrev (или abbrev-insert) также возвращает nil, как если бы раскрытия на самом деле не произошло.

Обычно define-abbrev устанавливает переменную abbrevs-changed в t, если она действительно изменяет аббревиатуру. Это сделано для того, чтобы некоторые команды предлагали сохранить аббревиатуры. Для системной аббревиатуры этого не делается, поскольку они всё равно не сохраняются.

Параметр пользователя: only-global-abbrevs

Если эта переменная не равна nil, это означает, что пользователь планирует использовать только глобальные аббревиатуры. Это указывает командам, определяющим зависящие от режима аббревиатуры, определять вместо них глобальные. Эта переменная не изменяет поведение функций в данном разделе; она проверяется их вызывающими программами.