在Emacs 21.3.1的C/C++模式中,如何更改#if 0 ... #endif块中代码的颜色?

4

1
那是一个非常老的 Emacs 版本。你能升级吗? - scottfrazer
1个回答

3

cpp-highlight-mode可以在无需用户交互的情况下运行。这是我设置的方法:

(defun cpp-highlight-if-0/1 ()
  "Modify the face of text in between #if 0 ... #endif."
  (interactive)
  (setq cpp-known-face '(background-color . "dim gray"))
  (setq cpp-unknown-face 'default)
  (setq cpp-face-type 'dark)
  (setq cpp-known-writable 't)
  (setq cpp-unknown-writable 't)
  (setq cpp-edit-list
        '((#("1" 0 1
             (fontified nil))
           nil
           (background-color . "dim gray")
           both nil)
          (#("0" 0 1
             (fontified nil))
           (background-color . "dim gray")
           nil
           both nil)))
  (cpp-highlight-buffer t))

(defun jpk/c-mode-hook ()
  (cpp-highlight-if-0/1)
  (add-hook 'after-save-hook 'cpp-highlight-if-0/1 'append 'local)
  )

(add-hook 'c-mode-common-hook 'jpk/c-mode-hook)

关键在于找出cpp-highlight-mode查看cpp-edit-list的方式。我按照交互式的方式设置了所需内容,然后通过C-h v查看生成的cpp-edit-list

不错!cpp-edit-list的每个子列表的第一个元素是用来做什么的?文档只描述它是一个字符串,但你似乎在更多方面使用它(例如,#("1" 0 1 (fontified nil)))。 - Michaël
我认为我在答案中的内容是复制-粘贴。出于某些原因,我的init.el中不再有该函数。但文档说它是一个四元素列表:https://github.com/emacs-mirror/emacs/blob/master/lisp/progmodes/cpp.el#L92 - jpkotta
谢谢!是的,这是一个四元素列表,但第一个元素应该只是一个字符串,而不是#("1" 0 1 (fontified nil))。尽管它确实可以工作,但我对此感到困惑! - Michaël
1
第一个元素可能是一个复杂的字体字符串,但在这种情况下似乎可以像普通字符串一样使用。例如,尝试在具有彩色文本的缓冲区上使用buffer-substring命令。就像我说的那样,这可能只是复制粘贴,如果它只是一个简单的字符串,那么可能会更好。 - jpkotta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接