É possível executar gnus
ou outras coisas que tendem a bloquear frequentemente em uma instância separada do emacs e "encaminhar os buffers" para a instância principal do emacs. Acho que, de maneira geral, estou me perguntando que tipo de comunicação entre instâncias do emacs é possível.
7
frame-bufs
github.com/alpaker/Frame-Bufs ou uma variedade de outras bibliotecas organizacionais (por exemplo, projetos etc.). Em poucas palavras, existem muitas maneiras de organizar efetivamente um enorme volume de buffers ativos em uma instância do Emacs.el-screen
para organização de buffer, mas uma abordagem orientada a projeto pode fazer mais sentido. Estou imaginando mais um mestre emacs e alguns trabalhadores sem cabeça que impedem coisas como essagnus
. A solução mais simples possível: o emacses se comunica por soquetes ou o mestre emacs gera um trabalhador efêmero e toda a comunicação é feita por stdin e stdout, mas então eu precisaria me esforçar bastante para serializar e desserializar objetos específicos do emacs (que é o trabalho duro que estou tentando evitar).Respostas:
Certifique-se de que cada instância do Emacs execute um daemon com um nome exclusivo. Defina a variável
server-start
para escolher o nome do servidor, por exemploDe um exemplo, você pode executar um código em outra instância com a função
server-eval-at
. O valor da expressão é retornado para a instância local. Ele precisa ser um valor que possa ser lido novamente: números inteiros, seqüências de caracteres, listas e outras estruturas de dados "transparentes" são aceitáveis, mas você pode transferir buffers, quadros etc. dessa maneira.Você pode usar esse recurso para dizer a outra instância para abrir um quadro, para listar os nomes de buffer em outra instância, etc. Observe que se a outra instância estiver ocupada, seu código será bloqueado até responder ao daemon.
Não há muito código por aí que use esse recurso: a maioria dos usuários do Emacs executa uma única instância. Então, o que você quiser fazer, provavelmente terá que fazer algum trabalho de codificação.
fonte
emacs --daemon=gnus
vez deemacs --daemon --eval '(setq server-name "gnus")'
Emacsclient
Use em vez de Emacs, o Emacsclient. Primeiro você precisa fazer um
(server-start)
no seu Emacs (pt) e depois executar o cliente em seu próprio quadro comemacsclient -c test.mac
.Você também pode distinguir arquivos de servidor diferentes com as opções
-f ServerFile
(no Windows) ou nomes de servidor-s ServerName
. Veja http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html . Para isso, é necessário definir nomes de servidores diferentes para os diferentes Emacsen:,(setq server-name "Server1")
etc.fonte