在 lisp 模式下隐藏 `(declare)` 形式
Hide `(declare)` forms in lisp mode
这其实是两个问题:
有没有人知道 emacs 的功能可以隐藏(并且可能表明它已经这样做了)lisp 代码中的选定表单?我写了一些面向性能的通用 lisp,关键函数确实包含很多 (declare (type ...))
形式,使代码混乱。
如果没有,有人建议我从哪里获得灵感/窃取一些能让我自己写的东西吗?
干杯,谢谢!
编写一个函数,查找要隐藏的文本的开始和结束位置。然后使用 (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)
。)
这其实是两个问题:
有没有人知道 emacs 的功能可以隐藏(并且可能表明它已经这样做了)lisp 代码中的选定表单?我写了一些面向性能的通用 lisp,关键函数确实包含很多
(declare (type ...))
形式,使代码混乱。如果没有,有人建议我从哪里获得灵感/窃取一些能让我自己写的东西吗?
干杯,谢谢!
编写一个函数,查找要隐藏的文本的开始和结束位置。然后使用 (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)
。)