Como posso emacsclient -a '' -n
criar um novo quadro apenas se já não houver um?
O problema com o -c
sinalizador é que ele cria um novo quadro sempre. O problema é que, se não houver um quadro aberto, ele será aberto na linha de comando.
Se eu puder verificar se há um quadro Emacs aberto no shell, posso ligar com ou sem, -c
dependendo disso, para obter o comportamento que desejo. Eu tentei:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Eu sempre obtenho o mesmo resultado.
Eu poderia usar arquivos temporários ou pgrep, mas essas abordagens são muito propensas a erros.
Isso é semelhante a essa pergunta , mas não é uma duplicata, pois o OP estava satisfeito em ter que abrir um quadro antes de ligar emacsclient
.
frames
emacsclient
x11
spelufo
fonte
fonte
elisp
,bash
esh
respostas.Respostas:
Acabei fazendo esse script com base nisso
Se não houver visor, ele abre com
-nw
. Se$DISPLAY
estiver definido, ele procura quadros na tela para ver se precisa criar um novo.Editar: modifiquei para que você possa especificar manualmente
-nw
se deseja abrir em um terminal, mesmo que exista um monitor.fonte
$@
deve ser citado .Você pode usar:
para verificar se o servidor Emacs
"server_name"
já está em execução. Se o comando retornar o código de saída 0, ele está sendo executado. Nesse caso, basta usar oemacsclient
comando:Se não estiver em execução, você pode abrir um novo servidor Emacs com, por exemplo:
fonte
emacsclient -a ''
partidasemacs --daemon
se necessário, que persiste mesmo se você fechar o shell.&
no final do comando; isso significa para executar o servidor como um processo de fundo ..C-d
).server-start
iniciar o servidor como processo daemon. O que você ganha se iniciar o emacs dessa maneira e depois fechar todos os emacs e terminais, abrir um novo terminal e executarpgrep emacs
?C-d
. Eu tentei isso agora usandognome-terminal
no Ubuntu 14.10 .. Acho que você está se referindo a uma instância em execução após fechar todos os quadros do Emacs? Então, que exigiria um processo daemon sim ..