emacs

2016-04-15 56 views
0

突出显示函数调用但不是第一个引用列表在emacs lisp模式下,我想要突出显示所有函数调用一种颜色,并且所有引用符号都是另一种颜色。例如,在(foo 1 2 'bar)中,foo应该突出显示颜色1,'bar应该突出显示颜色2.emacs

我能够用下面的代码执行此操作,但是,它也突出显示列表中的第一个符号列表被引用。例如,在'(nil a b c)中,零应该而不是被突出显示为一个函数调用,并且该列表中的所有项目应该高亮显示为带引号的符号(颜色2)。

(defface font-lock-func-face 
    '((nil (:foreground "#6fc2ef")) 
     (t (:bold t :italic t))) 
    "Font Lock mode face used for function calls." 
    :group 'font-lock-highlighting-faces) 

(defface font-lock-quoted-face 
    '((nil (:foreground "#e1a3ee")) 
     (t (:bold t :italic t))) 
    "Font Lock mode face used for function calls." 
    :group 'font-lock-highlighting-faces) 

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 
    1 'font-lock-func-face))) 

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-quoted-face))) 

还有什么,我期待在这里的形象:答案http://imgur.com/Iluku05

回答

1

第一部分:包lisp-extra-font-lock亮点,其他中,引用的表达式。

它还突出:

  • 变量的函数和变量的参数列表由let束缚,pcase等,正常局部变量和通过使用不同的颜色由defvar定义的全局变量之间进行区分。
  • 返回引用的表达式(和未亮点所有, - 和,@转义的子表达式)

例如: enter image description here

答案的第二部分:

如果使用lisp-extra-font-lock包,如果您在启用包后将其添加为最后的规则,则突出显示功能的规则将按照您发布的规则工作。这样它不会覆盖任何其他亮点:

(font-lock-add-keywords 
'emacs-lisp-mode 
'(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>" 
    1 'font-lock-func-face)) 
'append) ;; <-- Add after all other rules 
+0

谢谢,这正是我需要:) –