分页: 1 / 1

emacs hide-region 增强版

发表于 : 2009-08-28 21:12
yupeng820921
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中的所有折叠打开。

hide-region.el.gz
(2.25 KiB) 已下载 102 次

Re: emacs hide-region 增强版

发表于 : 2009-08-29 12:35
wenjianhn
:em11

Re: emacs hide-region 增强版

发表于 : 2009-08-31 14:26
lijihuai
唉哟,妈啊,这也太强大了吧,哈哈哈哈哈,牛人啊

Re: emacs hide-region 增强版

发表于 : 2010-05-17 21:53
filebat
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]