Я хотел бы использовать set-face-attribute
один из двух цветов для переднего плана в зависимости от того, является ли фон текущей темы светлым или темным.
Ожидаемое поведение заключается в том, что передний план меняется автоматически, если я переключаюсь с темы на светлом фоне на тему на темном фоне или наоборот.
Вот пример использования:
Я настраиваю лицо stripe-hl-line
следующим образом:
(set-face-attribute 'stripe-hl-line nil
:overline "gray"
:underline "gray"
:foreground "dodger blue")
Но я бы хотел изменить передний план, основываясь только на том, светлая или темная тема. Таким образом, мне не нужно беспокоиться о настройке этого лица в каждой теме.
color
библиотеку здесь. Вы могли бы получить rgb или шестнадцатеричное значение фоновой грани, определить пороговое значение для «темного» и соответственно установить передний план.Ответы:
Благодаря @MadhavanKumar я сосредоточился на поиске решения на основе
defface
.Я понял, что не могу переопределить существующее,
defface
но я всегда могу создать свой собственный, чувствительный к цвету фонаdefface
. Тогда единственный вопрос состоял в том, как использовать мою пользовательскую дефекацию вместо оригинальной.Я буду использовать тот же пример переопределения
stripe-hl-line
лица, чтобы пройти через решение. Это лицо определено в упаковкеstripe-buffer
.Вот шаги:
Шаг 1. Определите свой собственный
defface
Это приведет к тому, что цвет переднего плана
my/stripe-hl-line
лица будет более синим для темного фона и красным для светлого фона.Шаг 2. Создайте функцию для переназначения лица
face-remap-add-relative
Функция используется для переназначения существующего лицом к новому лицу. В этом случае я переназначаюstripe-hl-line
лицоmy/stripe-hl-line
.Шаг 3. Сделайте переназначение в соответствующем месте
Из
stripe-buffer
источника я вижу, чтоhl-line
лицо переназначается наstripe-hl-line
лицо. Таким образом, мы должны сделать наше переопределение после того, как это переопределение произойдет (что находится вstripe-listify-buffer
определении функции).Таким образом, мы делаем переотображение, советуя
stripe-listify-buffer
использовать комбинатор.:after
advice
Выполнено!
Тем не менее, было бы здорово использовать что-то наподобие
set-face-attribute
установки граней на основе темного фона.источник