Estou tentando alcançar o seguinte comportamento no Emacs24:
Gosto de usar um tema diferente (solarizado-escuro vs. solarizado-luz), dependendo de eu me conectar ao servidor em execução com um quadro de terminal
% emacsclient -t
ou com um quadro gtk
% emacsclient -c
Isso parece ter funcionado no Emacs mais antigo, mas no Emacs atual eu não consegui encontrar uma maneira. Eu já verifiquei o SO (por exemplo, /programming//q/18904529/152439 e respostas) e as listas de discussão (por exemplo, https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html e https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).
Minha configuração atual é assim:
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(if (display-graphic-p frame)
(load-theme 'solarized-light t)
(load-theme 'solarized-dark t)
)
)
)
(load-theme 'solarized-light t)
)
O problema com isso é que, se eu tiver um quadro gráfico aberto e, em seguida, abrir um quadro de terminal emacsclient -t
, o tema escuro-solarizado será aplicado ao novo quadro de terminal (correto) e ao quadro gráfico já aberto (que deve ser deixado intocado, idealmente). O equivalente acontece quando um quadro terminal já está aberto e eu abro um novo quadro gráfico com emacsclient -c
.
EDIT: Caso isso não seja possível com o Emacs24 atual, existem planos para torná-lo possível novamente?
color-theme.el
IIRC que possui configurações de cores dependentes do quadro. Não há grande vantagem em usar os recursos de temas embutidos além da onipresença.color-theme
sistemas temáticos Emacs 24. Minha versão do tema solarizado também suporta os dois sistemas, se você decidir seguir esse caminho.Respostas:
Você não pode fazer isso usando temas diferentes. A solução é criar um tema com diferentes definições de face, dependendo do terminal. Se você olhar um exemplo
font-lock-comment-face
, verá como ele funciona. Em vez de especificar,((class color) (min-colors 88) (background dark))
você também pode especificar(type tty)
ou(type graphic)
etc. O manual tem mais informações .Eu acho que você poderia escrever uma função que pega dois temas e produz um tema mesclado, com faces de um tema sendo atribuídas
(type tty)
e faces de outro tema sendo atribuídas,(type graphic)
onde ambos os temas originais são usadost
.fonte
O color-theme-buffer-local fornece suporte ao tema buffer-local para os sistemas de tema color-theme e Emacs 24. Minha versão do tema solarizado também suporta os dois sistemas, se você decidir seguir esse caminho.
fonte
Você pode definir condições para personalizações de face, como "modo terminal" ou "cores mínimas" no editor de personalização:
Ao personalizar um rosto, clique no botão [State] e selecione "Show all display specs". Depois, você pode configurar as condições para uma maior especialização do rosto.
Aqui está uma variante mínima para definir a cor do plano de fundo como preto quando o quadro é um tty:
fonte