Перевести в Apple Events AppleScript

У меня очень простой applescript:

tell application "Opera"
   get URL of active tab of window 1
end tell

Я хочу увидеть события Apple, лежащие в основе. Итак, я запустил его с включенными этими двумя переменными среды:

export AEDebugSends=1;
export AEDebugReceives=1

Теперь я получаю такой результат:

osascript browser.scpt 
{core,getd target='psn '[Opera] {----={form=prop,want=prop,seld=URL ,from={form=prop,want=prop,seld=acTa,from={form=indx,want=cwin,seld=1,from=NULL-impl}}}} attr:{csig=65536 returnID=15130}

Я ожидал увидеть вызовы функций, определенных здесь: https://developer.apple.com/documentation/coreservices/apple_events?language=objc.

Моя конечная цель - перевести этот Applescript в код c или Obj-C.

Может ли кто-нибудь помочь мне понять смысл вывода?

заранее спасибо


person RuLoViC    schedule 05.12.2018    source источник


Ответы (1)


ожидает увидеть вызовы функций, определенных здесь

Что ж, перестань этого ожидать. У вас есть событие Apple само, выраженное в нотации AEPrint, как описано здесь:

https://developer.apple.com/library/archive/technotes/tn/tn2045.html

Вы можете использовать это для создания того же события Apple, или вы можете сформировать его по частям, используя команды более высокого уровня. Но в любом случае система не должна писать за вас ваш код! Это мероприятие Apple, созданное для вас AppleScript. Научиться читать нотацию AEPrint, изучить структуру события Apple, научиться создавать то же событие Apple вручную - это все, что вы должны сделать сами.

Чтобы привести пример рассуждений, вы будете использовать:

  • Ваше мероприятие Apple начинается с глагола coregetd. Это эквивалент события Apple get (первое слово в вашем AppleScript), как вы узнаете, заглянув в словарь SDEF приложения.

  • Хорошо, теперь мы знаем глагол; какой прямой объект? Это URL  (обратите внимание на пробел, это четырехбуквенные коды); это эквивалент события Apple вашего URL (опять же, мы узнаем это из словаря).

  • Хорошо, а что URL? Это URL от acTa, то есть active tab (опять же, словарь показывает нам эту эквивалентность).

  • Хорошо, но acTa чего? ...

И так далее. После того, как вы таким образом разбили событие Apple на свойства, элементы и спецификаторы объектов, вы можете снова создать его с помощью команд Carbon или Какао.

По ускользающим от меня причинам вы решили отправиться в очень долгое путешествие. Вы решили отказаться от простоты нотации AppleScript и самостоятельно сконструировать событие Apple. Вы выбрали долгий путь, требующий много знаний. Нет ярлыка; среда выполнения не будет писать ваш код за вас. Самое долгое путешествие начинается с первого шага. Начинать!

person matt    schedule 05.12.2018