En mi configuración, tengo varias instancias de Emacs (GNU) ejecutándose simultáneamente en mi máquina local, una para cada proyecto o tarea en la que estoy trabajando actualmente.
Me gustaría poder abrir buffers en una instancia de Emacs que ya se está ejecutando, por ejemplo, mediante un comando como
$ emacs file.txt
La solución típicamente sugerida para esto es ejecutar Emacs en modo servidor. Sin embargo, esto entra en conflicto con mi uso de varias instancias de Emacs, ya que entiendo que, de forma predeterminada, solo un único cliente de emacs puede estar activo en cualquier momento.
¿Cómo puedo abrir archivos como buffers en instancias Emacs existentes (posiblemente múltiples)? El objetivo final es abrir el archivo en la instancia de Emacs que se encuentra en el espacio de trabajo actual (Compiz), o crear dicha instancia si aún no existe.
fuente
Respuestas:
Esta respuesta tiene el método general, aunque la pregunta era diferente a la suya.
Puede usar
emacs --daemon=workspaceN
combinado conemacsclient -s workspaceN
para tener un demonio emacs en el espacio de trabajo N. Si necesita múltiples, simplemente haga el espacio de trabajo1, el espacio de trabajo2, etc. Tenga en cuenta que el nombre del demonio es completamente arbitrario y puede usar el esquema de nomenclatura que desee.Determinar en qué espacio de trabajo se encuentra probablemente será más difícil, y no sé cómo determinarlo. Si tiene una variable de entorno, entonces un alias o función de shell probablemente sea suficiente (si solo desea abrir cosas a través de shell).
fuente
server-name
permite hacer lo mismo sin tener que usar un demonio Emacs. Solo configúralo antes de correr(server-start)
. Es posible establecerlo en un valor dependiendo del valor decommand-line-args
, para simular algo similar a la--daemon
invocación--daemon
solución funciona en principio, ahora tengo algunos problemas con la última parte de mi pregunta, "... o para crear una instancia de este tipo si aún no existe". Me puede pasar ya sea-c
aemacsclient
o no, pero no parece ser algo intermedio (que iba a necesitar). ¿Podrías elobarte en tu solución? ¿Cómo puedo configurarserver-name
antes de ejecutarserver-start
(set-variable no hace el truco ya que la variable aún no existe). Una solución init.el, configurando laserver-name
aceleración en los argumentos de la línea de comando, sería justo lo que estoy buscando.(set-variable 'server-name "foo")
trabajó para mi. ¿Te acuerdas de citarserver-name
? Además: puede usarserver-running-p
para verificar si el servidor ya se está ejecutando.Hasta donde yo sé, puede usar Emacs en modo servidor para obtener lo que está buscando. A menudo tengo varias instancias de emacsclient en diferentes espacios de trabajo, lo que, por ejemplo, me permite compartir fácilmente buffers entre ellos.
Esto es lo que hago:
emacs --daemon
en mi.xinitrc
emacsclient -c
en el espacio de trabajo 2emacsclient -t
en el espacio de trabajo 1 (cuando generalmente mantengo un tmux a pantalla completa)Puedo editar buffers en cada instancia, moviéndome rápidamente de término a GUI y viceversa.
Puede encontrar más enfoques en Iniciar dos demonios emacs separados para consola y GUI
fuente