首页 > 专业技术 > emacs补全引擎lcEngine

emacs补全引擎lcEngine

2011年10月2日

很久没写文章了,因为我正处于人生一个比较大的拐点:结婚了,并且宝宝将要出生了!
说实话,还有点没准备好,但既然木已成舟,就顺其自然吧。

我之前介绍过vim,并且文中还提到了emacs,说它慢,所以就抛弃并使用vim了。其实那时我不太了解emacs,通过后来的学习,我逐渐发现了它的优点,并且渐渐地觉得离不了它了。emacs相比vim主要有以下优点(从个人感觉上说):
1.扩展性无限,学习其脚本语言elisp ,相当于多学习了一门语言:lisp。
2.有org模式 ,写笔记和TODO相当爽。
3.没有vim那样的按键模式,不用频繁地切换。
4.我因为后来使用colemak键盘布局方案,基本无法正常地使用vim,而在emacs中运用自如。
我的emacs配置在这里:https://github.com/lynnux/emacs_d

虽然上班时用的还是VS+VXA+XKeymacs写代码,但是作为一名GNU的爱好者,我想把所有工作都转到emacs下面做。代码补全也许是很大的一问题,以前用vim的时候就知道libclang这个补全模块,而且vim也有相关的插件,但是emacs中只有调用clang进程的补全插件,补全速度不是很快。我决心改变这一状况,通过非正规的hook手段,最终搞定了。先看图:

代码在:https://github.com/lynnux/lcEngine目前可试用的bin:http://down.qiannao.com/space/file/lynnux/share/2011/10/2/lcEngine.7z/.page

鉴于emacs属于比较小众的软件,我就不多介绍了,不过lcEngine的实现思路还是可以看看的,先搜索emacs的subr函数的地址,添加lcEngine.dll到函数导入表,在lcEngine加载的时候detour emacs内部的subr函数,有call-process和process-send-region和没有导出的start-process等,通过这些函数可以得到emacs的buffer的内存地址,供libclang相关函数调用。

该文章一来凑数,二来表明我还活着。

for foreigner:
lcEngine is an emacs extension, which using libclang for code completion. because of its implementation, only support win32 platform and the version of emacs must be greater or equal to 23.2.
it’s very fast , cost no more than 0.15 seconds on completion, for more informations, please visit the source home page:https://github.com/lynnux/lcEngine, you will get the lastest version from there.

分类: 专业技术 标签:
本文的评论功能被关闭了.