Spec-Zone.ru › Elisp

Определение лиц

Обычный способ определения лица — через макрос defface. Этот макрос связывает имя лица (символ) со стандартным спецификацией лица. Спецификация лица — это конструкция, которая определяет, какие атрибуты лицо должно иметь на любом терминале; например, спецификация лица может указать один цвет переднего плана на терминалах с высокой цветовой палитрой и другой цвет переднего плана на терминалах с низкой цветовой палитрой.

Иногда люди пытаются создать переменную, значением которой является имя лица. В подавляющем большинстве случаев это не требуется; обычная процедура заключается в определении лица с помощью defface, а затем использовании его имени напрямую.

Обратите внимание, что после определения лица (обычно с помощью defface), вы не можете безопасно удалить это лицо, кроме как перезапустив Emacs.

Макрос: defface спецификация лица документ [ключевое слово значение]…

Этот макрос объявляет лицо как именованное лицо, у которого стандартная спецификация лица задаётся спецификацией. Не нужно заключать символ лицо в кавычки, и он не должен оканчиваться на «-лицо» (это было бы избыточно). Аргумент документ — это строка документации для лица. Дополнительные аргументы ключевое слово имеют те же значения, что и в defgroup и defcustom (см. Общие ключевые слова).

Если у лица уже есть стандартная спецификация лица, этот макрос ничего не делает.

Стандартная спецификация лица определяет внешний вид лица, когда никакие настройки не активны (см. Настройка). Если лицо уже настраивалось (через пользовательские темы или через настройки, прочитанные из файла инициализации), его внешний вид определяется пользовательской спецификацией лица, которая переопределяет стандартную спецификацию лица спецификация. Однако, если настройки будут позже удалены, внешний вид лица снова будет определяться его стандартной спецификацией лица.

В качестве исключения, если вы вычисляете форму defface с помощью C-M-x (eval-defun) или C-x C-e (eval-last-sexp) в режиме Emacs Lisp, особая функция этих команд переопределяет любые пользовательские спецификации лица для лица, заставляя лицо отражать точно то, что говорит defface.

Аргумент спецификация — это спецификация лица, которая определяет, как лицо должно отображаться на разных типах терминалов. Он должен быть списком ассоциаций, элементы которого имеют вид

(display . plist)

отображение указывает класс терминалов (см. ниже). список свойств — это список свойств лица и их значений, определяющий, как лицо отображается на таких терминалах. Для обратной совместимости вы также можете записать элемент как (display plist).

Часть отображение элемента спецификация определяет, какие терминалы соответствует элемент. Если более одного элемента спецификация соответствует данному терминалу, используется первый элемент, который соответствует этому терминалу. Существует три возможности для отображение:

default

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

t

Этот элемент спецификация соответствует всем терминалам. Таким образом, все последующие элементы спецификация никогда не используются. Обычно t используется в последнем (или единственном) элементе спецификация.

список

Если отображение является списком, каждый элемент должен иметь вид (characteristic value…). Здесь характеристика определяет способ классификации терминалов, а значения — это возможные классификации, к которым отображение должно применяться. Вот возможные значения характеристика:

type

Тип системного окна, используемого терминалом — либо graphic (любой графический дисплей), x, pc (для консоли MS-DOS), w32 (для MS Windows 9X/NT/2K/XP) или tty (дисплей без графики). См. система_окна.

class

Типы поддерживаемых цветов терминала — color, grayscale или mono.

background

Тип фона — либо light или dark.

min-colors

Целое число, представляющее минимальное количество цветов, которое должен поддерживать терминал. Это соответствует терминалу, если его значение display-color-cells не меньше указанного целого числа.

supports

Возможность отображения атрибутов лица, указанных в значение… (см. Атрибуты лиц). См. Тестирование атрибутов лица дисплея, для получения дополнительной информации о том, как именно выполняется это тестирование.

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

Например, вот определение стандартного лица highlight:

(defface highlight
  '((((class color) (min-colors 88) (background light))
     :background "darkseagreen2")
    (((class color) (min-colors 88) (background dark))
     :background "darkolivegreen")
    (((class color) (min-colors 16) (background light))
     :background "darkseagreen2")
    (((class color) (min-colors 16) (background dark))
     :background "darkolivegreen")
    (((class color) (min-colors 8))
     :background "green" :foreground "black")
    (t :inverse-video t))
  "Basic face for highlighting."
  :group 'basic-faces)

Внутри Emacs хранит стандартную спецификацию каждого лица в свойстве символа face-defface-spec (см. Свойства символов). Свойство saved-face хранит любую спецификацию лица, сохранённую пользователем с помощью буфера настройки; свойство customized-face хранит спецификацию лица, настроенную для текущего сеанса, но не сохранённую; и свойство theme-face хранит список ассоциаций, связывающий активные настройки настройки и пользовательские темы со спецификациями лица для этого лица. Строка документации лица хранится в свойстве face-documentation.

Обычно лицо объявляется только один раз с помощью defface, и любые дальнейшие изменения в его внешнем виде применяются с помощью фреймворка настройки (например, через интерфейс пользователя настройки или через функцию custom-set-faces; см. Применение настроек) или с помощью переназначения лиц (см. Переназначение лиц). В редких случаях, когда вам нужно изменить спецификацию лица непосредственно из Lisp, вы можете использовать функцию face-spec-set.

Функция: face-spec-set лицо спецификация &optional тип_спецификации

Эта функция применяет спецификацию как спецификацию лица для face. спецификация должна быть спецификацией лица, как описано в документации выше для defface.

Эта функция также определяет лицо как допустимое имя лица, если это ещё не так, и (пере)вычисляет его атрибуты в существующих фреймах.

Необязательный аргумент тип_спецификации определяет, какую спецификацию установить. Если он опущен или равен nil или face-override-spec, эта функция устанавливает переопределяющую спецификацию, которая переопределяет спецификации лица для лица всех других типов, упомянутых ниже. Это полезно при вызове этой функции вне кода настройки. Если тип_спецификации равен customized-face или saved-face, эта функция устанавливает настроенную спецификацию или сохранённую пользовательскую спецификацию соответственно. Если это face-defface-spec, эта функция устанавливает стандартную спецификацию лица (такую же, что и установленная функцией defface). Если это reset, эта функция очищает все пользовательские спецификации и спецификации переопределения для лица (в этом случае значение спецификации игнорируется). Эффект любого другого значения тип_спецификации на спецификации лица предназначен для внутреннего использования, но функция по-прежнему будет определять лицо и перевычислять его атрибуты, как описано выше.

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/Defining-Faces.html

Spec-Zone.ru

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