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.

分类: 专业技术 标签:

郑码推广之C郑

2011年2月16日 没有评论

其实我很早就想推广郑码这个输入法了,只是自己使用不精,还没底气。虽然现在也不咋样,但是最近因为对郑码的字根分布略有研究,稍微对它加以了改进,推出了C郑。

郑码是一种形码输入法,个人觉得它比五笔要好很多,打字非常舒服。关于郑码的介绍和学习资料,请读者自行google或百度。

我这里要介绍的是自己现在用的改进了的郑码,我取名为C郑,因为我最近尝试使用colemak键盘布局,发现打郑码相当之恼火,遂决定改变码表,结果在改变码表的时候发现如果对郑码现有的字根分布加以修改,会对使用舒服度和速度有相当的提升!

新分布的字根图,其中副根的编码等没有修改,这个是其它地方弄过来改的图:

如何使用:推荐小小输入法平台,官方网站http://yong.uueasy.com。我写了一个工具可以直接把码表转换成上面这个图的形式。
C郑的特点是:
舍弃P键不用,把;键加入到字根编码中,并且尽可能地把常用字根的分布在中间一排,80%的常用字的取码都至少有一键在中间这排。尤其是使用频率相当高的y键放到了现在的l键上,可以减少移动当量(y键是不怎么好按的)。
总的说来,优化的有原R、Y,N,O上的字根,其它改变因这些而移位。
分类: 专业技术 标签:

vim代码补全之clang complete

2010年11月17日 没有评论

好久没有写博客了,其实期间也经历了很多事,但大多不大不小,感觉没有写的必要。

越来越对免费的东西感兴趣了,甚至有某种类似“洁癖”的感觉——如果两个软件有类似的功能,一定先看免费的。吃饭的家伙也不例外,我尝试了VCExpress,CodeBlocks,Ecplise CDT,CodeLite,vim,emacs等,它们都是免费的,但是各个使用起来始终达不到在VS+VXA(VC助手)+ViEmu的那样的顺手,当然VS也是有缺点的,首先不是免费而且价格高昂,其次它的卡让我觉得很不爽,再次VXA和ViEmu这些插件也都不是免费的,OMG!

CB不错,我一直关注它,尤其是最近codecomplete插件写得越来越好了,不过一旦插件多了,启动慢,而且也不支持vim或emacs键法——说到这,有个XKeymacs可以让所有windows程序使用emacs键绑定,这在一定程度上加快了代码编写速度,但是我觉得编辑文字最快的还是vim。

其它如EclipseCDT也很好,尤其是代码完成等,但是对windows平台程序的开发支持有限,而且启动时间超长。

VCExpress不错,不足的是不能安装插件。

总的说来,启动快,编辑文字快,代码补全是我的主要要求,我觉得要是vim可以弄成跟IDE一个效果,那是最爽的,我一直在尝试。然后有了这篇文章。

vim现存有很多代码补全插件,有autocomplpop,omnicppcomplete,NeoComplCache等,补全的依据主要是tags,我主要用的是omnicppcomplete。之前装过NeoComplCache,貌似很多文件,我疑心它对速度有影响我就没用了,因为我的gvim是绿色版的,只安装了必要的插件,去掉了大部分不必要的东西。autocomplpop没用过,看介绍貌似是自动弹出下拉框的,这个倒是不太需要。

现在介绍的是一个新的代码补全插件,clang complete

名称:clang complete

地址:http://www.vim.org/scripts/script.php?script_id=3302

简介:(我翻译下)这个插件能够精确地补全C, C++, Objective-C 和 Objective-C++语言的代码。

你不需要任何tag来进行补全了!只需要装个clang就行了,补全c++推荐clang 2.8版本以上。当你输入.->::后它会自动地补全代码,如果你想即时补全,按C-X C-U(以后可能会设成omnicomplete的键绑定)。clang会分析你的代码,找出错误并且高亮它们!

