¿Cómo puedo hacer emacsclient -a '' -n
crear un nuevo marco solo si todavía no hay uno?
El problema con la -c
bandera es que crea un nuevo marco cada vez. El problema sin esto es que si no hay un marco abierto, se abrirá en la línea de comando.
Si puedo verificar si hay un marco abierto de Emacs desde el shell, puedo llamar con o sin -c
depender de eso para obtener el comportamiento que quiero. Lo intenté:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Siempre obtengo el mismo resultado.
Podría usar archivos temporales o pgrep, pero esos enfoques son muy propensos a errores.
Esto es similar a esta pregunta , pero no es un duplicado, ya que el OP allí estaba satisfecho con tener un marco abierto antes de llamar emacsclient
.
frames
emacsclient
x11
spelufo
fuente
fuente
elisp
,bash
ysh
respuestas.Respuestas:
Terminé haciendo este script basado en esto
Si no hay pantalla, se abre con
-nw
. Si$DISPLAY
está configurado, busca marcos en esa pantalla para ver si necesita hacer uno nuevo.Editar: lo modifiqué para que pueda especificar manualmente
-nw
si desea abrir en un terminal, incluso si hay una pantalla.fuente
$@
debe ser citado .Puedes usar:
para verificar si el servidor Emacs
"server_name"
ya se está ejecutando. Si el comando devuelve el código de salida 0, se está ejecutando. Si es así, solo use elemacsclient
comando:Si no se está ejecutando, puede abrir un nuevo servidor Emacs con, por ejemplo:
fuente
emacsclient -a ''
iniciaemacs --daemon
si es necesario, lo que persiste incluso si cierra el shell.&
en cuenta el al final del comando; significa ejecutar el servidor como un proceso en segundo plano ..C-d
).server-start
inicia el servidor como proceso de daemon. ¿Qué obtienes si inicias emacs de esa manera y luego cierras todos los emacs y terminales, luego abres una nueva terminal y correspgrep emacs
?C-d
. Intenté esto ahora usandognome-terminal
Ubuntu 14.10 .. ¿Creo que te refieres a una instancia en ejecución después de cerrar todos los marcos de Emacs? Entonces, eso requeriría un proceso de demonio, sí ..