在 lisp 模式下隐藏 `(declare)` 形式

Hide `(declare)` forms in lisp mode

这其实是两个问题:

  1. 有没有人知道 emacs 的功能可以隐藏(并且可能表明它已经这样做了)lisp 代码中的选定表单?我写了一些面向性能的通用 lisp,关键函数确实包含很多 (declare (type ...)) 形式,使代码混乱。

  2. 如果没有,有人建议我从哪里获得灵感/窃取一些能让我自己写的东西吗?

干杯,谢谢!

编写一个函数,查找要隐藏的文本的开始和结束位置。然后使用 (put-text-property START END 'invisible t) 使文本不可见。

对于一个简单的例子,使用 (search-forward "(declare (type " nil t)(match-beginning 0) 是该 sexp 的开始位置,所以 (goto-char (match-beginning 0)),然后执行 (forward-sexp 1) 以到达其结束位置。然后使用 put-text-property 如上所述,隐藏从 declare sexp 开始到结束的文本。循环执行此操作,以隐藏所有此类 sexps。

为了更加小心,您可以使用允许在 sexp 等中使用可变空格(包括换行符)的正则表达式。但以上内容应该可以让您入门。

(要使不可见的文本再次可见,只需使用 (put-text-property START END 'invisible nil)。)