当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : emacs 函数原型提示的扩展
帖子发表于 : 2008-09-29 1:29 

注册: 2008-09-13 23:53
帖子: 57
送出感谢: 0 次
接收感谢: 0 次
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]
被下载 39 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: emacs 函数原型提示的扩展
帖子发表于 : 2008-09-29 2:18 
头像

注册: 2005-09-06 20:34
帖子: 501
送出感谢: 3
接收感谢: 1
有创意

够灵光


_________________
arch
awesome
blog
+github
freebsd handbook中文版


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译