2011-09-21 7 views
7

Pracuję nad aplikacją dla systemu OS X przy użyciu Ruby-Tk i chcę udostępnić interfejs zdarzeń Apple dla aplikacji. Oznacza to, że aplikacja zdefiniowałaby słownik poleceń AppleScript, na które odpowiadał (odpowiadający Zdarzeniom Apple przesyłanym do aplikacji), a użytkownicy/inne aplikacje mogły skryptować aplikację Ruby-Tk za pomocą poleceń AppleScript. Inne języki skryptowe obsługują taką funkcjonalność - Python poprzez bibliotekę py-aemrecing pod http://appscript.svn.sourceforge.net/viewvc/appscript/py-aemreceive/ i Tcl poprzez bibliotekę tclAE pod adresem http://tclae.sourceforge.net/. Szukałem podobnej funkcjonalności w Ruby i pojawiły się puste.Czy Ruby oferuje mechanizm reagowania na zdarzenia Apple w systemie OS X?

Jednym z możliwych mechanizmów jest mostek rubyobjc, który zapewnia niski poziom interfejsu między Ruby i Objective-C, ale ten klejnot wydaje się być mało używany i brakuje w nim przykładów i dokumentacji, więc nie jestem pewien czy byłaby to owocna droga do ścigania.

NB: MacRuby może działać, ale nie jest kompatybilny z TK, więc to wyklucza MacRuby. Ponadto RubyOSA i rb-appscript nie są tym, czego szukam - pozwalają Ruby przesyłać zdarzenia Apple do innych aplikacji, a nie je otrzymywać.

+0

Ogólne AE lub te wspierane przez Tk poprzez API (Tcl) opisane na http://www.tcl.tk/man/tcl8.6/TkCmd/tk_mac.htm –

Odpowiedz

1

W przypadku braku innych alternatyw, wydaje się, że będę musiał napisać własną wrapper Ruby dla części API AppleEvent C, których potrzebuję: głównie AEInstallEventHandler i funkcje pokrewne. Na szczęście Apple nadal obsługuje ten interfejs API, mimo że w dokumentach programistycznych Apple został zdegradowany do stanu "starszego" (choć, co ciekawe, nie jest przestarzały). Zintegruję te funkcje za pośrednictwem ffi gem Rubiego lub, co bardziej prawdopodobne, za pośrednictwem interfejsu API języka Rubiego (którego muszę jeszcze zagłębić); korzystanie z API C bezpośrednio zmniejszyłoby potrzebę zależności od innych klejnotów/modułów. Jeśli to pójdzie dobrze, wydam to jako klejnot.

Odnosząc się do komentarza Donal Fellows, moja potrzeba dotyczy niestandardowych AppleEvents - te obsługiwane przez Tk w dokumentach, które poleca, mogą być dostępne poprzez wywołania Tk z interfejsu Ruby Tk.

1

Możesz chcieć sprawdzić bibliotekę (uwaga: wydaje się, że działa tylko z Rubinem dostarczonym przez OS X), lub spróbuj użyć MacRuby, która owija prawie wszystko z API dostępnych w OS X, nawet te z C .