Предлагает ли Ruby механизм реагирования на события Apple в OS X?

Я работаю над настольным приложением для OS X, используя Ruby-Tk, и я хотел бы предоставить интерфейс Apple Events для приложения. Это означает, что приложение будет определять словарь команд AppleScript, на которые оно будет реагировать (соответствующих событиям Apple, отправляемым в приложение), и пользователи/другие приложения могут создавать сценарии для приложения Ruby-Tk с помощью команд AppleScript. Другие языки сценариев поддерживают такую ​​функциональность — Python через библиотеку py-aemreceive по адресу http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/ и Tcl через библиотеку tclAE по адресу http://tclae.sourceforge.net/. Я искал аналогичную функциональность в Ruby и ничего не нашел.

Одним из возможных механизмов является мост rubyobjc, обеспечивающий низкоуровневый интерфейс между Ruby и Objective-C, но этот драгоценный камень, похоже, мало используется и в нем крайне не хватает примеров и документации, поэтому я не уверен, что это будет плодотворный путь.

NB: MacRuby может работать, но он не совместим с Tk, поэтому MacRuby исключен. Кроме того, RubyOSA и rb-appscript — это не то, что мне нужно — они позволяют Ruby отправлять события Apple в другие приложения, а не получать их.


person Kevin Walzer    schedule 21.09.2011    source источник
comment
Общие AE или те, которые поддерживаются Tk через (Tcl) API, описанные в tcl.tk/man/tcl8.6/TkCmd/tk_mac.htm   -  person Donal Fellows    schedule 21.09.2011


Ответы (2)


В отсутствие других альтернатив, похоже, мне придется написать свою собственную оболочку Ruby для тех частей AppleEvent C API, которые мне нужны: в основном AEInstallEventHandler и связанные функции. К счастью, Apple по-прежнему поддерживает этот API, несмотря на то, что в документации для разработчиков Apple ему присвоен статус «устаревший» (хотя, что интересно, он не объявлен устаревшим). Я либо интегрирую эти функции через Ruby ffi gem, либо, что более вероятно, через Ruby C API (в котором мне еще предстоит разобраться); использование C API напрямую уменьшит потребность в зависимостях от других драгоценных камней/модулей. Если все пойдет хорошо, я выпущу его как жемчужину.

Что касается комментария Донала Феллоуза, мне нужны пользовательские AppleEvents - те, которые поддерживаются через Tk в документах, которые он рекомендует, вероятно, могут быть доступны через вызовы Tk из интерфейса Ruby Tk.

person Kevin Walzer    schedule 21.09.2011

Возможно, вы захотите проверить библиотеку appscript (примечание: кажется, что она работает только с Ruby, предоставленным OS X), или попробуйте использовать MacRuby, который объединяет почти все API, доступные в OS X, даже C.

person Markus    schedule 18.11.2011