2011-09-21 61 views
7

我正在使用Ruby-Tk开发OS X的桌面应用程序,并且我想为该应用程序提供Apple Events界面。这意味着应用程序将定义它将响应的AppleScript命令字典(对应于发送到应用程序的Apple事件),用户/其他应用程序可以使用AppleScript命令编写Ruby-Tk应用程序的脚本。其他脚本语言支持这样的功能 - Python通过http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/的py-aemreceive库和Tcl通过http://tclae.sourceforge.net/的tclAE库。我一直在寻找Ruby中类似的功能,并且已经空了。Ruby是否提供了一种在OS X上响应Apple事件的机制?

一个可能的机制是rubyobjc桥,它提供了Ruby和Objective-C之间的低级接口,但是这个gem似乎很少使用,并且严重缺乏示例和文档,所以我不确定是否这将是一个富有成效的追求。

注意:MacRuby可能会工作,但它与Tk不兼容,因此排除MacRuby。另外,RubyOSA和rb-appscript不是我正在寻找的 - 它们允许Ruby将Apple事件发送给其他应用程序,而不是接收它们。

+0

一般AE或通过http://www.tcl.tk/man/tcl8.6/TkCmd/tk_mac.htm中描述的(Tcl)API由Tk支持的那些AE –

回答

1

在没有其他替代方案的情况下,我将不得不为我需要的AppleEvent C API部分编写自己的Ruby包装器:主要是AEInstallEventHandler和相关函数。幸运的是,尽管苹果公司的开发人员文档中已将其降级为“遗留”状态,但Apple仍然支持该API(尽管有趣的是,它并未废弃)。我将通过Ruby的框架集成这些函数,更可能的是通过Ruby的C API(我仍然需要深入研究)。直接使用C API将减少对其他gem/modules的依赖。如果这样顺利,我会将它作为宝石发布。

关于Donal Fellows的评论,我需要定制AppleEvents - 通过Tk支持的文档,他建议可以通过从Ruby的Tk界面调用Tk来访问文档。

1

您可能想要检查appscript库(注意:似乎只适用于OS X提供的Ruby),或者尝试使用MacRuby,它几乎涵盖了OS X中可用API的所有内容,甚至包括C 。

相关问题