emacs的折叠功能比较散,通常我折叠括号用hs-minor-mode,折叠c语言的宏用hideif,折叠选中区域用hide-region.el,但这个hide-region.el默认的功能似乎比较弱。用hide-region-hide把选择区域折叠起来,然后记录到一个ring里面,用hide-region-unhide 从 ring 里面取出最新的折叠展开。没有把指定折叠展开的功能。
所以我写了个增强版,首先把记录折叠的 ring 变成 buffer-local 变量,这样再用 hide-region-unhide 时,每个 buffer 都有一个自己的 ring。
然后增加了几个函数:
hide-region-unhide-below,从光标往下找到最近的折叠打开,如果光标往下没有折叠的话就从 ring 里面找出最近(时间上)的折叠打开。
hide-region-toggle, 切换当前buffer中所有折叠的状态,如果是折叠的就全部打开,如果是打开的就全部折叠。
hide-region-unhide-all, 把当前buffer中的所有折叠打开。
emacs hide-region 增强版
-
- 帖子: 94
- 注册时间: 2009-02-25 19:44
-
- 帖子: 583
- 注册时间: 2008-10-15 10:49
- 来自: CS
Re: emacs hide-region 增强版

代码: 全选
_____________
< 呜呜buntu >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
-
- 帖子: 42
- 注册时间: 2007-02-06 22:52
Re: emacs hide-region 增强版
唉哟,妈啊,这也太强大了吧,哈哈哈哈哈,牛人啊
-
- 帖子: 16
- 注册时间: 2007-01-02 20:36
- 来自: 中山大学
Re: emacs hide-region 增强版
yupeng820921, yupeng820921,
to yupeng820921:
你的hide-region-toggle蛮实用了, 谢了。
两个小问题找你商量一下:
1)我们有没有联系hide-region这个package的作者([email protected])。
一来,他极有可能实现了加强版的hide-region.el。
二来,如果我们将两者combine之后,贴到http://www.emacswiki.org/emacs/HideRegion中,这样所有人都可以用到你改进后的版本了。
2) hide-region-toggle貌似还可以改进一下。
我先是选中一个区域之后,运行hide-region-hide,然后多次调用hide-region-toggle.
当它展开时,区域前后还是有@[, ]@.
这个效果感觉和正常理解不一样。
由于本人耐性和elisp的水平有限, 似懂非懂地读了一下hide-region-toggle的实现代码。
感觉一个更直观的实现可以先判断字符串:hide-region-before-string(@[)和hide-region-after-string(]@),然后再调用hide-region-hide/hide-region-unhide.
[email protected]
to yupeng820921:
你的hide-region-toggle蛮实用了, 谢了。
两个小问题找你商量一下:
1)我们有没有联系hide-region这个package的作者([email protected])。
一来,他极有可能实现了加强版的hide-region.el。
二来,如果我们将两者combine之后,贴到http://www.emacswiki.org/emacs/HideRegion中,这样所有人都可以用到你改进后的版本了。
2) hide-region-toggle貌似还可以改进一下。
我先是选中一个区域之后,运行hide-region-hide,然后多次调用hide-region-toggle.
当它展开时,区域前后还是有@[, ]@.
这个效果感觉和正常理解不一样。
由于本人耐性和elisp的水平有限, 似懂非懂地读了一下hide-region-toggle的实现代码。
感觉一个更直观的实现可以先判断字符串:hide-region-before-string(@[)和hide-region-after-string(]@),然后再调用hide-region-hide/hide-region-unhide.
[email protected]