SO: OS X 10.9.5, Mavericks
GNU Emacs 24.3.1 (x86_64-apple-darwin13.1.0, versão de carbono 1.6.0 AppKit 1265.19) de 03/04/2014 em Rainers-MacBook-Pro-3.local
Eu instalei o emacs via homebrew da railwaycat e funciona muito bem - sem queixas. Eu não uso o emacs no termoinal e normalmente inicio-o através do aplicativo.
Como eu disse - estou feliz até agora.
Só tenho uma coisa que não consegui acertar (que funcionava muito bem no Linux antes), que é:
- obtenha o daemon do emacs a partir do login
- usando o emacsclient para abrir
- feche o emacsdaemon e salve todos os arquivos no logoff
Alguma receita de trabalho que possa me ajudar a configurar isso?
Informação adicionada
Para iniciar um daemon emacs após o login
Criei um aplicativo Automator executando o comando bash
/usr/local/bin/emacs --daemon
e adicionou aos itens de login, o que funciona muito bem.
Utilizando o Daemon do Terminal
Posso utilizar o daemon emacs usando
emacsclient .bashrc
que abre o .bashrc em uma sessão do terminal emacs.
Utilizando a partir da GUI
Agora permanece a pergunta: como posso utilizá-lo na GUI?
Como eu entendo o emacsclient, não posso abrir um emacsclient a menos que especifique um arquivo para abrir.
Gostaria de abrir uma GUI do emacsclient e abrir todos os arquivos que foram abertos anteriormente ? Isso é possível?
Eu descobri que posso usar
emacsclient -c
em um terminal para fazer o que eu quero - mas posso fazer o mesmo pela GUI?
fonte
emacsclient
não é um aplicativo no que diz respeito ao OS X, apenas oEmacs
é (e somente se tiver sido instalado dessa maneira). Por que você não usa as ligações de teclas do sistema para selecionar um aplicativo / janela aberto? (Não funcionará se o Emacs tiver sido iniciado no modo daemon e ainda não houver quadro ("janela")).Respostas:
Realmente não me importo que o Emacs.app esteja sempre em execução, mas o fato de não poder fechar a janela sem matar acidentalmente o servidor Emacs era irritante. E mesmo se você tentar realmente matar o último quadro, ele ainda não permitirá: "Tente excluir o único quadro visível ou iconificado". ... Então nós trapaceamos.
Esta solução apenas oculta o Emacs (como Command+ h) quando você tenta fechar a última janela clicando no botão Fechar.
Adicione o seguinte ao seu Emacs init em algum lugar:
E adicione o Emacs a "Usuários e grupos> Itens de login" e clique na caixa de seleção "Ocultar".
Seu init do Emacs também precisa ligar para
(start-server)
algum lugar.Estou usando este
emacsclient
wrapper para trazer o Emacs para a frente primeiro:Problemas:
Clicar no ícone do Emacs no Dock parece criar uma nova janela aleatoriamente. Mas não sempre.Isso se baseia na resposta do @ noaham, sugerindo minimizar o Emacs, e esta resposta explicando como conectar tentando fechar a última janela.
EDITAR:
Pesquisando pela fonte, encontrei a "ligação de teclas" para a
mac-apple-event-map
qual as chamadasmac-ae-reopen-application
.mac-ae-reopen-application
parece verificar quadros visíveis e iconificados e, de alguma forma, deve perder o nosso oculto. Isso é possivelmente um bug.A solução mais fácil é desabilitar a ligação de teclas no seu init:
Isso introduz um novo bug menor: clicar no ícone do dock quando todas as janelas são minimizadas não maximiza automaticamente uma delas. A correção correta seria reescrever
mac-ae-reopen-application
, mas eu mal conheço emacs e elisp.fonte
Infelizmente, a porta Yamamoto Mitsuharu do emacs não suporta multi-tty (consulte esta edição ). Isso significa que você não pode iniciar o daemon emacs a partir do terminal e iniciar uma janela da interface gráfica com o emacsclient.
Aqui está o que eu faço: No meu init.el eu tenho
(server-start)
e inicio o Emacs.app no login. O aborrecimento aqui é que isso abre uma janela que eu tenho que minimizar manualmente.Em seguida, tenho um script bash chamado
emacsc
com o seguinteEm seguida, crio um aplicativo com o AppleScript que contém os seguintes
É importante passar a
-n
bandeira para o emacsclient, caso contrário, você poderá usar o aplicativo emacsc apenas para abrir um cliente por vez. A configuração da variável de caminho garante que o OS X encontre a versão correta do emacsclient.Dizer ao Emacs para "ativar" garante que a janela do seu cliente será iniciada em primeiro plano.
Como eu disse, o aborrecimento é que você precisa minimizar manualmente a janela do emacs no logon e deixá-la no banco dos réus. Uma maneira de evitar isso é "ocultar" o Emacs automaticamente após o login, mas ativá-lo fará com que ele seja reexibido.
fonte
Não tenho certeza de como o Emacs railwaycat é diferente da fórmula comum de fabricação caseira, mas com o último você faria
ln -sfv /usr/local/opt/emacs/*.plist ~/Library/LaunchAgents
, o que seria executadoemacs --daemon
no login.O plist é incluído como um documento HERE no fórmula . Tudo o que você precisa adotar é mudar o caminho para o seu aplicativo emacs na linha
<string>#{opt_bin}/emacs</string>
.BTW, você também pode obter o Emacs como um aplicativo OS X com o Homebrew Emacs se você instalá-lo com a
--cocoa
opção (Você também precisará executarbrew linkapps
posteriormente, vinculá-lo/Applications
ou criar o link você mesmo.fonte
No mac, os daemons são, 90% do tempo, gerenciados usando o launchd . É possível executá-los em vários gatilhos, incluindo login / logout do usuário. Existe um aplicativo Mac bonito chamado Lingon para visualizar e editar as várias coisas que o launchd está gerenciando. O wiki do emacs tem algumas menções a isso, incluindo e um arquivo de configuração de exemplo . Mas parece que isso não resolve a sua preocupação, ou seja, como desligar o daemon no logout.
fonte
Crie um aplicativo AppleScript como este:
Pode ser necessário ajustar o caminho ou deixar de fora completamente o caminho. Você também pode usar algo mais sofisticado para iniciar o daemon, se ele ainda não estiver em execução.
fonte