Na minha configuração, tenho várias instâncias (GNU) Emacs em execução simultaneamente na minha máquina local, uma para cada projeto ou tarefa em que estou trabalhando atualmente.
Eu gostaria de poder abrir buffers em uma instância do Emacs já em execução, por exemplo, por um comando como
$ emacs file.txt
A solução normalmente sugerida para isso é executar o Emacs no modo de servidor. No entanto, isso entra em conflito com o uso de várias instâncias do Emacs, pois entendo que, por padrão, apenas um único emacsclient pode estar ativo a qualquer momento.
Como posso abrir arquivos como buffers em instâncias existentes (possivelmente múltiplas) do Emacs? O objetivo final é abrir o arquivo na instância do Emacs que está no espaço de trabalho atual (Compiz) ou criar uma instância, se ela ainda não existir.
fonte
Respostas:
Essa resposta tem o método geral, embora a pergunta seja diferente da sua.
Você pode usar
emacs --daemon=workspaceN
combinado comemacsclient -s workspaceN
para ter um daemon do emacs na área de trabalho N. Se precisar de várias, basta executar a área de trabalho1, a área de trabalho2, etc. Observe que o nome do daemon é totalmente arbitrário e você pode usar qualquer esquema de nomenclatura que desejar.Determinar em qual espaço de trabalho você está provavelmente será mais difícil, e não sei como determiná-lo. Se você tiver uma variável de ambiente, um alias ou função do shell provavelmente fará o truque (se você quiser apenas abrir as coisas via shell).
fonte
server-name
permite fazer o mesmo sem ter que usar um daemon Emacs. Basta configurá-lo antes de executar(server-start)
. É possível configurá-lo para um valor, dependendo do valor decommand-line-args
, a algo simular semelhante à--daemon
invocação--daemon
solução funcione em princípio, agora estou tendo alguns problemas com a última parte da minha pergunta "... ou para criar uma instância, se ela ainda não existir". I pode passar-c
aemacsclient
ou não, mas não parece ser algo entre os dois (que eu precisaria). Você poderia elobarte na sua solução? Como posso definirserver-name
antes de executarserver-start
(set-variable não funciona como a variável ainda não existe). Uma solução init.el, definindoserver-name
depeding na linha de comando args, seria exatamente o que estou procurando.(set-variable 'server-name "foo")
trabalhou para mim. Você se lembrou de citarserver-name
? Além disso: você pode usarserver-running-p
para verificar se o servidor já está em execução.Tanto quanto eu sei, você pode usar o Emacs no modo de servidor para obter o que está procurando. Geralmente, tenho várias instâncias do emacsclient em diferentes áreas de trabalho, o que, por exemplo, permite que eu compartilhe facilmente buffers entre eles.
Aqui está o que eu faço:
emacs --daemon
no meu.xinitrc
emacsclient -c
na área de trabalho 2emacsclient -t
no espaço de trabalho 1 (quando eu costumo manter um tmux em tela cheia)Eu posso editar buffers em cada instância, passando rapidamente do termo para a GUI e vice-versa.
Você pode encontrar mais abordagens em Iniciar dois daemons emacs separados para console e GUI
fonte