Eu comprei recentemente o meu primeiro Mac em uma década e estou no processo de configurá-lo. Eu sou um usuário do Emacs e decidi que quero apenas o Emacs regular, não o Aquamacs, para que eu possa usar minha configuração existente de outros sistemas operacionais. Tentei seguir muitas instruções que encontrei on-line (como este , este e este no site do qual baixei o Emacs ) e tentei combinar as peças de várias maneiras, mas nunca colocou as coisas em um estado que se aproximava do que estou acostumado / esperando:
- Um daemon do Emacs começa a ser executado na inicialização ou assim que eu precisar ; qualquer um está bom. Quaisquer novos quadros do Emacs são suportados pelo mesmo servidor.
- Quando abro um arquivo de texto no Finder, o arquivo é aberto no Emacs, em um quadro gráfico existente, se possível.
- Se eu executar o Emacs.app, o sistema reutiliza o daemon emacs que está sendo executado em segundo plano, em vez de iniciar uma nova instância e abrir uma nova janela nele. ( ponta do chapéu )
- Quando executo o Emacs a partir de um terminal, o terminal prossegue seus negócios sem esperar que eu termine com o Emacs (a menos que eu use '-nw')
- O AFAIK em nenhum momento durante as operações descritas acima deve o Emacs terminar em um estado ("modo de edição do servidor?") Em que ele está esperando que eu digite
C-x #
, embora eu não tenha um entendimento profundo desse problema. - (Eu consideraria isso um bônus) Existe uma maneira de chamar o Emacs de um terminal para que o Emacs reutilize um quadro existente, se possível.
Como eu poderia configurar o Emacs para se comportar assim?
Estou particularmente perplexo ao fazer com que o Finder abra as coisas no Emacs da maneira que desejo (nº 2), pois os guias que encontrei geralmente criam vários aliases, Applescripts, scripts bash, etc. e não tenho certeza que eu quero dizer ao Finder para abrir arquivos de texto.
Obrigado!
A. O @lawlist pergunta: "Um novo quadro está sendo aberto por padrão quando você abre um novo arquivo no terminal, mesmo que exista um quadro existente?" A resposta é que, se eu iniciar um servidor na inicialização, conforme descrito aqui , abrir um quadro e, em seguida, abrir um arquivo digitando /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>
, posso fazer com que o arquivo seja aberto em um quadro existente. Se não houver um quadro aberto no momento, tenho que usar "-nc" ou quando tento abrir um arquivo, nada acontece.
B. O @lawlist pergunta: "Você deseja que o daemon seja executado no login, ou seria suficiente carregar o Emacs manualmente após o login?" Executar manualmente seria bom.
M-x server-start
iniciará manualmente o servidor para que eleemacsclient
possa se comunicar com ele. Coloquei(server-start)
no meuinit.el
arquivo em vez de usar um daemon no login - no entanto, muitas pessoas preferem a opção de login do daemon. E, claro, o.emacs
arquivo seria um local adequado para(server-start)
.ns-find-file
- que é ativado automaticamente quando um arquivo é associado ao Emacs.app. Minha função de arquivo de interceptação nos links acima também modificans-find-file
se isso é algo que lhe interessa. Claro, você precisa do Emacs construído--with-ns
.Respostas:
Para fazer o Emacs.app abrir arquivos em um quadro existente em vez de um novo quadro, adicione
(setq ns-pop-up-frames nil)
a um arquivo de configuração como~/.emacs
.Você pode abrir um arquivo de um terminal com
open -a emacs file
ouemacsclient -n file
. Se o Emacs.app não estiver aberto, mas houver umEmacs --daemon
processo, por algum motivoemacsclient -n file
não funcionará, masemacsclient -nc file
funcionará.Certifique-se de usar o
emacsclient
binário incluído na versão do Emacs que você usa, como/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
ou/usr/local/bin/emacsclient
se instalou o Emacs com o Homebrew.Para iniciar um servidor Emacs no login, por exemplo, salve este plist como
~/Library/LaunchAgents/my.emacsdaemon.plist
:O plist é carregado automaticamente na próxima vez que você fizer login, mas você pode carregá-lo imediatamente executando
launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.Edit: Eu ainda não sei por que as pessoas estão associando tipos de arquivos a um aplicativo AppleScript em vez de apenas ao Emacs.app. O script na resposta do kuzzooroo também pode ser escrito como um shell script:
Você pode usar o Platypus para salvar o script como um aplicativo:
Comecei a usar o Emacs, mas tenho uma configuração completamente diferente. Criei meu próprio aplicativo Emacs fazendo uma cópia do iTerm.app, alterando o CFBundleIdentifier no Info.plist para que o aplicativo use um arquivo de preferências diferente e definindo o comando padrão como
/usr/local/bin/emacs
. Eu adicionei(server-start)
a~/.emacs
e eu abrir o aplicativo Emacs costume no início da sessão. Usei o Platypus para criar um aplicativo que é executadoemacsclient -n "$@";open -b my.emacs
e o tornei o aplicativo padrão para arquivos de texto.fonte
A solução da Lauri, combinada com sugestões dos comentários, abordou amplamente meus problemas. Eu colei abaixo alguns Applescript que eu juntei de coisas que encontrei online. O script ajuda a suavizar algumas rugas restantes, por exemplo, seu comportamento é um pouco melhor se não houver um quadro atual do Emacs.
EDIT: o objetivo do script é ser associado aos arquivos .txt no Finder.
fonte