Normalmente, inicio o emacs com a GUI e inicio um servidor imediatamente (server-start)
. Agora eu posso facilmente abrir documentos na minha sessão emacs existente a partir do terminal via emacsclient -n <file>
ou no Navegador de Arquivos.
De tempos em tempos, no entanto, quero executar o emacs dentro do meu terminal usando emacsclient -t
. Isso acontece com mais freqüência ao gravar logs de confirmação do git ou executar outras tarefas muito pequenas. Nesses casos, o fato de o meu arquivo init ter sido carregado em uma instância da GUI do emacs significa que eu não recebo nenhuma das minhas personalizações específicas do TTY emacs.
Eu sei que posso correr
emacs -nw -q -l "some-custom-init-file.el"
mas isso recarregará todos os pacotes sempre. Posso ter o melhor dos dois mundos? Existe uma maneira de configurar um "daemon TTY" para que eu possa usar personalizações separadas para executar dentro do terminal e visitar o arquivo em uma janela existente do emacs?
(setq linum-format "%d ")
no arquivo de personalização TTY. Além disso, meu tema de cores sempre parece estranho no modo TTY, por isso vou escolher um tema diferente para o TTY. Na verdade, não tenho muitas diferenças no momento, mas agora que sei que posso ter servidores diferentes, a lista pode aumentar.M-x report-emacs-bug
solicite novos recursos, como a capacidade de ter diferentes temas de rosto em TTY e em quadros de GUI (na verdade, um tema pode especificar cores completamente diferentes para esses tipos de quadros, para que você também possa ajustar seu tema) . Usar vários daemons para esses casos separados é apenas uma solução alternativa para a falta de funcionalidade correspondente no Emacs.Respostas:
Use
emacs --daemon=your-server-name -l "custom-init-file"
para iniciar um novo servidor eemacsclient -nw -s your-server-name
conectar-se a ele a partir do próprio terminal. A seção Usando o Emacs como servidor no manual possui mais opções de inicialização.fonte
-q
chave para manter o meu padrãoinit.el
de correr antes que o arquivo de inicialização personalizada.)emacsclient -s your-server-name -e "(kill-emacs)"
que você quer? O exemplo acima chama apenas emacsclient e evals(kill-emacs)
. Você poderia substituir(kill-emacs)
com(save-buffers-kill-emacs)
bem.-q
Além da resposta do @ Vamsi, você pode obter muitos dos mesmos benefícios enquanto executa apenas um único servidor anexando conselhos
make-frame-command
.Por exemplo, enquanto estiver rodando no terminal, quero que a cor do plano de fundo seja
black
(que mapeie#202020
), mas quero usar#202020
no modo gráfico. Eu implementei isso com:Você pode obter muita quilometragem disso usando
make-variable-frame-local
(set-background-color
o quadro acima já é local do quadro).Não sei se esse é o melhor padrão, mas se você tiver relativamente poucas diferenças entre o Emacs no modo TTY e no modo X, ele poderá facilitar o gerenciamento da configuração.
O código acima foi retirado do meu .emacs.d .
fonte
(display-graphic-p)
dát
se o quadro atual é gráfico,nil
caso contrário. Como os quadros não podem ser movidos entre gráficos e não (afaik), anexar conselhos à criação de quadros garante que o estado desejado seja alcançado para o quadro fornecido.Você não precisa de um conselho para alterar as configurações de diferentes quadros em execução no mesmo daemon do emacs. Basta usar o gancho
after-make-frame-functions
assimA definição desta maneira tem o bônus adicional, que define a configuração de quadro desejada, mesmo que você não inicie no modo daemon.
Infelizmente, o
load-theme
quadro não é local e, portanto, os outros quadros também ficam coloridos se você realmente usar temas diferentes para quadros gráficos e de texto.Informações sobre bônus: configure seus terminais com pelo menos 256 cores para obter a sensação real do tema selecionado. Use uma configuração como esta em um dos seus arquivos de inicialização do shell:
fonte