Comment modifier des parties d'un thème personnalisé?

21

J'utilise l'un des thèmes personnalisés prédéfinis fournis avec Spacemacs (zenburn).

Comment puis-je modifier des parties spécifiques du thème, par exemple simplement changer la couleur de police utilisée pour les commentaires?

Tortue en cours d'exécution
la source
2
Êtes-vous sûr de vouloir dire un thème de couleur et non un thème personnalisé ? Si vous n'utilisez pas le tiers, color-theme.elvous voulez probablement dire un thème personnalisé. Dans ce cas, veuillez modifier votre question en conséquence. Voir Thèmes de couleurs et personnalisés .
Drew

Réponses:

13

Je préfère utiliser custom-theme-set-facespour redéfinir la façon dont le thème affiche un visage particulier, par exemple,

(custom-theme-set-faces
 'zenburn
 '(font-lock-comment-face ((t (:foreground "#DFAF8F"))))
 '(font-lock-comment-delimiter-face ((t (:foreground "#DFAF8F")))))

Pour le cas spécifique de zenburn, le thème lui-même définit différentes couleurs et une macro dans laquelle celles-ci sont liées à des noms de variable, vous pouvez donc écrire ce qui suit comme:

(zenburn-with-color-variables
  (custom-theme-set-faces
   'zenburn
   `(font-lock-comment-face ((t (:foreground ,zenburn-orange))))
   `(font-lock-comment-delimiter-face ((t (:foreground ,zenburn-orange))))))
Aaron Harris
la source
où êtes-vous censé écrire ce morceau de code? dans .spacemacs?
ChiseledAbs
1
Aucune idée, désolé; Je n'utilise pas Spacemacs. En principe cependant, tout ce que vous avez à faire est de faire évaluer le code quelque temps après le zenburnchargement du thème.
Aaron Harris
8

Dans spacemacs, installez la couche theming, voir https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bthemes/theming

Par exemple, j'ai les éléments suivants coupés dans dotspacemacs/user-initmon .spacemacspour ajuster la couleur d'arrière-plan et de numéro de lin de la gruvbox et le thème de la lumière solaire:

  (setq theming-modifications '(
    ;; requires the theming layer
    (gruvbox
       (default :background "#1D2021" :foreground "#fdf4c1")
       (linum :background "#000000" :foreground "#878787")
       (fringe  :background "#000000")
       (linum-relative-current-face :inherit (shadow default) :background "#3C3836" :foreground "#ff0000")
       (font-lock-comment-face :slant italic)
    )
    (solarized-light
     (linum :background "#DBCDA7" :foreground "#40371F")
       (fringe :background "#DBCDA7")
       (font-lock-comment-face :slant italic)
       )
))
Thorsten
la source
4

J'ai ajouté des conseils à la fonction de thème de chargement pour remplacer certains visages - de cette façon, vous pouvez continuer à utiliser le thème de chargement comme d'habitude pour sélectionner un thème et il appliquera automatiquement les remplacements.

(defadvice load-theme (after theme-set-overrides activate)
  "Set override faces for different custom themes."
  (dolist (theme-settings theme-overrides)
    (let ((theme (car theme-settings))
          (faces (cadr theme-settings)))
      (if (member theme custom-enabled-themes)
          (dolist (face faces)
            (custom-theme-set-faces theme face))))))

(defcustom theme-overrides nil
  "Association list of override faces to set for different custom themes.")

(defun alist-set (alist-symbol key value)
  "Set VALUE of a KEY in ALIST-SYMBOL."
  (set alist-symbol
        (cons (list key value) (assq-delete-all key (eval alist-symbol)))))

; override some settings of the ample-flat theme
(alist-set 'theme-overrides 'ample-flat '(
                                          (default ((t (:background "gray12" :foreground "#bdbdb3"))))
                                          (mode-line ((t (:background "cornsilk4" :foreground "#222" :inherit 'variable-pitch))))
                                          (outline-2 ((t (:inherit font-lock-keyword-face)))) ; blueish
                                          (outline-3 ((t (:inherit font-lock-comment-face)))) ; brownish
                                          (outline-4 ((t (:inherit font-lock-string-face)))) ; orangeish
                                          (org-table ((t (:inherit fixed-pitch :height 0.7 :foreground "#887"))))
                                          (org-formula ((t (:inherit org-table :foreground nil))))
                                          ))

Cela fonctionne, et ce serait bien d'avoir une partie de l'interface, mais il est probablement plus simple de simplement créer une fonction pour chaque thème que vous utilisez et d'appeler custom-theme-set-faces après le chargement -

(defun ample-flat ()
  (interactive)
  (mapc #'disable-theme custom-enabled-themes) ; clear any existing themes
  (load-theme 'ample-flat t)
  (custom-theme-set-faces 'ample-flat 
                          '(default ((t (:background "gray12" :foreground "#bdbdb3"))))
                          '(mode-line ((t (:background "cornsilk4" :foreground "#222" :inherit 'variable-pitch))))
                          '(outline-2 ((t (:inherit font-lock-keyword-face)))) ; blueish
                          '(outline-3 ((t (:inherit font-lock-comment-face)))) ; brownish
                          '(outline-4 ((t (:inherit font-lock-string-face)))) ; orangeish
                          '(org-table ((t (:inherit fixed-pitch :height 0.7 :foreground "#887"))))
                          '(org-formula ((t (:inherit org-table :foreground nil))))
                          ))

(ample-flat)
Brian Burns
la source
0

Exemple de ce que j'ai fait pour éditer spacemacs-dark, en supprimant quelques caractères gras que je n'aime pas:

  ;; on dotspacemacs/user-config:

  ;; configure spacemacs-dark theme, specifically removing bolds
  (let
      ((func "#d75fd7")
       (keyword "#4f97d7")
       (type "#ce537a"))

    (custom-theme-set-faces
     'spacemacs-dark
     `(font-lock-function-name-face ((t (:foreground ,func :inherit normal))))
     `(font-lock-keyword-face ((t (:foreground ,keyword :inherit normal))))
     `(font-lock-type-face ((t (:foreground ,type :inherit normal))))
     )
    )
Yuri Ghensev
la source
0

Il vous sera peut-être plus facile de simplement utiliser SPC SPC custom-theme-visit-theme, rechercher gruvbox, y apporter vos modifications et ensuite simplement le placer (load-file "~/.emacs.d/gruvbox-theme.el")dans votre dotspacemacs/user-configfonction.

donnaworriaboutit
la source