J'essaie d'obtenir le comportement suivant dans Emacs24:
J'aime utiliser un thème différent (solarized-dark vs solarized-light) selon que je me connecte au serveur en cours d'exécution avec un châssis de terminal
% emacsclient -t
ou avec un cadre gtk
% emacsclient -c
Cela semble avoir fonctionné dans les anciens Emacs, mais les Emacs actuels, je ne pouvais pas trouver un moyen. J'ai déjà vérifié SO (par exemple, /programming//q/18904529/152439 et réponses) et les listes de diffusion (par exemple, https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html et https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).
Ma configuration actuelle ressemble à ceci:
(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)
)
Le problème avec cela est que si j'ai un cadre graphique ouvert puis j'ouvre un cadre terminal avec emacsclient -t
, le thème solarized-dark est appliqué à la fois au nouveau cadre terminal (qui est correct) et au cadre graphique déjà ouvert (qui devrait être laissé intacte, idéalement). L'équivalent se produit lorsqu'un cadre terminal est déjà ouvert et j'ouvre un nouveau cadre graphique avec emacsclient -c
.
EDIT: Si cela n'est pas possible avec Emacs24 actuel, est-il prévu de le rendre à nouveau possible?
color-theme.el
IIRC qui avait des paramètres de couleur dépendant du cadre. Il n'y a pas de grand avantage à utiliser les capacités de thème intégrées en dehors de l'ubiquité.color-theme
systèmes de thème Emacs 24. Ma version du thème solarisé prend également en charge les deux systèmes, si vous décidez de suivre cette voie.Réponses:
Vous ne pouvez pas le faire en utilisant différents thèmes. La solution consiste à créer un thème ayant différentes définitions de visages en fonction du terminal. Si vous regardez un exemple comme
font-lock-comment-face
, vous verrez comment cela fonctionne. Au lieu de spécifier,((class color) (min-colors 88) (background dark))
vous pouvez également spécifier(type tty)
ou(type graphic)
etc. Le manuel contient plus d'informations .Je suppose que vous pourriez écrire une fonction qui prend deux thèmes et produit un thème fusionné, avec des visages d'un thème attribués
(type tty)
et des visages de l'autre thème attribués(type graphic)
là où les deux thèmes originaux sont utilisést
.la source
color-theme-buffer-local fournit une prise en charge du thème buffer-local pour les systèmes de thème couleur et Emacs 24. Ma version du thème solarisé prend également en charge les deux systèmes, si vous décidez de suivre cette voie.
la source
Vous pouvez définir des conditions pour les personnalisations de visage, comme le "mode terminal" ou les "couleurs minimales" dans l'éditeur de personnalisation:
Lors de la personnalisation d'un visage, cliquez sur le bouton [État] et sélectionnez "Afficher toutes les spécifications d'affichage". Ensuite, vous pouvez définir les conditions d'une spécialisation plus poussée du visage.
Voici une variante minimale pour définir la couleur d'arrière-plan sur noir lorsque le cadre est un tty:
la source