Configure o Emacs no Windows para iniciar uma única instância e abrir arquivos na instância existente

18

Estou particularmente interessado na experiência completa do Windows, incluindo:

  • Iniciando automaticamente um servidor se ainda não estiver iniciado
  • Como chamar o emacs para que ele utilize o servidor (por exemplo, na linha de comando ou em ferramentas de terceiros)
  • Suporte ao menu de contexto (por exemplo, clique com o botão direito do mouse em um arquivo e permita que ele seja enviado ao emacs para visualização e edição)

Esse suporte está disponível imediatamente em qualquer lugar?

cristobalito
fonte

Respostas:

21

Iniciando automaticamente um servidor se ainda não estiver iniciado

Isso deve ser o mesmo para qualquer compilação do Emacs. Adicione este trecho ao seu .emacsou .emacs.d/init.el.

(require 'server)
(unless (server-running-p)
  (server-start)) 

E então apenas inicie o emacs executando o runemacs.exeexecutável que acompanha a compilação.

Como chamar o emacs para que ele utilize o servidor (por exemplo, na linha de comando ou em ferramentas de terceiros)

A compilação do Emacs para Windows vem com um emacsclientw.exeexecutável no bin/diretório Use o caminho completo para esse executável como seu editor de escolha em qualquer ferramenta de terceiros que você precise configurar.

Suporte ao menu de contexto (por exemplo, clique com o botão direito do mouse em um arquivo e permita que ele seja enviado ao emacs para visualização e edição)

  1. Clique com o botão direito do mouse em um arquivo, selecione Open With -> Select Default Program.
  2. Na janela exibida, navegue até o emacsclientw.exeexecutável mencionado acima e escolha-o.
  3. Se você não deseja que o Emacs seja o padrão, execute as etapas 1 e 2 novamente, escolhendo um programa diferente como padrão.

emacsclientw.exe agora sempre será uma opção no menu de contexto.

Malabarba
fonte
Obrigado - ótimo ponto sobre o servidor, eu não estava pensando.
cristobalito 24/09
Em relação ao emacsclient.exe, não deveria ser o emacsclientw.exe? Além disso, pensei que você precisava executá-lo com o sinalizador -a para especificar um editor alternativo se o servidor não estivesse em execução.
cristobalito 24/09
Para que o servidor funcionasse corretamente com minha configuração, também tive que adicionar uma variável de ambiente EMACS_SERVER_FILEque apontava para o meu .emacs.d\serverdiretório.
Ryan
@Ryan Consegui fazer isso funcionar sem a necessidade da variável de ambiente - apenas necessária para garantir que o servidor estivesse em execução.
Cristobalito
Hmm, para me avaliar (server-running-p)retornos :othersobre o Windows (mesmo depois de tentar definir que EMACS_SERVER_FILEenv var.
Kaushal Modi
5

Iniciando automaticamente um servidor se ainda não estiver iniciado

Eu recomendo definir uma variável de ambiente para ALTERNATE_EDITORa runemacs.exe. Dessa forma, você sempre pode chamar o emacsclient, mesmo se não houver servidor. Basta adicionar (início do servidor) ao seu arquivo init. Quando um servidor não existe, o emacsclient chama o ALTERNATE_EDITORque é emacs no nosso caso. Como o emace inicia um servidor no arquivo init, quaisquer novas chamadas para o emacsclient serão instantâneas.

Como chamar o emacs para que ele utilize o servidor (por exemplo, na linha de comando ou em ferramentas de terceiros)

Use emacsclientw.exe -c -n "your_file"para abrir seu_arquivo. O -cargumento cria um novo quadro gráfico e -npermite fechar o quadro sem perder o estado do servidor. Você pode até chamá-lo sem um nome de arquivo para abrir o *Scratch*buffer. Também funciona a partir de um atalho na área de trabalho. Usar emacsclient.exe(observe o w ausente) exibirá um prompt de comando por alguns segundos sempre que você o chamar.

Adicionando ao menu de contexto

O Emacswiki tem uma boa página sobre como adicionar o Emacs ao menu de contexto aqui . Envolve editar o nó do registro HKEY_CLASSES_ROOT\*para adicionar uma ação a ser aberta com o emacs.

Vamsi
fonte
5

Outros responderam à parte do servidor. Aqui está o que eu faço para obter utilitários do tipo UNIX / GNU / Linux, como grepe diff:

  1. Instale o Cygwin (operação única).
  2. Carregar cygwin-mount.el.
  3. Carregar setup-cygwin.el.

No entanto, esteja ciente de que existem versões diferentes do Cygwin. Eu uso uma versão mais antiga (não sei qual - difícil de dizer, AFAICT). Não sei se você terá problemas com as versões recentes.

Veja também:

Desenhou
fonte
Nota: Não use o cygwin EMACS. Instale a compilação GNU em ftp.gnu.org/gnu/emacs/windows
M Smith
Eu não recomendo instalar o Cygwin, pois pode haver efeitos colaterais indesejáveis ​​(como quebrar outras portas do Windows gnu como emacs, gcc, ...), por ter apenas algumas ferramentas gnu. Em vez disso, instale as portas do GnuWin32 . Você pode instalar o pacote inteiro ou as ferramentas selecionadas de sua escolha.
Seki
@ Seki - Sim, Eli Zaretskii diz a mesma coisa que você. Tudo o que posso dizer é que não tive nenhum problema (e tenho sérias dúvidas quanto à sua alegação de que ele quebrou o Emacs ). Mas (a) estou usando uma versão antiga do Cygwin e (b) não uso a maioria dos utilitários UNIX / GNU Linux fornecidos pelo Cygwin.
Drew
@ drew: talvez excessivo por falar em "quebrar" emacs, "causar comportamento estranho" teria sido melhor. Por exemplo, o Cygwin Make travará a cadeia de ferramentas MinGW se você não verificar cuidadosamente o seu caminho para ver se as ferramentas Cygwin não estão sendo levadas em consideração ou por padrão, se não houver outra. Não é limitado ao Make, muitas outras ferramentas não podem se misturar e, às vezes, é sutil apontar o problema. Então, resumindo, você tem uma porta nativa do Emacs e é melhor ter ferramentas GNU nativas, ou pode usar toda a distribuição do Cygwin, incluindo seu emacs.
Seki
@ Seki: Parece que o seu ponto principal é que Cygwin e MingGW não jogam bem juntos. Isso não é surpreendente para mim. (FWIW, não tenho nada contra o uso MingGW vez de Cygwin Para mim foi simples de instalar Cygwin, e eu não usar o suficiente para ter problemas encontrados..)
de Drew