Spec-Zone.ru › Elisp

Настраиваемые темы

Настраиваемые темы — это наборы настроек, которые можно включать или выключать в качестве единого целого. См. Настраиваемые темы в Справочнике по 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

Spec-Zone.ru

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