如何通过覆盖Emacs中的set-face-attribute来禁用粗体字体?

时间:2013-12-19 12:50:42

标签: emacs elisp emacs-faces

我们的想法是重新定义set-face-attribute,使其除了:weight属性之外通常设置面属性,normal属性应始终设置为(fset 'original-set-face-attribute (symbol-function 'set-face-attribute)) (defun set-face-attribute (face frame &rest args) (progn (original-set-face-attribute face frame args))) (默认值,我认为)。有了这个,我希望一劳永逸地在Emacs中禁用粗体字。

我明白了:

(make-face-bold 'default)

到目前为止,它不起作用。如果我Wrong type argument: symbolp, (:weight bold),我会:weight。我想我拥有的 要做的是从参数列表中删除包含args的元素 {{1}}。

3 个答案:

答案 0 :(得分:3)

以下是一些启动你的代码:

(defadvice set-face-attribute
    (before no-bold (face frame &rest args) activate)
  (setq args
        (mapcar (lambda(x) (if (eq x 'bold) 'normal x))
                args)))

我在大多数情况下都看过这项工作,除了basic-faces 不要拨打set-face-attribute,例如error脸。

答案 1 :(得分:2)

根据Aaron的建议,这是另一个使用的解决方案 face-remap-add-relative

(defun remap-faces-default-attributes ()
  (let ((family (face-attribute 'default :family))
        (height (face-attribute 'default :height)))
    (mapcar (lambda (face)
              (face-remap-add-relative
               face :family family :weight 'normal :height height))
          (face-list))))

(when (display-graphic-p)
  (add-hook 'minibuffer-setup-hook 'remap-faces-default-attributes)
  (add-hook 'change-major-mode-after-body-hook 'remap-faces-default-attributes))

这个版本摆脱了各地的粗体字体以及可变宽度字体 并将所有面设置为相同的高度。基本上它就像在终端窗口中运行Emacs,除了更多的颜色。

答案 2 :(得分:0)

好的!我改进了abo-abo的解决方案,这就是我的想法 用:

(defadvice set-face-attribute
  (before ignore-attributes (face frame &rest args) activate)
  (setq args
        (apply 'nconc
               (mapcar (lambda (i)
                         (let ((attribute (nth i args))
                               (value (nth (1+ i) args)))
                           (if (not (memq attribute
                                          set-face-ignore-attributes))
                               (list attribute value))))
                       (number-sequence 0 (1- (length args)) 2)))))

(setq set-face-ignore-attributes '(:weight :height :box))

它会停用:height:weight:box属性(这是可配置的 对于大多数字体,通过set-face-ignore-attributes变量)。为了这个 工作,它必须在字体前init.el的最开始 属性已设置。