elispfl -- 增强emacs-lisp mode的语法高亮

默认就会对requireprovide的feature着色。不过elispfl恰好把provide和require的颜色改成了和他们接受的参数的一样。

这个commit加入了elispfl-exclude-rule-functions允许用户自定义排除elispfl高亮的规则,同时把provide和require加入了排除规则里, 现在应该会用默认着色处理他们了

image

还有list也有问题

list那问题我没动,因为不太好判断具体情况。比如eval和宏定义就要用到quote

还是改了, 似乎用宏基本都用backquote了

试用了下,还是highlight-defined更完善更稳定,性能就不清楚了,直观感受差别不大。

还没上elpa吗

讲道理,elispfl和highlight-defined的matcher都一模一样的,可能highlight-defined内置的face比较多吧。

另外highlight-defined似乎也会有lazycat提到的require,provide和feature染上同一个颜色的问题

1 个赞

想用elpa可以用这个

不知为何,我这里 ielm 的高亮不工作

2019-12-12-194010_199x62_scrot

我的配置:

(use-package elispfl
  :straight (:host github :repo "cireu/elispfl")
  :hook ((emacs-lisp-mode . elispfl-mode)
         (ielm-mode . elispfl-ielm-mode)))

emacs-lisp-mode 下工作正常。在 ielm 里手动开关 elispfl-ielm-mode 也没有效果。

ielm执行一行的代码,回车后会被ielm自己的高亮覆盖掉。好像ielm那个覆盖的逻辑挺复杂的,我就没管

%E5%9B%BE%E7%89%87

我这里在没回车的时候也不会高亮,但是查出原因了,我需要先启用 elispfl-mode,再启用 elispfl-ielm-mode 才会有效果。把那个 hook 的函数改了个

(lambda ()
  (elispfl-mode)
  (elispfl-ielm-mode))

就好了。可能一般都是先在 emacs-lisp-mode 里写点东西(顺便就启用了 elispfl-mode),再打开 ielm,所以不容易发现这个问题。

1 个赞

这的确是个问题,我修复一下

低级错误,复制粘贴的时候忘记把mode variable的变量也改过去了……

1 个赞

从你这截图里看,我不明白为什么 (booleanp sym)和(fboundp sym)的颜色不一样,不都是函数调用吗?

fboundp is a function defined in data.c.

booleanp is a compiled function defined in subr.el.

这就是区别,一个Lisp函数和一个C原子函数的区别

1 个赞

很奇怪,把elispfl-mode加到emacs-lisp-mode-hook里面不生效,按照readme里面的usage来倒是可以的。。。不知道是不是emacs29改了什么东西