什么是clang ? 简单地说就是一个c/c++的代码分析前端,后端是LLVM这个编译层,几乎所有语言都可以通LLVM这个后端来生成新的编译系统。由于clang专注于代码分析,由此沿生成很多实用的工具,代码补全就是其中的一个。

不懂这个概念也无所谓,但是必须要clang这个东东,先到这里下载http://apt.jenslody.de/downloads/clang_win32.7z

下载后解压,解压后把clang所在的目录添加到PATH环境变量中去,环境变量可能不会即时生效,这时注销一下再登录就行了。

然后下载那个clang complete插件,把它放到vim的plugin目录里去,我建议你用最新版的clang complete,在这里:http://github.com/Rip-Rip/clang_complete

另外你还需要mingw编程环境,因为clang暂时只支持gcc环境(貌似可以支持msvc,我没测试)

这个时候你就可以写个非常简单的程序测试了,注意这个程序不能include任何C++头文件,那样的话是不会提示的。

不能include的原因是clang不能正确编译你的代码,因为它找不到gcc头文件,这说明clang还不能完全替换gcc,因为gcc编译一个文件时会自动查找到头文件,而clang还不是这样。还需要做下面的工作:

在代码文件的目录建一个名为.clang_complete的文件(explorer手动不能创建,我是在cmd里用type 123>>.clang_complete才建立起来的),里面是gcc编译时包含头文件的参数,内容如下(你要根据实际情况改成你的路径):

-ID:\greensoft\codeblocks\share\minGW\include
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
到这一步就可以得到补全提示了,注意代码必须要准确无误才能有补全提示,效果图1:
另外,因为此插件是生成一个临时文件然后调用clang,所以速度可能有点慢,特别是代码有点多的情况下,这时你可以使用插件作者给出的方法,生成一个pch类似vc里的预编译文件,方法是:建立一个头文件如pch.h,里面是include语句,如:
#include <iostream>
#include <vector>
#include <string>
然后用下面的命令会生成一个pch.pch文件:
clang -x c++-header ./pch.h -fno-exceptions -fnu-runtime -o ./pch.pch -ID:\greensoft\codeblocks\share\minGW\include -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\ -ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
这时那个.clang_complete要加内容,最后是:
-include-pch pch.pch -fgnu-runtime
-ID:\greensoft\codeblocks\share\minGW\include
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\backward\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include\c++\mingw32\
-ID:\greensoft\codeblocks\share\minGW\lib\gcc\mingw32\4.5.0\include-fixed\
这时你会发现代码提示更快了,两来几张图:
分类: 专业技术 标签:

TCLaunch

2010年8月14日 没有评论

TCLaunch

TCLaunch是Total Commander(一款文件管理软件,以下简称TC)的辅助工具。

功能:使TC具有双击返回上级目录的功能,另外辅助脚本(需要安装autohotkey)可以达到按Win+E键显示和隐藏TC(需要自己配置TC路径)。

注:如果安装了360,需要暂时关闭360才能启动TCLaunch.exe。

下载:http://tclaunch.googlecode.com/files/TCLaunch0.33.zip

最新版本请留意http://code.google.com/p/tclaunch/downloads/list

源码:svn checkout https://tclaunch.googlecode.com/svn/trunk/

开源协议:遵循GPL2,使用代码和修改发布者也必须开源,更不能用于商业用途!

更新说明:

0.31-0.33:修复很多情况下双击出错的bug。

0.3:增加双击列表空白外返回父目录功能

0.2:Win+HJKL在列表上下左右移动(已去掉,由AutoHotKey脚本实现)

0.1:Win+T显示和隐藏TC(已去掉,由AutoHotKey脚本实现)

分类: 专业技术, 作品集 标签:

80后的才看得懂

2010年6月12日 没有评论

依稀回忆起了童年的影子,最真实的时光。

分类: 心情随笔 标签: