Osascript et AppleEvents

J'ai enregistré les AppleEvents qui sont envoyés depuis une window Terminal. L'événement que la command osascript envoie au compilateur / interpréteur AppleScript n'a pas été enregistré. Comment venir?

Plus précisément, l'argument suivant consiste en trois hypothèses suivies de leur conclusion logique. Cependant, l'expérience montre que la conclusion est fausse. D'où l'argument est défectueux. Malheureusement, je ne sais pas pourquoi c'est faur. Où se brise-t-il?

Hypothèses

  1. MacOS est équipé d'un compilateur / interpréteur AppleScript embedded installé en tant que composant OSA.

  2. La command Terminal osascript ne connaît pas «AppleScript». Lorsqu'il est passé une ligne de code AppleScript, il le transmet au compilateur / interpréteur AppleScript via l'architecture OSA en envoyant un AppleEvent.

  3. La ligne de code suivante, lorsqu'elle est exécutée dans le terminal, entraînera l'printing de tous les AppleEvents envoyés par des commands exécutées à partir de la même window de terminal pour être imprimées dans le terminal:

     export AEDebugSends=1 

Conclusion

Après avoir exécuté les deux commands suivantes dans une window Terminal:

 export AEDebugSends=1 osascript -e 'tell application "Finder" to activate' 

deux AppleEvents devraient être imprimés:

  1. Un dirigé par osascript vers le compilateur / interpréteur AppleScript pour comstackr et exécuter la command 'tell application' Finder 'pour activer'.
  2. Un dirigé du compilateur / interpréteur AppleScript vers le Finder pour s'activer.

Production réelle

Un seul AppleEvent est imprimé, celui envoyé à Finder:

AE2000 (4085): Envoi d'un événement:
—— oo start of event oo ——
aevt ('misc' \ 'actv' transactionID = 0 sourcePSN = [0x0, e00e "Finder"] timeout = 7200 eventSource = 3 {& 'subj': null (), & 'csig': magn (65536)})
—— oo fin de l'événement oo ——

    tl; dr : Les composants du langage ne sont que les dependencies utilisées par l'exécutable et peuvent être accessibles via le shell sans events Apple.

    R: Votre argument se casse à quelques points du numéro 2.

    une. "The Terminal command osascript does not "know" AppleScript."

    D'accord, il n'a pas toutes les langues qu'il prend en charge dans un seul exécutable. Cependant, c'est là que les dependencies entrent, et quand vous en pensez de cette façon; Il n'est pas trop troublant qu'il puisse accéder aux dependencies via votre shell comme toute autre application peut.

    b. "it passes it on to the AppleScript comstackr/interpreter via the OSA architecture by sending out an AppleEvent."

    "Lorsqu'un composant de script exécute un script, les instructions du script peuvent entraîner l'envoi d'events Apple aux applications ( developer.apple.com )".

    L'exécutable ne se limite pas à l'utilisation d'un seul code en soi ou d'un appel d'événement Apple. À l'instar de presque tous les process ou applications de votre machine, il repose sur diverses bibliothèques de base et, en particulier, utilise les composants de langage OSA installés sur votre système. Il n'utilise pas les events Apple pour transmettre votre script au composant de langue.

    voir les langues supscopes:

     ❯ osalang 

    ces composants de langue vivent ici:

     ❯ ls /System/Library/Components/ 

    Puisque osascript peut accéder directement aux composants linguistiques de votre système via le shell, vous n'aurez jamais vu un événement Apple déclenché uniquement pour traiter / interpréter l'input du script.

    par exemple compare ces deux commands où la première utilise le langage AppleScript mais n'interagit pas avec d'autres applications:

     ❯ osascript -e 'set myVar to "hello" & "world"' helloworld 

    et la seconde où nous disons au terminal de faire quelque chose:

     ❯ osascript -e 'tell application "Terminal" to do script ("echo helloworld;")' AE2000 (63917 ): Sending an event: ------oo start of event oo------ aevt('core'\'dosc' transactionID=0 sourcePSN=[0x0,dd7dd7 "Terminal"] timeout=7200 eventSource=3 { '----':utxt('utxt'(TEXT("echo helloworld;"))), &'subj':null(), &'csig':magn(65536) }) ------oo end of event oo------ tab 1 of window id 32644 

    Seul celui qui a interagi avec une application, pas seulement le langage AppleScript, triggers un événement Apple.

    Lisez à nouveau cet article et vous verrez comment cette explication s'inscrit maintenant. OSA Architecture implémentée via les events Apple est la puissante construction permettant l'automation entre les applications; mais l'interprétation du script d'input lui-même est juste effectuée par le composant de langage compatible de votre système derrière les scènes.