叠加 - 如何防止粗体面孔超越非粗体面

时间:2014-06-19 18:34:32

标签: emacs elisp

我正在寻找一些帮助,请与叠加一起控制粗体面孔。使用标准font-lock方法,通常将:bold nil放在另一个面上就可以防止它被打破。但是,在处理叠加层时,同样的概念似乎并不适用。在处理叠加层时,还有什么方法可以防止粗体渗透到其他面孔?

例如:当两个叠加重叠时,如何阻止tab-face 粗体打败hr-underscore-face

  
(defface tab-face
  '((t (:foreground "cyan" :bold t)))
  "Face for `tab-face`."
  :group 'lawlist-ruler-faces)

(defface hr-underscore-face
  '((t (:underline "yellow" :bold nil)))
  "Face for `hr-underscore-face`."
  :group 'lawlist-ruler-faces)

编辑(2014年6月19日):添加了示例.emacs配置以重现问题,以及两个屏幕截图。需要根据用户自己的设置来设置ispell-program-name的路径。

  
;; GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0,
;; NS appkit-1038.36 Version 10.6.8 (Build 10K549)) of 2014-06-01 on MP.local

(set-face-attribute 'default nil
  :background "black" :foreground "white" :font "Courier" :height 180)

(tool-bar-mode -1)

(require 'ispell)

(require 'flyspell)

(setq-default ispell-program-name
    "/Users/HOME/.0.data/.0.emacs/elpa/bin/aspell")

(custom-set-faces
  '(flyspell-incorrect ((t (:foreground "yellow" :weight bold ))))
  '(highlight ((t (:underline "yellow" :weight normal)))))

(defun zoom ()
(interactive)
  (setq buffer-face-mode-face `(:height 575))
  (buffer-face-mode 1))

(defun test-number-one ()
(interactive)
  (switch-to-buffer (get-buffer-create "test-number-ONE"))
  (zoom)
  (turn-on-flyspell)
  (setq flyspell-mark-duplications-flag nil)
  (setq flyspell-duplicate-distance 0)
  (hl-line-mode 1)
  (insert
    "This is `test-number-one`."
    "\n"
    "\n"
    "Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"
    "\n"
    "\n"
    "Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"))


(defun test-number-two ()
(interactive)
  (switch-to-buffer (get-buffer-create "test-number-TWO"))
  (zoom)
  (hl-line-mode 1)
  (insert
    "This is `test-number-two`."
    "\n"
    "\n"
    "Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"
    "\n"
    "\n"
    "Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"))

在第一个示例中,下划线是粗体。 [但是,我想学习如何使下划线始终具有正常权重(即使文本的:foreground粗体)。]

Example http://www.lawlist.com/images/example_06_19_2014_a.png


在第二个示例中,下划线是 normal

Example http://www.lawlist.com/images/example_06_19_2014_b.png

2 个答案:

答案 0 :(得分:2)

:bold是兼容性别名。要获得更好的控制,请使用:weight,例如

(defface hr-underscore-face
  '((t (:underline "yellow" :weight normal)))
  "Face for `hr-underscore-face`."
  :group 'lawlist-ruler-faces)

答案 1 :(得分:1)

我没有看到您报告的问题,即使您发布的代码(尽管我同意@Stefan关于:weight normal)。

评估你的代码我得到了这个,它显示了缓冲区中的黄色下划线和仅在最后一行上的粗体文本:

enter image description here

我错过了什么? (这是在文本模式下缓冲区,并且font-lock-mode已关闭。)