修改rst.el中的颜色

时间:2010-08-05 19:42:45

标签: emacs elisp restructuredtext

在Emacs中,我使用的是带有深色背景和浅色文字的配色方案。使用.rst文件时,我有一个使用rst.el的模式。然而,rst.el突出了具有浅色背景颜色的标题,这使得阅读光文本成为不可能!

我认为这是rst.el中负责背景颜色的代码部分:

(defgroup rst-faces-defaults nil
  "Values used to generate default faces for section titles on all levels.
Tweak these if you are content with how section title faces are built in
general but you do not like the details."
  :group 'rst-faces
  :version "21.1")

(defun rst-define-level-faces ()
  "Define the faces for the section title text faces from the values."
  ;; All variables used here must be checked in `rst-set-level-default'
  (let ((i 1))
    (while (<= i rst-level-face-max)
      (let ((sym (intern (format "rst-level-%d-face" i)))
        (doc (format "Face for showing section title text at level %d" i))
        (col (format ("gray10")))
    (make-empty-face sym)
    (set-face-doc-string sym doc)
    (set-face-background sym col)
    (set sym sym)
    (setq i (1+ i))))))

(defun rst-set-level-default (sym val)
  "Set a customized value affecting section title text face and recompute the
faces."
  (custom-set-default sym val)
  ;; Also defines the faces initially when all values are available
  (and (boundp 'rst-level-face-max)
       (boundp 'rst-level-face-format-light)
       (boundp 'rst-level-face-base-color)
       (boundp 'rst-level-face-step-light)
       (boundp 'rst-level-face-base-light)
       (rst-define-level-faces)))

;; Faces for displaying items on several levels; these definitions define
;; different shades of grey where the lightest one (i.e. least contrasting) is
;; used for level 1
(defcustom rst-level-face-max 6
  "Maximum depth of levels for which section title faces are defined."
  :group 'rst-faces-defaults
  :type '(integer)
  :set 'rst-set-level-default)
(defcustom rst-level-face-base-color "grey"
  "The base name of the color to be used for creating background colors in
ection title faces for all levels."
  :group 'rst-faces-defaults
  :type '(string)
  :set 'rst-set-level-default)
(defcustom rst-level-face-base-light
  (if (eq frame-background-mode 'dark)
      85
    15)
  "The lightness factor for the base color. This value is used for level 1. The
default depends on whether the value of `frame-background-mode' is `dark' or
not."
  :group 'rst-faces-defaults
  :type '(integer)
  :set 'rst-set-level-default)
(defcustom rst-level-face-format-light "%2d"
  "The format for the lightness factor appended to the base name of the color.
This value is expanded by `format' with an integer."
  :group 'rst-faces-defaults
  :type '(string)
  :set 'rst-set-level-default)
(defcustom rst-level-face-step-light
  (if (eq frame-background-mode 'dark)
     -7
     7)
  "The step width to use for the next color. The formula

    `rst-level-face-base-light'
    + (`rst-level-face-max' - 1) * `rst-level-face-step-light'

must result in a color level which appended to `rst-level-face-base-color'
using `rst-level-face-format-light' results in a valid color such as `grey50'.
This color is used as background for section title text on level
`rst-level-face-max'."
  :group 'rst-faces-defaults
  :type '(integer)
  :set 'rst-set-level-default)

(defcustom rst-adornment-faces-alist
  (let ((alist '((t . font-lock-keyword-face)
         (nil . font-lock-keyword-face)))
    (i 1))
    (while (<= i rst-level-face-max)
      (nconc alist (list (cons i (intern (format "rst-level-%d-face" i)))))
      (setq i (1+ i)))
    alist)
  "Provides faces for the various adornment types. Key is a number (for the
section title text of that level), t (for transitions) or nil (for section
title adornment). If you generally do not like how section title text faces are
set up tweak here. If the general idea is ok for you but you do not like the
details check the Rst Faces Defaults group."
  :group 'rst-faces
  :type '(alist
      :key-type
      (choice
       (integer
        :tag
        "Section level (may not be bigger than `rst-level-face-max')")
       (boolean :tag "transitions (on) / section title adornment (off)"))
      :value-type (face))
  :set-after '(rst-level-face-max))

我尝试将'灰色'改为其他东西,但它并没有改变一件事。有什么帮助吗?

3 个答案:

答案 0 :(得分:6)

很抱歉找到一个老问题。

要更改的字段为Rst Level Face Base Light。将值从默认值85更改为~51使文本可读,但保持标题的突出显示。

它利用系统命名的grey%2d颜色来遮蔽基于背景的剖面深度。

答案 1 :(得分:5)

M-x customize-group rst-faces

如果您坚持使用代码,那么使用自定义设置一些内容,查看生成的代码并将其用作模型。但是,用老式的.emacs代码做它不再是一种好形式。

答案 2 :(得分:4)

使用

 M-x customize-group rst-faces-default 

并将Rst Level Face Base Color的值设置为black,使标题更易于阅读。请务必为将来的所有会话设置值。