Tema de fondo con opacidad? ¿O devolución de llamada de tema?

7

Dos preguntas relacionadas

  1. ¿Es posible usar opacidad mientras se tematiza en emacs? Me refiero a definir un tema que, por ejemplo, agregaría un 25% de azul al color de fondo de los elementos a los que se aplica. O lo que haría que la fuente sea un 30% más ligera.

O si no.

  1. ¿Es posible recalcular dinámicamente algunas propiedades del tema cada vez que cambia el tema personalizado principal?

Antecedentes

Tal cosa sería genial para varios modos de "agregar una marca". Un caso al que me refiero específicamente es la cara de error de verificación, que sería menos invasiva si le diera un ligero acento rojo al fondo en lugar de subrayar el texto.

Pero mi caso principal es el modo de punto de mira (que combina resaltar la fila actual y la columna actual). Lo configuré para usar un fondo ligeramente diferente al predeterminado, y eso creó una buena indicación sutil de la ubicación del cursor. Pero una vez que comencé a cambiar los temas con más frecuencia, resultó ser una molestia, ya que el color adecuado depende del fondo actual.

Mekk
fuente
Aquí hay una idea: las funciones gamgrid-colory gamegrid-colorize-glyphdentro gamegrid.eles un ejemplo combinado donde el sombreado se puede usar para crear diferentes niveles de coloración, por ejemplo, los tonos utilizados 0.6 o 0.8 o 1.0 (a todo color). El color que se desea cambiar dentro de un tema se puede hacer mediante programación al convertir el color a un vector de 3 elementos utilizando la función color-name-to-rgbde color.el. La función face-remap-add-relativese puede usar para crear una cara local de búfer particular: gnu.org/software/emacs/manual/html_node/elisp/…
lawlist
En ciertos sistemas operativos, el modo de retículos se puede hacer para utilizar una vline-stylede 'compose[Char uso composit] o 'mixed[cara uso y composit Char] para crear una huelga-a través del efecto vertical. El valor por defecto es 'face. Las vline-styleopciones 'composey el 'mixedfuncionamiento de la caja en Windows, pero no funcionan en OSX. El efecto de tachado vertical con 'composeno usa una cara, y eso quizás resolvería su problema con la coloración del fondo que interfiere al ver la línea vertical.
leyes

Respuestas:

2

Finalmente encontré una solución más o menos satisfactoria. Aún así, no estoy seguro de si es perfecto.

1) La biblioteca hexrgb.el proporciona buenas funciones para realizar cálculos de color reales. Por ejemplo:

(hexrgb-increment-green (face-background 'default) 2 20)

calcula el color que es un poco más verde que el fondo actual (en los parámetros anteriores, 2 es cuántos dígitos tiene cada color y 20 es el cambio relativo).

2) Luego le aconsejé a load-theme (mientras escribía esto me pareció que este no era el mejor lugar y que algunas API de nivel inferior, enable-theme o sth aún más profundas, podrían ser mejores) para cambiar varios atributos de hl-line y col-resaltar caras después de que el tema cambió (tuve que establecer el color real, pero también borrar: heredar).

Mekk
fuente