Estoy tratando de lograr el siguiente comportamiento en Emacs24:
Me gusta usar un tema diferente (solarized-dark vs solarized-light) dependiendo de si me conecto al servidor en ejecución con un marco de terminal
% emacsclient -t
o con un marco gtk
% emacsclient -c
Esto parece haber funcionado en Emacs anteriores, pero en el Emacs actual no pude encontrar una manera. Ya verifiqué SO (por ejemplo, /programming//q/18904529/152439 y respuestas) y las listas de correo (por ejemplo, https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html y https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).
Mi configuración actual se ve así:
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(if (display-graphic-p frame)
(load-theme 'solarized-light t)
(load-theme 'solarized-dark t)
)
)
)
(load-theme 'solarized-light t)
)
El problema con esto es que si tengo un marco gráfico abierto y luego abro un marco terminal con emacsclient -t
, el tema solarized-dark se aplica tanto al nuevo marco terminal (que es correcto) como al marco gráfico ya abierto (que debería dejarse intacto, idealmente). El equivalente ocurre cuando un marco terminal ya está abierto y abro un nuevo marco gráfico con emacsclient -c
.
EDITAR: En caso de que esto no sea posible con Emacs24 actual, ¿hay algún plan para hacerlo posible nuevamente?
color-theme.el
qué IIRC tenía una configuración de color dependiente del marco. No hay una gran ventaja en el uso de las capacidades incorporadas de temas aparte de la ubicuidad.color-theme
y los sistemas de temas Emacs 24. Mi versión del tema solarizado también es compatible con ambos sistemas, si decides seguir esta ruta.Respuestas:
No puedes hacer esto usando diferentes temas. La solución es crear un tema que tenga diferentes definiciones de caras según el terminal. Si observa un ejemplo como
font-lock-comment-face
, verá cómo funciona. En lugar de especificar((class color) (min-colors 88) (background dark))
, también puede especificar(type tty)
o(type graphic)
etc. El manual tiene más información .Supongo que podría escribir una función que tome dos temas y produzca un tema combinado, con caras de un tema asignadas
(type tty)
y caras del otro tema asignadas(type graphic)
donde ambos temas originales se usant
.fuente
color-theme-buffer-local proporciona soporte de temas de buffer-local para los sistemas de temas color-theme y Emacs 24. Mi versión del tema solarizado también es compatible con ambos sistemas, si decides seguir esta ruta.
fuente
Puede definir condiciones para las personalizaciones faciales, como "modo terminal" o "colores mínimos" en el editor de personalización:
Al personalizar una cara, haga clic en el botón [Estado] y seleccione "Mostrar todas las especificaciones de visualización". Luego puede configurar las condiciones para una mayor especialización de la cara.
Aquí hay una variante mínima para establecer el color de fondo en negro cuando el marco es un tty:
fuente