Me gustaría utilizar set-face-attribute
para elegir uno de los dos colores para el primer plano dependiendo de si el fondo del tema actual es claro u oscuro.
El comportamiento esperado es que el primer plano cambia automáticamente si cambio de un tema de fondo claro a un tema de fondo oscuro o viceversa.
Aquí hay un caso de uso:
Personalizo la cara de la stripe-hl-line
siguiente manera:
(set-face-attribute 'stripe-hl-line nil
:overline "gray"
:underline "gray"
:foreground "dodger blue")
Pero me gustaría cambiar el primer plano en función de si el tema es claro u oscuro. De esa manera no tengo que preocuparme por personalizar esa cara en cada tema.
color
biblioteca aquí. Probablemente podría obtener el valor rgb o hexadecimal de la cara de fondo, determinar un valor umbral para "oscuro" y establecer el primer plano en consecuencia.Respuestas:
Gracias a @MadhavanKumar, me centré en derivar una solución basada en
defface
.Me di cuenta de que no puedo anular una existente,
defface
pero siempre puedo crear mi propio color de fondo sensibledefface
. Entonces, la única pregunta era cómo usar mi defface personalizada en lugar de la original.Usaré el mismo ejemplo de anular la
stripe-hl-line
cara para analizar la solución. Esta cara se define en el paquetestripe-buffer
.Aquí están los pasos:
Paso 1. Define tu propio
defface
Esto dará como resultado que el color de primer plano de la
my/stripe-hl-line
cara sea azul para fondos oscuros y rojo para fondos claros.Paso 2. Crea una función para reasignar la cara
La
face-remap-add-relative
función se utiliza para reasignar una cara existente a una nueva cara. En este caso, estoy reasignando lastripe-hl-line
cara amy/stripe-hl-line
.Paso 3. Haz la reasignación en la ubicación adecuada
Desde la
stripe-buffer
fuente, veo que lahl-line
cara se reasigna a lastripe-hl-line
cara. Entonces necesitamos hacer nuestra reasignación después de que ocurra esa reasignación (que está en lastripe-listify-buffer
definición de la función).Entonces hacemos nuestra reasignación aconsejando
stripe-listify-buffer
usar el combinador.:after
advice
¡Hecho!
Dicho esto, hubiera sido increíble usar directamente algo como
set-face-attribute
poner caras basadas en la oscuridad del fondo.fuente