Làm cách nào để thay đổi các phần của một chủ đề tùy chỉnh?


21

Tôi đang sử dụng một trong những chủ đề tùy chỉnh được xác định trước đi kèm với Spacemacs (zenburn).

Làm cách nào tôi có thể sửa đổi các phần cụ thể của chủ đề, ví dụ như chỉ thay đổi màu phông chữ được sử dụng cho nhận xét?


2
Bạn có chắc bạn có nghĩa là chủ đề màu sắc và không phải chủ đề tùy chỉnh ? Nếu bạn không sử dụng bên thứ 3 color-theme.elthì có lẽ bạn có nghĩa là chủ đề tùy chỉnh. Trong trường hợp đó, xin vui lòng chỉnh sửa câu hỏi của bạn cho phù hợp. Xem chủ đề màu sắc và tùy chỉnh .
vẽ

Câu trả lời:


13

Tôi ủng hộ việc sử dụng custom-theme-set-facesđể xác định lại cách chủ đề hiển thị một khuôn mặt cụ thể, ví dụ:

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

Đối với trường hợp cụ thể zenburn, chủ đề tự xác định các màu khác nhau và một macro trong đó các màu đó được liên kết với các tên biến, vì vậy bạn có thể viết như trên:

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

bạn phải viết đoạn mã này ở đâu? trong .spacemacs?
ChiseledAbs

1
Không có ý kiến, xin lỗi; Tôi không sử dụng Spacemacs. Về nguyên tắc, tất cả những gì bạn cần làm là khiến mã được đánh giá đôi khi sau khi zenburnchủ đề đã được tải.
Aaron Harris

8

Trong spacemacs, cài đặt lớp theming, xem https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Btheme/theming

Ví dụ, tôi đã sau đây snipped trong dotspacemacs/user-initcủa tôi .spacemacsđể điều chỉnh màu nền và linenumber của gruvbox và solarized ánh sáng chủ đề:

  (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

Tôi đã thêm lời khuyên cho chức năng tải chủ đề để ghi đè một số khuôn mặt nhất định - theo cách đó bạn có thể tiếp tục sử dụng chủ đề tải như bình thường để chọn chủ đề và nó sẽ tự động áp dụng ghi đè.

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

Nó hoạt động và thật tuyệt khi có một phần của giao diện, nhưng có lẽ đơn giản nhất là chỉ tạo một chức năng cho từng chủ đề mà bạn sử dụng và gọi các khuôn mặt tùy chỉnh chủ đề sau khi tải nó -

(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

Ví dụ về những gì tôi đã làm để chỉnh sửa spacemacs-dark, xóa một vài chữ in đậm mà tôi không thích:

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

Bạn có thể dễ dàng hơn khi chỉ sử dụng SPC SPC custom-theme-visit-theme, tìm gruvbox, thực hiện các chỉnh sửa của mình ở đó và sau đó chỉ cần đặt (load-file "~/.emacs.d/gruvbox-theme.el")vào dotspacemacs/user-configchức năng của bạn .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.