17.10.2016 | 17:35
To nas dovodi do očekivane cake koju je Žabac zloguko spomenuo: PowerPoint ne stavlja AppleScriptu na raspolaganje podatak u kojem je stanju/fazi prikaz unutar pojedinog slajda - što ovo rješenje vodi u slijepu ulicu.
Vatrogasno rješenje ti je da poubijaš animacije.
Jedini workaround koji mi pada na pamet je "poglupiti" rješenje na način da prvi Mac drugom prenosi samo "klikove" (LMB/RMB, strelica desno/lijevo... ili kako god upravljaš prezentacijom). U tom scenariju se može preskočiti sync (znajući da je moguć samo na nivou pojedinog slajda, ali ne i unutar njega), a može ga se i zadržati (kao garancija da će na ekranu biti uvijek barem isti slide, neovisno o fazi u kojoj je master) koristeći sadašnju mehaniku.
Problem workarounda počinje od toga što AppleScript ne može "osluškivati" evente (spomenuta "kliktanja" su eventi), a slijedom toga ni reagirati na njih. Taj problem rješavaju programi poput Keyboard Maestro koji mogu reagirati na neki event (pritisak tipke, ali NE i miša!) i izvršiti željenu akciju (u ovom slučaju pokrenuti skriptu). Ne znam postoji li neki program tog tipa koji presreće i klikove miša, ali može se i napisati (Xcode/Objective-C) - svodi se na korištenje NSEvent klase i njene addGlobalMonitorForEventsMatchingMask (nije typo) metode. Zadatak takve aplikacije bio bi detektirati predefinirani event (klik na željenu tipku/tipke/miša) i izvršiti unaprijed pripremljeni AppleScript da se ne mora pisati dodatni hendler za klijenta (drugi Mac) i komunikaciju među njima.
Na malo "primitivnijem" nivou, nešto slično moguće je izvesti uz jedan kompromis - da se upravljanje PowerPointom na masteru "preseli" na neku custom shemu koja je prihvatljiva sistemskim keyboard shortcutima (LMB/RMB i strelice za lijevo/desno nisu). U prijevodu, umjesto korištenja strelice desno za sljedeći slide/animaciju mora se koristiti, recimo, CMD+strelica_desno.
Ako takvo što dolazi u obzir, onda rješenje ide ovako nekako (pišem napamet):
1. U Automatoru se kreira novi workflow tipa "Service" i "Service receives selected" se postavi na "no input" (u nastavku mora ostati "any application").
2. U kreirani workflow se doda Run AppleScript akcija i u nju nešto ovog tipa...
tell application "System Events"
keystroke (key code 124)
end tell
tell application "Finder" of machine "eppc://192.168.1.2"
get every process
end tell
tell application "System Events" of machine "eppc://192.168.1.2"
keystroke (key code 124)
end tell
...što ima zadatak simulirati klik na strelicu desno prvo na prvom Macu, a potom i na drugom Macu, kad se pozove koristeći predefinirani shortcut (CMD+strelica_desno). Drugi tell block je hack koji se pobrine aktivirati "System Events" (bez toga treći tell blok nije moguće izvršiti). Možda bude potrebno dopustiti Script Editoru (na prvom Macu) da kontrolira računalo (to se radi u Preferences/Security & Privacy/Privacy/Accessibility -> checkira se Script Editor). Ako keystrokovi idu "u prazno", System Eventsima treba dodatno eksplicitno reći koji proces da keystrokaju (ime procesa se može pročitati iz Activity Monitora i moglo bi biti isto kao i ime aplikacije, dakle "Microsoft PowerPoint").
3. Workflow se snimi (automatski u ~/Library/Services, pod imenom koji mu damo).
4. U Preferences/Keyboard/Services dodijeli se keyboard shortcut (npr. CMD+strelica_desno) našem servisu.
Nakon toga pokrenu se prezentacije na oba Maca i pješke se syncaju (na prvi slide), a potom se kroz prezentaciju na prvom Macu kreće koristeći ISKLJUČIVO shortcut (CMD+strelica_desno) ili više njih (za prethodni slide, npr. - u tom slučaju moramo definirati i više servisa, da bi svaki mogao imati svoj shortcut). Ako se tijekom izvođenja prezentacije na prvom Macu zabunom klikne strelica desno umjesto CMD+strelica_desno, prezentacije će se razići (jer će ona na prvom Macu otići na sljedeći slajd, a onda na drugom neće primiti keystroke) - u tom slučaju pomaže sigurnosni mehanizam koji bi (kao što skripta radi i sada), syncao barem slajdove.
Zvuči komplicirano, ali može se pokliktati sve potrebno za par minuta.
Ako je rješenje neupotrebljivo zbog CMD+strelica_desno bastarda i inzistira se na standardnom LMB/RMB ili strelica lijevo/desno upravljanju, onda ostaje (barem u teoriji) Xcode/Objective-C opcija.