2010-06-14 12 views
3

Mon fichier .emacs est le here. Je veux que le thème change quand je suis en shell-mode. Mais ce qui se passe, c'est que le thème est appliqué à toutes les fenêtres. J'ai mis la variable color-theme-is-global à nil, mais le problème persiste toujours.Impossible d'appliquer le thème de couleur à une image dans Emacs?

(add-hook 'shell-mode-hook 'color-theme-monokai-terminal) 
(set-variable 'color-theme-is-global nil) 

Ce sont les lignes correspondantes dans mon fichier .emacs. Que dois-je faire pour le faire fonctionner?

+0

Je ne suis pas sûr de comprendre le scénario. Voulez-vous un thème différent pour un cadre dans lequel vous exécutez uniquement le mode shell? – lmichelbacher

+0

Seul le mode shell. C'est pourquoi j'ai ajouté le crochet. – prtksxna

Répondre

4

Je démarre généralement Emacs en tant que démon, puis j'ouvre des cadres si nécessaire. J'utilise des thèmes de couleurs pour cadres X et cadres terminaux comme ceci:

(require 'color-theme) 
(color-theme-initialize) 

(defun apply-color-theme (frame) 
    "Apply color theme to a frame based on whether its a 'real' 
    window or a console window." 
    (select-frame frame) 
    (if (window-system frame) 
     (color-theme-tango) 
    (color-theme-tango-black))) 

(setq color-theme-is-global nil) 
(add-hook 'after-make-frame-functions 'apply-color-theme) 

Vous pouvez remplacer la (if window-system ...) partie avec votre chèque pour le mode script shell et les pièces de couleur-thème-X avec vos thèmes préférés. Il y a un inconvénient à cela: si vous ne démarrez pas Emacs en tant que démon, la personnalisation ne sera lancée qu'après la création d'une deuxième image, la première qui apparaîtra aura le thème standard.

+0

Le problème avec ceci est que, je ne peux pas vérifier le mode de l'image lors de sa création. J'aurais pu faire un cadre plus tôt et maintenant j'ouvre le mode shell. – prtksxna

3

Je pense que votre terminologie est désactivée: dans emacs-speak frame signifie ce que l'on entend généralement par window dans un environnement graphique. (C'est-à-dire, la chose qui a les boutons fermer, minimiser et maximiser et une barre de titre, etc., est le "cadre".) Considérant que les choses qui apparaissent quand vous faites un C-x 3 (fenêtre fractionnée) sont appelées windows, et quand vous faites quelque chose comme M-x shell-mode vous obtenez un nouveau buffer, qui peut être ou ne pas être dans une nouvelle fenêtre.

thèmes de couleur sont toujours cadre global (pour autant que je sache, et il est certainement ce que la documentation indique) la color-theme-is-global variable détermine si un seul thème dans toutes les images se propage.

Je pense que la chose la plus proche de ce que vous voulez est quelque chose comme (complètement non testé, probablement cassé):

(defun shell-mode-in-new-frame() 
    (interactive) 
    (select-frame (make-frame)) 
    (color-theme-monokai-terminal) 
    (shell-mode)) 

Bien que cela ne crée un nouveau cadre, qui n'est pas ce que vous vouloir.

+0

Ma terminologie était incorrecte. Je l'ai édité maintenant. Il n'y a donc aucun moyen qu'une fenêtre puisse avoir un thème différent du reste des fenêtres? – prtksxna

+0

Je n'ai jamais essayé, mais j'imagine que ce serait assez difficile, voire impossible. Il y a beaucoup de variables que vous devez définir, et vous devez les mettre toutes en buffer-local. Et certains d'entre eux sont probablement dans les sources C et non localisables par tampon. Mais je devine juste là. D'après mon expérience, la plupart des modes offrent suffisamment de visages spécifiques au mode. (Essayez M-x list-faces-display avec le shell-mode actif, et cherchez les visages comint- *, qui sont [je suis assez sûr] ce que le mode shell utilise.) – quodlibetor

+0

Je suppose que c'est assez difficile. Merci de m'avoir fait poser la bonne question. La façon dont vous suggérez, je serais en mesure de changer en partie le tampon en mode shell, mais pas complètement. – prtksxna