emacs 函数原型提示的扩展

Vim、Emacs配置和使用
回复
emacs0921
帖子: 57
注册时间: 2008-09-13 23:53
送出感谢: 0
接收感谢: 0

emacs 函数原型提示的扩展

#1

帖子 emacs0921 » 2008-09-29 1:29

emacs 有一个很实用的函数原型提示的扩展,名叫msf-abbrev。我最近在学习perl,心血来潮,就做了一个基于这个扩展的扩展。

先说一下这个msf-abbrev,这是这家伙的主页:http://www.bloomington.in.us/~brutt/msf-abbrev.html。

他利用emacs的缩写绑定功能对一大堆库函数和诸如for,if之类的语句进行了绑定。绑定规则是在原本的函数名称后面加个x。

比如你输入memsetx,再键入回车或空格,emacs中就会提示给你C语言的标准库函数memset的参数类型,写入参数时可以用Tab进行缩进。

他主页上有个很眩的示例,点击主页上的demo可以观看。

我并不很精通emacs,只是按照主页上的要求下载了相关的lisp程序和一个名叫mode-abbrevs的包就可以使用提示函数原型的功能了。

接下来我发现,在那个mode-abbrevs包的里面有一大堆的子目录,比如我用C语言工作,就浏览了一下c-mode那个目录,发现里面的东西其实很简单。比如memsetx这个文件,里面就这么一行话:
memset(<field "void * s">, <field "int c">, <field "size_t n">);

稍微一猜就明白它是怎么工作的了。

接下来我又试了一下,仿照他自带文件的样子自己写个文件,做个自定义的函数,放到c-mode目录下,重启emacs后也能实现函数原型提示的功能。

于是我就写了这么个perl程序,给定一个c语言的头文件,这个perl程序会把所有在头文件中进行声明的函数提取出来,做成符合msf-abbrev格式要求的文件,把这些文件拷贝到mode-abbrevs/c-mode目录下,就可以在emacs中显示这些函数的原型提示了。

比如你有一个函数:tx_thread_create();

在emacs中键入txthreadcreatex回车或空格,就会蹦出这个函数的原型。当然,前提是你事先已经能正常使用msf-abbrev了。

我这个perl程序很简单,名字叫func_declare.pl。

你只要在终端中进入func_declare.pl的目录下,然后键入perl ./func_declare.pl <file_name>

就可以把指定的c语言头文件送给这个小小的perl程序进行分析了,它会在当前目录下输出符合msf-abbrev要就的文件。
附件
func_declare.pl.tar.gz
(895 Bytes) 下载 43 次
头像
jarodlau
帖子: 501
注册时间: 2005-09-06 20:34
送出感谢: 3 次
接收感谢: 1 次
联系:

Re: emacs 函数原型提示的扩展

#2

帖子 jarodlau » 2008-09-29 2:18

有创意

够灵光
回复

回到 “Vim和Emacs”