2011-04-06 9 views
37

Me gustaría usar emacsclient para editar correos electrónicos en Mutt.¿Cómo iniciar el servidor de emacs solo si no se inicia?

he añadido esto en .emacs

(server-start)

Y en .muttrc que añade

set editor="emacsclient -nw %s"

Parece que trabajan. Cuando comienzo un segundo Emacs, se queja de que ya hay un servidor ejecutándose, por lo que genera errores. ¿Cómo asegurarse de hacer (server-start) solo si el servidor aún no se ha iniciado?

Gracias

Respuesta

42

El demonio de emacs puede iniciarse automáticamente de una manera muy simple. Sólo tiene que añadir esto a su .bashrc/.zshrc/lo que sea

export ALTERNATE_EDITOR="" 

Ahora cuando se invoca emacsclient -t/-c se inicia el servidor (con emacs --daemon) si no está ya en ejecución.

También encuentro esta cáscara alias prácticos

alias e='emacsclient -t' 

señalar que desde Emacs 23 esta es la mejor forma de usar Emacs en modo demonio. (start-server) ahora está desaprobado.

+0

Esta es una buena solución. 'emacsclient -c' también funciona y es compatible con clientes gráficos. Sin embargo, ¿cómo haría para abrir un archivo en un marco de emacs existente (por ejemplo, en otro terminal)? Actualmente, tengo un script bash llamado 'e' que comprueba si el primer argumento es' -o' (para otro) y ejecuta 'emacsclient' sin' -c' si es así. ¿Hay una mejor manera, usando el alias, de que puedes anular el '-t' y hacer que un marco existente abra el archivo? – edam

+0

gracias por la gran respuesta :) – nXqd

+0

@edam no estoy seguro si encontraste tu respuesta, pero parece que quieres el -t cambiar a emacsclient.Es un poco difícil de decir porque su comentario parece difuminar la distinción entre una instancia de emacs no gráfica en un terminal, con una instancia gráfica en ventanas. -t es para el primero, -c es para el segundo. – Daniel

6

evitar el problema a través de alltogether

emacs --daemon 

en cualquier terminal o shell tal que Emacs ejecuta en segundo plano. De esa manera, emacsclient siempre está contento ya que siempre hay un servidor Emacs para conectarse.

Al ser Emacs, también hay una función que inicia el servidor solo cuando es necesario, pero no puedo recordar su nombre en este momento. Uso la opción --daemon felizmente bastante feliz.

51

Este código se inicia el servidor sólo si no se está ejecutando:

(load "server") 
(unless (server-running-p) (server-start)) 
+2

Esta es la única opción que funciona en Windows actualmente ya que 'emacs --daemon' dice _Esta plataforma no es compatible con -daemon flag._ – legends2k

+0

@ legends2k, en Windows también puede hacer' emacs --funcall server-start ', pero estoy de acuerdo en que esto es mejor y funciona multiplataforma. – harpo

9

Una respuesta tardía, pero aquí está la solución que funciona para mí. Cada vez que inicio emacsclient, uso emacsclient -a '' -c El -a '' le dice a emacsclient que intente conectarse a un servidor existente, y si no existe el servidor, inicie uno y luego conéctese.

+0

La opción '-a ''' es genial. Tenga en cuenta que '-c' siempre crea un nuevo marco. Si normalmente desea editar el archivo en el marco de emacs existente, entonces omito esta opción –

Cuestiones relacionadas