¿Múltiples instancias de Emacs cada una con su propio servidor?

7

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.

Felix Hoffmann
fuente
Edité el título un poco. Parece que está preguntando cómo hacer que varios servidores Emacs se ejecuten simultáneamente. Por favor corrígeme si me equivoqué.
Malabarba
1
Las respuestas aquí probablemente sean de interés: emacs.stackexchange.com/q/41/93
nispio
Si ese es el caso, eliminaré mi respuesta, porque pensé que estaba pidiendo diferentes clientes en diferentes espacios de trabajo.
Boccaperta-IT
@Malabarba ¡Honestamente no estoy seguro! La razón por la que hago la pregunta de manera más amplia es porque no sé si responder la pregunta "¿Cómo puedo tener varios servidores Emacs?" es el enfoque correcto para responder a mi problema "¿Cómo puedo tener varias instancias de Emacs y abrir archivos como buffers en uno de ellos desde la línea de comandos?". Sin embargo, veo que lograr tener múltiples servidores en ejecución podría ser una forma potencial de resolver mi problema.
Felix Hoffmann

Respuestas:

5

Esta respuesta tiene el método general, aunque la pregunta era diferente a la suya.

Puede usar emacs --daemon=workspaceNcombinado con emacsclient -s workspaceNpara 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).

J David Smith
fuente
1
Para agregar a su respuesta, server-namepermite 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 de command-line-args, para simular algo similar a la --daemoninvocación
Sigma
1
@Sigma ¡Gracias! Si bien la --daemonsolució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 -ca emacscliento no, pero no parece ser algo intermedio (que iba a necesitar). ¿Podrías elobarte en tu solución? ¿Cómo puedo configurar server-nameantes de ejecutar server-start(set-variable no hace el truco ya que la variable aún no existe). Una solución init.el, configurando la server-nameaceleración en los argumentos de la línea de comando, sería justo lo que estoy buscando.
Felix Hoffmann
(set-variable 'server-name "foo")trabajó para mi. ¿Te acuerdas de citar server-name? Además: puede usar server-running-ppara verificar si el servidor ya se está ejecutando.
J David Smith
0

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:

  • comenzar emacs --daemonen mi.xinitrc
  • ejecutar emacsclient -cen el espacio de trabajo 2
  • ejecutar emacsclient -ten 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

Boccaperta-IT
fuente
Esto responde a una pregunta diferente: acceder a la misma instancia de Emacs desde diferentes ubicaciones. Pero la pregunta es sobre tener múltiples instancias de Emacs.
Gilles 'SO- deja de ser malvado'
1
Sí, el título del tema cambió después de mi respuesta, así que pensé que la pregunta era sobre múltiples clientes electrónicos. Lo siento.
Boccaperta-IT