Como posso executar o daemon do emacs somente quando necessário?

4

Pelo que li, uma maneira de acelerar a inicialização do emacs é rodar emacs --daemon no login e depois abrir arquivos usando emacslient ao invés de emacs , que acessará o servidor emacs em execução ao invés de criar um nova instância do emacs.

No entanto, prefiro não colocar os proframs no início automático, a menos que seja absolutamente necessário, para acelerar o processo de login. Existe uma maneira robusta de detectar se um servidor emacs está sendo executado? Isso me permitiria escrever um script simples que geraria o servidor emacs na primeira vez que eu abrir um arquivo com o emacs.

#!/bin/sh
if emacs_daemon_is_not_running # <-- How do I do this?
then
    emacs --daemon
fi
emacsclient -c "$@"
    
por hugomg 21.10.2015 / 03:29

3 respostas

9

Você não precisa nem testar se o emacs já está em execução ou não. emacsclient pode iniciar o daemon emacs se ele ainda não estiver em execução. De emacsclient(1) :

   -a, --alternate-editor=EDITOR
          if the Emacs server is not running,  run  the  specified  editor
          instead.   This can also be specified via the 'ALTERNATE_EDITOR'
          environment variable.  If the  value  of  EDITOR  is  the  empty
          string,  run 'emacs --daemon' to start Emacs in daemon mode, and
          try to connect to it.

Eu uso um alias, ge , para editar arquivos, definidos assim:

alias ge="emacsclient -c -n --alternate-editor=\"\""
    
por 21.10.2015 / 20:46
3

Você pode usar o emacsclient para testar se há uma conexão:

#!/bin/sh
if ! emacsclient -e 0 >&/dev/null
then emacs --daemon
fi
emacsclient -c "$@"

-e 0 significa avaliar a expressão "0", que imprime apenas 0. O código de retorno é diferente de zero se o emacsclient falhar na conexão com o servidor.

    
por 21.10.2015 / 08:08
1

Você pode colocar isso em uma função ou script do shell:

if ! ps h -o pid,args -C emacs | grep -q -- --daemon ; then
    emacs --daemon
fi
emacsclient -c "$@"

Isso pressupõe que você esteja usando o ps do pacote linux procps padrão. Se você estiver usando outro ps , as opções exatas serão diferentes.

    
por 21.10.2015 / 03:42

Tags