Bagaimana cara mengubah bagian dari tema khusus?

21

Saya menggunakan salah satu tema khusus yang sudah ditentukan sebelumnya yang dibundel dengan Spacemacs (zenburn).

Bagaimana saya bisa memodifikasi bagian tertentu dari tema, misalnya hanya mengubah warna font yang digunakan untuk komentar?

Running Turtle
sumber
2
Apakah Anda yakin maksud Anda tema warna dan bukan tema kustom ? Jika Anda tidak menggunakan pihak ke-3 color-theme.elmaka Anda mungkin bermaksud tema khusus. Dalam hal ini, harap edit pertanyaan Anda sesuai. Lihat Warna dan Tema Kustom .
Drew

Jawaban:

13

Saya lebih suka menggunakan custom-theme-set-facesuntuk mendefinisikan kembali bagaimana tema menampilkan wajah tertentu, misalnya,

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

Untuk kasus spesifik zenburn, tema itu sendiri mendefinisikan berbagai warna dan makro yang terikat dengan nama variabel, sehingga Anda dapat menulis di atas sebagai:

(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
sumber
di mana Anda seharusnya menulis potongan kode ini? di .spacemacs?
ChiseledAbs
1
Tidak tahu, maaf; Saya tidak menggunakan Spacemacs. Namun pada prinsipnya, yang perlu Anda lakukan adalah menyebabkan kode dievaluasi beberapa saat setelah zenburntema dimuat.
Aaron Harris
8

Di spacemacs, instal layer theming, lihat https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Bthemes/theming

Sebagai contoh, saya memiliki yang berikut ini di dalam dotspacemacs/user-initsaya .spacemacsuntuk menyesuaikan warna latar belakang dan linenumber dari gruvbox dan tema cahaya solarized:

  (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
sumber
4

Saya menambahkan saran ke fungsi load-theme untuk menimpa wajah-wajah tertentu - dengan begitu Anda dapat terus menggunakan load-theme seperti biasa untuk memilih tema dan itu akan menerapkan override secara otomatis.

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

Ini berfungsi, dan akan menyenangkan untuk memiliki sebagai bagian dari antarmuka, tetapi mungkin paling sederhana untuk hanya membuat fungsi untuk setiap tema yang Anda gunakan dan memanggil tema-set-wajah-kustom setelah memuatnya -

(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
sumber
0

Contoh apa yang saya lakukan untuk mengedit spacemacs-dark, menghapus beberapa huruf tebal yang tidak saya sukai:

  ;; 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
sumber
0

Mungkin lebih mudah bagi Anda untuk hanya menggunakan SPC SPC custom-theme-visit-theme, menemukan gruvbox, melakukan pengeditan di sana dan kemudian hanya menempatkan (load-file "~/.emacs.d/gruvbox-theme.el")dalam dotspacemacs/user-configfungsi Anda .

donnaworriaboutit
sumber