[emacs] org-mode风格的代码分段与折叠

Emacs的代码折叠扩展大概有三类
1. 根据语法折叠,被折叠的是类/函数或者if/for等结果语句
2. 根据标记折叠,被折叠的多是编码人员划分的区段(一般是在注释中方式特殊的标记)
3. 自行选定一个区域折叠起来

hideshow, outline属于第一类;
fold.el, folding.el, foldingo,el和allout.el属于第二类;
hide-region.el属于第三类;

第一类里面的hs-minor-mode和outline-minor-mode都比较好用,配合上hideshowvis.el和qtmstr-outline.el还可以取得不错的视觉效果(在左边显示可折叠标记,否则不知道当前代码是否可折叠,使用起来还是挺不方便的)。

第三类也没有什么好说的。

主要的问题在于第二类,一旦代码写长了,分区段这个需求是存在的,但上述几个都不太好用: fold.el, folding.el和foldingo.el都是需要前后两个标记的,而且不支持多级;而allout.el没有上述两个缺点,配合上allout-widgets.el可以实现漂亮的视觉效果,但allout有两个比较严重的缺点: 1)不稳定,甚至导致Emacs死翘翘;2)光标在heading处的overlay上时,有些按键行为很奇怪;

-----------
用过org-mode之后,就象能不能在代码中使用这种风格的折叠的方式。其实outline-mode也可以通过修改outline-regexp使之变成第二类(基于标记的分区段折叠),但最期望拥有的org-mode那种方便的单键折叠方式以及清晰的分段标题,还得自己折腾。

 

折腾过程见下面“评论”,效果图如下。具体代码请见 http://code.google.com/p/bamanzi-misc/source/browse/trunk/_emacs.d/lisp/outline-org-like.el

posted @ 2011-10-09 16:33  巴蛮子  阅读(4067)  评论(12编辑  收藏  举报