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

Emacs对Elisp mode默认的语法高亮有点少,只有macro和special form,以及函数定义的语法高亮。

很久以前从doom-emacs抄到了 doomemacs/autoload.el at develop · doomemacs/doomemacs · GitHub 这个函数,让emacs和高亮函数调用和全局变量。

昨天整理配置的时候,把这段函数拿出来重构了一下,理清了逻辑,做成elispfl这个单独的package。

使用方式

(with-eval-after-load 'elisp-mode
  (require 'elispfl)
  (elispfl-mode))

Have fun!

9 个赞

用doom-emacs的是不是可以偷懒了

是的 :stuck_out_tongue: doom-emacs已经有这个选项了

Q: 上melpa吗

A: https://github.com/melpa/melpa/pull/6372

伸手:elispfl和highlight-function-calls哪个更好一点?


dolist is a Lisp macro in ‘subr.el’.

cond is a special form in ‘src/eval.c’.

这两种东西有区别吗,c源码的叫special form,lisp的叫macro?

都差不多的。只是我个人觉得elispfl的代码比较简洁,不过不支持Emacs24。


macro默认对所有参数都不求值,要手动求值。special form是对部分参数求值的(比如setq form就要对value进行求值。当然也可以理解成从C里手动求值)。还有就是从C定义和从Lisp定义的区别

1 个赞

special form 是有只能通过编译器/解释器特殊处理实現的 primitive 功能,不能用 macro 实现的。

1 个赞
1 个赞

这个把大部分default-face的都变成function face了,好像没什么用。。

有的special form纯粹是为了性能or可读性。

           ;; NOTE: We treat symbol after left round bracket as subroutine.
           ;; May trigger false positive in list literal e.g. '(foo bar),
           ;; but it's suitable for most cases.

那这里只要有个'就不要把foo亮起来?

实际上自定义的复杂 macro 不用 compiler component 是没法处理的。

可以用

'(
 foo
 bar)

加量qouted form里的内容也有写macro方面的考虑

哦!我把macro忘了

能不能和highlight-defined比较一下,哪个好呢

基本一样。elispfl的代码更简洁

1 个赞

加入了ielm的高亮

ielm

报个bug,关键字在 require 后面的时候不要高亮,比如 (require 'display-line-numbers)

我也不知道这个他为什么会这样高亮,等我回学校研究一下

同样的问题, provide 后面也高亮了.