El server-running-p
predicado evaluará t
si el servidor Emacs se está ejecutando, independientemente de qué sesión de Emacs "posea" actualmente el proceso del servidor.
Por lo tanto, cuando hay dos o más sesiones independientes de Emacs ejecutándose simultáneamente, server-running-p
realmente no se prueba si la sesión actual de Emacs está ejecutando el servidor.
Estoy buscando una prueba más específica, una que evalúe t
si y solo si la sesión actual (es decir, la sesión que realiza la prueba) está ejecutando el servidor Emacs.
server-start
y despuésserver-force-delete
),server-mode
siempre fue asínil
.(server-mode 1)
lugar de llamar(server-start)
. El primero invoca al segundo, yserver-force-delete
también verifica y deshabilita este modo, por lo que parece quesever-mode
es la interfaz deseada, y no deberíamos llamarserver-start
directamente.server-mode
aún no tiene en cuenta el mismo servidor que se inicia y elimina a través de múltiples instancias de Emacs, ya que eliminar el servidor de una instancia no tiene ningún efecto sobre el valor deserver-mode
otra.Respuestas:
Puede verificar:
Eso debería funcionar siempre que haya evitado iniciar un servidor en otras instancias.
Suponiendo un servidor basado en sockets, si tuviera que iniciar una segunda instancia de Emacs y eliminar por la fuerza y luego reiniciar el proceso del servidor desde esa segunda instancia, el código anterior aún devolverá un valor nulo en la instancia original (como el mismo socket el directorio estará en uso), dejándolo en la situación original.
(Obviamente, esto no es ideal, por lo que puede haber una mejor solución).
server-running-p
le indica si seserver-name
está ejecutando un servidor con nombre en particular (por defecto ); así que si suserver-name
es el mismo en todas sus instancias, entonces puede evitar iniciar un servidor que ya se está ejecutando de la siguiente manera:fuente