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?
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)
Clique com o botão direito do mouse em um arquivo, selecione Open With -> Select Default Program.
Na janela exibida, navegue até o emacsclientw.exeexecutável mencionado acima e escolha-o.
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.
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.
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.
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..)
EMACS_SERVER_FILE
que apontava para o meu.emacs.d\server
diretório.(server-running-p)
retornos:other
sobre o Windows (mesmo depois de tentar definir queEMACS_SERVER_FILE
env var.Eu recomendo definir uma variável de ambiente para
ALTERNATE_EDITOR
arunemacs.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 oALTERNATE_EDITOR
que é emacs no nosso caso. Como o emace inicia um servidor no arquivo init, quaisquer novas chamadas para o emacsclient serão instantâneas.Use
emacsclientw.exe -c -n "your_file"
para abrir seu_arquivo. O-c
argumento cria um novo quadro gráfico e-n
permite 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. Usaremacsclient.exe
(observe o w ausente) exibirá um prompt de comando por alguns segundos sempre que você o chamar.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.fonte
Outros responderam à parte do servidor. Aqui está o que eu faço para obter utilitários do tipo UNIX / GNU / Linux, como
grep
ediff
:cygwin-mount.el
.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:
fonte