Come cambio parti di un tema personalizzato?


21

Sto usando uno dei temi personalizzati predefiniti forniti in bundle con Spacemacs (zenburn).

Come posso modificare parti specifiche del tema, ad esempio cambiare il colore del carattere usato per i commenti?


2
Sei sicuro di voler dire tema cromatico e non tema personalizzato ? Se non si utilizza la terza parte color-theme.el, probabilmente si intende un tema personalizzato. In tal caso, modifica la domanda di conseguenza. Vedi Colore e temi personalizzati .
Ha

Risposte:


13

Preferisco usare custom-theme-set-facesper ridefinire il modo in cui il tema mostra un volto particolare, ad es.

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

Per il caso specifico di zenburn, il tema stesso definisce vari colori e una macro in cui sono associati a nomi di variabili, in modo da poter scrivere quanto sopra come:

(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))))))

dove dovresti scrivere questo pezzo di codice? in .spacemacs?
CesellatoAbs

1
Nessuna idea, scusa; Non uso Spacemacs. In linea di principio, tuttavia, è sufficiente che il codice venga valutato dopo il zenburncaricamento del tema.
Aaron Harris,

8

In spacemacs, installa il layer theming, vedi https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bthemes/theming

Ad esempio, ho il seguente frammento nel dotspacemacs/user-initmio .spacemacsper regolare lo sfondo e il colore del numero di biancheria del gruvbox e il tema della luce solare:

  (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)
       )
))

4

Ho aggiunto un consiglio alla funzione di caricamento del tema per sostituire determinate facce: in questo modo puoi continuare a usare il caricamento del tema come di consueto per selezionare un tema e applicherà automaticamente le sostituzioni.

(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))))
                                          ))

Funziona e sarebbe bello avere come parte dell'interfaccia, ma probabilmente è più semplice creare una funzione per ogni tema che usi e chiamare volti-temi-personalizzati dopo averlo caricato -

(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)

0

Esempio di cosa ho fatto per modificare spacemacs-dark, rimuovendo un paio di grassetti che non mi piacciono:

  ;; 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))))
     )
    )

0

Potrebbe essere più semplice utilizzare SPC SPC custom-theme-visit-theme, trovare gruvbox, apportare le modifiche lì e inserirle (load-file "~/.emacs.d/gruvbox-theme.el")nella dotspacemacs/user-configfunzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.