Por lo general, inicio emacs con la GUI e inicio un servidor de inmediato (server-start)
. Ahora puedo abrir fácilmente documentos en mi sesión de emacs existente desde la terminal a través emacsclient -n <file>
o desde el Explorador de archivos.
Sin embargo, de vez en cuando, quiero ejecutar emacs dentro de mi terminal usando emacsclient -t
. Esto sucede con mayor frecuencia al escribir registros de confirmación de git o al realizar otras tareas muy pequeñas. En esos casos, el hecho de que mi archivo init se haya cargado en una instancia de GUI de emacs significa que no obtengo ninguna de mis personalizaciones que sean específicas de TTY emacs.
Sé que puedo correr
emacs -nw -q -l "some-custom-init-file.el"
pero eso recargará todos los paquetes cada vez. ¿Puedo tener lo mejor de ambos mundos? ¿Hay alguna manera de configurar un "demonio TTY" para que pueda usar personalizaciones separadas para ejecutar dentro del terminal en lugar de visitar el archivo en una ventana de emacs existente?
(setq linum-format "%d ")
el archivo de personalización TTY. Además, mi tema de color siempre se ve extraño en el modo TTY, por lo que definitivamente elegiré un tema diferente para el TTY. En realidad no tengo tantas diferencias en este momento, pero ahora que sé que puedo tener diferentes servidores, la lista puede crecer.M-x report-emacs-bug
solicite nuevas funciones, como la posibilidad de tener diferentes temas de cara en TTY y en marcos de GUI (en realidad, un tema puede especificar colores completamente diferentes para esos diferentes tipos de marcos, por lo que también puede ajustar su tema) . Usar varios demonios para esos casos separados es solo una solución para la falta de funcionalidad correspondiente en Emacs.Respuestas:
Úselo
emacs --daemon=your-server-name -l "custom-init-file"
para iniciar un nuevo servidor yemacsclient -nw -s your-server-name
para conectarse desde el mismo terminal. La sección sobre el uso de Emacs como servidor en el manual tiene más opciones de inicialización.fuente
-q
interruptor para mantener mi defectoinit.el
de funcionamiento antes de que el archivo de inicio personalizado.)emacsclient -s your-server-name -e "(kill-emacs)"
lo que quieres? Lo anterior solo llama a emacsclient y evals(kill-emacs)
. Podrías reemplazar(kill-emacs)
con(save-buffers-kill-emacs)
también.-q
Además de la respuesta de @ Vamsi, puede obtener muchos de los mismos beneficios mientras ejecuta un solo servidor adjuntando consejos a
make-frame-command
.Por ejemplo, mientras se ejecuta en la terminal, quiero que el color de fondo sea
black
(que se asigna#202020
) pero quiero usarlo#202020
en modo gráfico. Implementé esto con:Puede obtener mucho kilometraje de esto usando
make-variable-frame-local
(set-background-color
en lo anterior ya es frame-local).No sé si este es el mejor patrón, pero si tiene relativamente pocas diferencias entre el modo TTY y el modo X de Emacs, puede facilitar la administración de la configuración.
El código anterior fue extraído de mi .emacs.d .
fuente
(display-graphic-p)
dat
si el marco actual es gráfico, de lonil
contrario. Debido a que los cuadros no pueden moverse entre gráficos y no (afaik), adjuntar consejos a la creación de cuadros asegura que se alcance el estado deseado para el cuadro dado.No necesita un consejo para cambiar la configuración de diferentes marcos que se ejecutan en el mismo demonio emacs. Solo usa el gancho
after-make-frame-functions
asíDefinirlo de esta manera tiene la ventaja adicional de que establece la configuración de cuadro deseada, incluso si no comienza en modo demonio.
Desafortunadamente, el
load-theme
marco no es local y, por lo tanto, los otros cuadros también se colorean si realmente usa diferentes temas para texto y cuadros gráficos.Información adicional: configure sus terminales con al menos 256 colores para obtener la sensación real del tema seleccionado. Use una configuración como esta en uno de sus archivos de inicio de shell:
fuente