2011-04-17 8 views
4

J'ai une fonction qui définit le thème de couleurs d'Emacs sur un thème que je définis moi-même. Dans cette fonction que je fais:Changer la couleur de fond d'Emacs

(set-face-attribute 'default cur-frame :foreground fg-color :background bg-color) 

je puis définir la couleur d'arrière-plan, couleur de premier plan et la couleur du curseur pour default-frame-alist, initial-frame-alist et special-display-frame-alist.

Tout cela fonctionne très bien sur mon Mac. Mais quand je l'utiliser sur Linux, il semble bien pour tous les cadres qui ont déjà été ouverts, mais sur des cadres nouvellement créés, il ressemble à ceci:

background color issue

Je n'ai pas ce problème avec de nouveaux cadres si l'utilisation les fonctions set-background-color/set-foreground-color au lieu de (set-face-attribute 'default ...). Mais si je fais cela, je dois réinitialiser manuellement les couleurs pour chaque image déjà ouverte. J'utilise la version 23.3 d'Emacs sur Mac et Ubuntu.

Pour plus de précisions, c'est le fichier thème que je l'utilise:

my-color.el

+0

Est-ce qu'un 'C-l' peindre les couleurs correctement? – vpit3833

+0

@ vpit3833 Non. Il fait défiler la fenêtre, mais rien ne change. – sudo

+0

Pourquoi n'utilisez-vous pas simplement le mode color-theme? –

Répondre

3
(if (eq system-type 'darwin) 
    ;; mac os x settings 
    (if (eq system-type 'gnu/linux) 
    (setq default-frame-alist '((background-color . "black") 
           (foreground-color . "gray"))))) 

quelque chose comme cela devrait vous aider à maintenir les paramètres par système d'exploitation.

+0

En fait, je l'ai déjà, si vous êtes intéressé essayer, c'est ma configuration emacs repos sur [bitbucket] (https://bitbucket.org/brownstone/emacs_configuration), il est dans le fichier appelé my-color.el. Le problème est que si j'utilise set-face-attributes pour 'default', les nouvelles images seront foirées, même si je mets default-frame-alist. Sans cela, tout irait bien, mais je devrais régler manuellement tous les autres cadres ouverts un par un. Bien que généralement il n'y aura pas beaucoup de cadres, je voudrais toujours faire le changement avec une commande. – sudo

4

set-face-attribute définit, comme son nom l'indique, les attributs d'un visage (c'est-à-dire les propriétés liées aux polices), et non les attributs de la trame. Utilisez

(add-to-list 'default-frame-alist '(background-color . "lightgray"))

et similaires à modifier ses propriétés cadre.

+0

Cela semble fonctionner correctement jusqu'à ce que je redimensionne la fenêtre, après quoi les couleurs sont à nouveau cassées (emacs 24.4.1). –

1

Il semble qu'il est préférable d'utiliser

(custom-set-faces 
    '(default ...) 
    '(region ...) 
    .... 
) 

style à mettre des visages, de cette façon il pas ce problème.

0

Emacs utilise 1) (ou ne peint pas) l'arrière-plan du thème Gtk3.0 dans les versions plus récentes d'Emacs. Changer de contexte en utilisant, par exemple, set-background-color ou default-frame-alist ne fonctionne que jusqu'à ce que je redimensionne la fenêtre, après quoi l'arrière-plan du thème Gtk "brille à travers" à nouveau.

Je ne l'ai pas encore été en mesure de comprendre comment obtenir emacs à peindre toujours sur le fond de thème GTK, mais au moins je l'ai trouvé un moyen comment changer la couleur de fond de thème GTK, pour Emacs seulement: https://superuser.com/questions/699501/emacs-showing-grey-background-where-there-are-no-characters/937749#937749

Cela ne résout pas complètement la modification de la couleur d'arrière-plan lorsque vous changez de thème, mais vous pouvez au moins vous débarrasser du contraste noir-blanc que vous ressentez lors de l'ouverture de nouveaux cadres.

1) sur ma machine au moins :)

Questions connexes