При определении переменной, значение которой является функцией или списком функций, используйте имя, оканчивающееся на ‘-function’ или ‘-functions’ соответственно.
Существуют и другие соглашения об именовании переменных; вот полный список:
Переменная является обычной хуком (см. Хуки).
Значение является функцией.
Значение является списком функций.
Значение является формой (выражением).
Значение является списком форм (выражений).
Значение является предикатом — функцией с одним аргументом, которая возвращает
не-nil при успехе и nil при неудаче.
Значение важно только в том, является ли оно nil или нет.
Поскольку такие переменные часто со временем приобретают больше значений,
это соглашение не рекомендуется в полной мере.
Значение является именем программы.
Значение является всей командной строкой оболочки.
Значение указывает опции для команды.
Переменная предназначена для внутреннего использования и определяется в файле prefix.el. (Код Emacs, внесенный до 2018 года, может следовать другим соглашениям, которые выводятся из употребления.)
Переменная предназначена для внутреннего использования и определяется в коде C. (Код Emacs, внесенный до 2018 года, может следовать другим соглашениям, которые выводятся из употребления.)
При определении переменной всегда учитывайте, следует ли помечать ее как безопасную или рискованную; см. Локальные переменные файла.
При определении и инициализации переменной, которая хранит сложное
значение (например, таблицу синтаксиса для основного режима), лучше всего поместить
в defvar всю вычисление значения, как здесь:
(defvar my-major-mode-syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
…
table)
docstring)
Этот метод имеет несколько преимуществ. Во-первых, если пользователь выходит, пока
файл загружается, переменная либо все еще не инициализирована, либо
инициализирована должным образом, никогда не находится в промежуточном состоянии.
Если она все еще не инициализирована, повторная загрузка файла инициализирует ее
должным образом. Во-вторых, повторная загрузка файла после инициализации
переменной не изменит ее; это важно, если пользователь изменил ее значение.
В-третьих, вычисление формы defvar с помощью C-M-x
полностью переинициализирует переменную.