Настраиваемые темы
Настраиваемые темы — это наборы настроек, которые можно включать или выключать в качестве единого целого. См. Настраиваемые темы в Справочнике по GNU Emacs. Каждая настраиваемая тема определяется файлом исходного кода Emacs Lisp, который должен соответствовать соглашениям, описанным в этом разделе. (Вместо написания настраиваемой темы вручную, вы также можете создать её с помощью интерфейса типа Customize; см. Создание настраиваемых тем в Справочнике по GNU Emacs.)
Файл настраиваемой темы должен иметь имя foo-theme.el, где foo — имя темы. Первая форма Lisp в файле должна быть вызовом deftheme, а последняя форма — вызовом provide-theme.
- Макрос: deftheme theme &optional doc
-
Этот макрос объявляет theme (символ) как имя настраиваемой темы. Необязательный аргумент doc должен быть строкой, описывающей тему; это описание, отображаемое, когда пользователь вызывает команду
describe-themeили набирает ? в буфере ‘*Настраиваемые темы*’.Два специальных имени тем запрещены (их использование вызывает ошибку):
user— это фиктивная тема, которая хранит прямые настройки пользователя, иchanged— это фиктивная тема, которая хранит изменения, внесённые вне системы Customize.
- Макрос: provide-theme theme
Этот макрос объявляет, что тема с именем theme полностью задана.
Между deftheme и provide-theme находятся формы Lisp, определяющие настройки темы: обычно вызов custom-theme-set-variables и/или вызов custom-theme-set-faces.
- Функция: custom-theme-set-variables theme &rest args
-
Эта функция задаёт настройки переменных настраиваемой темы theme. theme должен быть символом. Каждый аргумент в args должен быть списком вида
(var expression [now [request [comment]]])
где элементы списка имеют то же значение, что и в
custom-set-variables. См. Применение настроек.
- Функция: custom-theme-set-faces theme &rest args
-
Эта функция задаёт настройки стилей настраиваемой темы theme. theme должен быть символом. Каждый аргумент в args должен быть списком вида
(face spec [now [comment]])
где элементы списка имеют то же значение, что и в
custom-set-faces. См. Применение настроек.
В теории, файл темы может также содержать другие формы Lisp, которые будут вычисляться при загрузке темы, но это плохая практика. Для защиты от загрузки тем, содержащих вредоносный код, Emacs отображает исходный файл и запрашивает подтверждение от пользователя перед загрузкой любой не встроенной темы в первый раз. Таким образом, темы обычно не компилируются в байт-код, а файлы исходного кода обычно имеют приоритет, когда Emacs ищет тему для загрузки.
Следующие функции полезны для программного включения и выключения тем:
- Функция: custom-theme-p theme
Эта функция возвращает значение, отличное от
nil, если theme (символ) — имя настраиваемой темы (т. е. настраиваемая тема, которая была загружена в Emacs, вне зависимости от того, включена ли тема). В противном случае она возвращаетnil.
- Переменная: custom-known-themes
Значение этой переменной — список тем, загруженных в Emacs. Каждая тема представлена символом Lisp (именем темы). Значение по умолчанию этой переменной — список, содержащий две фиктивные темы:
(user changed). Темаchangedхранит настройки, сделанные до применения любых настраиваемых тем (например, переменные, заданные вне Customize). Темаuserхранит настройки, настроенные и сохранённые пользователем. Любые дополнительные темы, объявленные с помощью макросаdeftheme, добавляются в начало этого списка.
- Команда: load-theme theme &optional no-confirm no-enable
Эта функция загружает настраиваемую тему с именем theme из её файла исходного кода, ища файл исходного кода в каталогах, указанных переменной
custom-theme-load-path. См. Настраиваемые темы в Справочнике по GNU Emacs. Она также *включает* тему (если необязательный аргумент no-enable не являетсяnil), заставляя её настройки переменных и стилей вступить в силу. Она запрашивает у пользователя подтверждение перед загрузкой темы, если необязательный аргумент no-confirm не равенnil.
- Функция: require-theme feature &optional noerror
-
Эта функция ищет
custom-theme-load-pathфайл, предоставляющий feature, а затем загружает его. Это похоже на функциюrequire(см. Именованные функции), за исключением того, что она ищетcustom-theme-load-pathвместоload-path(см. Поиск библиотек). Это может быть полезно в настраиваемых темах, которым необходимо загружать вспомогательные файлы Lisp, когдаrequireнепригоден для этого.Если feature, которое должно быть символом, ещё не присутствует в текущей сессии Emacs в соответствии с
featurep, тоrequire-themeищет файл с именем feature с добавлением суффикса ‘.elc’ или ‘.el’ в указанном порядке в каталогах, указанных вcustom-theme-load-path.Если файл, предоставляющий feature, успешно найден и загружен, то
require-themeвозвращает feature. Необязательный аргумент noerror определяет, что произойдёт в случае неудачи поиска или загрузки. Если он равенnil, функция сигнализирует об ошибке; в противном случае она возвращаетnil. Если файл загружается успешно, но не предоставляет feature, тоrequire-themeсигнализирует об ошибке; это не может быть подавлено.
- Команда: enable-theme theme
Эта функция включает настраиваемую тему с именем theme. Она сигнализирует об ошибке, если такая тема не была загружена.
- Команда: disable-theme theme
Эта функция выключает настраиваемую тему с именем theme. Тема остаётся загруженной, так что последующий вызов
enable-themeснова включит её.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Custom-Themes.html