Várias instâncias do Emacs, cada uma com seu próprio servidor?

7

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.

Felix Hoffmann
fonte
Editei um pouco o título. Parece que você está perguntando sobre como ter vários servidores Emacs em execução simultaneamente. Por favor, corrija-me se eu entendi errado.
Malabarba 30/09
11
As respostas aqui provavelmente serão do interesse: emacs.stackexchange.com/q/41/93
nispio
Se for esse o caso, removerei minha resposta, porque pensei que ele estava pedindo clientes diferentes em diferentes áreas de trabalho.
Boccaperta-IT
@ Malabarba honestamente não tenho certeza! O motivo pelo qual fiz a pergunta de maneira mais ampla é porque não sei se estou respondendo à pergunta "Como posso ter vários servidores Emacs?" é a abordagem correta para responder ao meu problema "Como posso ter várias instâncias do Emacs e abrir arquivos como buffers em uma delas na linha de comando?". No entanto, vejo que conseguir vários servidores em execução pode ser uma maneira potencial de resolver meu problema.
Felix Hoffmann

Respostas:

5

Essa resposta tem o método geral, embora a pergunta seja diferente da sua.

Você pode usar emacs --daemon=workspaceNcombinado com emacsclient -s workspaceNpara 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).

J David Smith
fonte
11
Para adicionar à sua resposta, server-namepermite 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 de command-line-args, a algo simular semelhante à --daemoninvocação
Sigma
11
@Sigma Thanks! Embora a --daemonsoluçã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 -ca emacsclientou não, mas não parece ser algo entre os dois (que eu precisaria). Você poderia elobarte na sua solução? Como posso definir server-nameantes de executar server-start(set-variable não funciona como a variável ainda não existe). Uma solução init.el, definindo server-namedepeding na linha de comando args, seria exatamente o que estou procurando.
Felix Hoffmann
(set-variable 'server-name "foo")trabalhou para mim. Você se lembrou de citar server-name? Além disso: você pode usar server-running-ppara verificar se o servidor já está em execução.
J David Smith
0

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:

  • começar emacs --daemonno meu.xinitrc
  • executar emacsclient -cna área de trabalho 2
  • executado emacsclient -tno 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

Boccaperta-IT
fonte
Isso responde a uma pergunta diferente: acessando a mesma instância do Emacs de diferentes locais. Mas a pergunta é sobre ter várias instâncias do Emacs.
Gilles 'SO- stop be evil'
11
Sim, o título do tópico foi alterado após a minha resposta, então pensei que a pergunta fosse sobre vários emacsclient. Desculpa.
Boccaperta-IT