How to save,close and exit Keynote using AppleScript? - applescript

What's the proper Applescript syntax to save, then close and then exit Keynote after exporting slides? I'm not very experienced in Applescript. Is there something more efficient to use? Shell scripts? Need to also get success/failure of the executed Applescript.
I get the Keynote presentation opened correctly, export the slides, but cannot seem to get Keynote to save the presentation, close it properly and exit.
Tried multiple variations of:
"tell application "System Events"
" tell process "Keynote"
" Save"
" end tell"
" tell process "Keynote"
" Close"
" end tell"
"tell application "Keynote"
" Close "
Also tried:
"tell application "System Events"
" tell process "Keynote"
" click menu item "Close" of menu "File" of menu bar item "File" of menu bar 1"
" click menu item "Quit Keynote" of menu "Keynote" of menu bar item "File" of menu bar 1 "
"end tell"
"end tell"

The following will work if there is only one presentation open and it has already been saved (Won't prompt for a save location).
tell application "Keynote"
save
quit
end tell

Related

Execute shortcut or menu action in particular application window

Is there a script option to actualy go through all XCode opened projects (application windows) and execute menu action Product->Stop or executing shortcut "CMD + ."?
To run Apple Script in Xcode at the beginning of each run You can create shell script like so:
#!/bin/bash
osascript -e 'tell application "Xcode"
activate
set activeWindow to window 1
set windowName to name of activeWindow
repeat with aWindow in windows
tell application "System Events" to keystroke "`" using command down
if name of aWindow is not equal to windowName then
if name of aWindow is not equal to "" then
tell application "System Events" to keystroke "." using command down
end if
end if
end repeat
end tell'
Then in Xcode go to Preferences->Behaviours->Starts->Run and choose Your script.

applescript to close pdf window

I have an applescript that looks like this:
repeat
tell application "Adobe Reader"
open "filepath/name.pdf"
end tell
delay (60)
tell application "Adobe Reader"
open "filepath/name1.pdf"
end tell
delay (60)
tell application "Adobe Reader"
open "filepath/name2.pdf"
end tell
delay (60)
end repeat
I want to be able to close pdf windows after they have been opened. The issue is that these pdfs reside on a share and users have the ability to update them. The script will only display the updated pdf if it is stopped and restarted. I do not want to have to do this manually. How can I do this?
Here's a solution, which makes Preview scriptable and then continues to open and close a file of your choice.
-- http://www.macworld.com/article/1053391/previewscript.html
on addAppleScriptFeatures()
try
tell application "Finder"
set the Preview_app to (application file id "com.apple.Preview") as alias
end tell
set the plist_filepath to the quoted form of ¬
((POSIX path of the Preview_app) & "Contents/Info")
do shell script "defaults write " & the plist_filepath & space ¬
& "NSAppleScriptEnabled -bool YES" with administrator privileges
do shell script "chmod -R 755 " & the quoted form of (POSIX path of the Preview_app) with administrator privileges
return true
on error myErr number MyNr
display dialog myErr & " (" & MyNr & ")." buttons {"OK"} default button "OK" with icon 0
return false
end try
end addAppleScriptFeatures
if addAppleScriptFeatures() then
set f to choose file
tell application "Preview"
activate
open f
delay 5 -- short for testing
close window 2
end tell
end if

applescript: how to automatically choose to save a safari document at a PARTICULAR PATH with system events

I want to make a script that will save safari documents using system events (command+s) and I want the file to always be saved at a particular path. (I could make a habit of always saving safari files at a certain folder but that's not a robust solution) How can I make sure system events saves a document at a certain path?
Directly from this MacRumors forum post:
tell application "Safari"
activate
end tell
tell application "System Events"
tell process "Safari"
click menu item "Copy" of menu "Edit" of menu bar 1
end tell
end tell
delay 1
set the_filename to (the clipboard) & ".html"
set the_filepath to "Macintosh HD:Users:Roy:Documents:" & the_filename
set the_shellfilepath to "'/Users/Roy/Documents/" & the_filename & ".download'"
set the_shellfilepath2 to "'/Users/Roy/Documents/" & the_filename & "'"
tell application "Safari"
activate
save document 1 in the_filepath
end tell
do shell script "mv " & the_shellfilepath & " " & the_shellfilepath2
Set the path (the_shellfilepath) as appropriate.
Changing the folder of a file dialog:
try
try -- this would result in an error when there's no clipboard
set old to the clipboard
end try
-- delay 1 -- for testing
-- activate application "Safari"
tell application "System Events"
keystroke "s" using command down
keystroke "g" using {shift down, command down}
delay 0.1
set the clipboard to "~/Movies/"
delay 0.1
keystroke "av" using command down
delay 0.1
keystroke return
delay 0.1
end tell
set the clipboard to old
end try
Saving to a specific folder with a partially encoded URL as a file name:
tell application "Safari"
set x to URL of document 1
set r to do shell script "echo " & quoted form of x & " | sed 's|/$||;s|:|%3A|g;s|/|%2F|g'"
do shell script "curl " & x & " > " & quoted form of ((system attribute "HOME") & "/Desktop/" & r & ".html")
end tell
Saving to a specific folder but choosing the file name manually:
tell application "Safari"
set x to URL of document 1
set answer to text returned of (display dialog "" default answer ".html")
do shell script "curl " & x & " > " & quoted form of ((system attribute "HOME") & "/Desktop/" & answer)
end tell

Applescript to Expose all Finder Windows?

I'm trying to figure out how to write an Applescript that will Exposé all Finder Windows.
Application Logic
I think the script needs to have this application logic:
Check a residual setting and get the name of the last "Frontmost
Application" (perhaps use a text file ~/last-application.txt to store this?)
Grab the name of the current Frontmost Application
If the name of the current of the Frontmost Application is Expose, then activate the previous frontmost application
Else, activate finder, and then activate expose for just finder windows
Desired Behavior
When the script is activated all the finder windows (and only the finder windows) will be shown in Exposé
If the script is then run again (and no finder window was selected) the script will just switch back to the last frontmost application
I'm not sure how to get this working though. If there is another utility that does this automatically that'd be great, too.
set f to "/s/x/finderexpose"
set prev to do shell script "touch " & f & "; cat " & f
if prev is not "" then
delay 0.5 -- time to release modifier keys used in a shortcut
tell application "System Events" to key code 53 -- esc, if Exposé is open
delay 0.3 -- for the Exposé animation?
activate application prev
do shell script "echo '' > " & f
else
do shell script "echo " & quoted form of (path to frontmost application as text) & " > " & f
activate application "Finder"
delay 0.05
tell application "System Events" to key code 125 using {control down} -- ⌃↓
end if
It'd be less ugly if the part for switching to the previous application was left out:
activate application "Finder"
delay 0.05
tell application "System Events" to key code 125 using {control down}

Applescript to make new folder

I Want to make a new Folder command in apple script
Why dosent this script work?
tell application "Finder"
activate
end tell
tell application "System Events"
tell process "Finder"
tell menu bar 1
tell menu bar item "File"
tell menu "File"
click menu item "New folder"
end tell
end tell
end tell
end tell
end tell
You can do it more directly with AppleScript:
tell application "Finder"
set p to path to desktop -- Or whatever path you want
make new folder at p with properties {name:"New Folder"}
end tell
I don't know if running bash commands within AppleScript is cheating, but you can also do:
do shell script "mkdir ~'/Desktop/New Folder'"
Which is useful when you need to create sub folders on-the-fly when they don't exist yet:
do shell script "mkdir -p ~'/Desktop/New Folder/Bleep/Bloop'"
tell application "Finder"
activate
end tell
tell application "System Events"
tell process "Finder"
tell menu bar 1
tell menu bar item "File"
tell menu "File"
click menu item "new folder"
end tell
end tell
end tell
end tell
end tell
--you capitalize the N in new folder the new folder button is not capped.
NOTE: This can fail for two reasons;
(1) '~' trapped in singlequote won't parse.
(2) space in '/New Folder/' will break the path.
do shell script "mkdir -p '~/Desktop/New Folder/Bleep/Bloop'"
SOLVED:
do shell script "mkdir -p ~/Desktop/" & quoted form of "New Folder/Bleep/Bloop"
You can directly with an applescript script by simulating keystroke on ("N" and command and shift) this will create a new folder on the desktop or in the open Finder window.
Below the script, you can test it in the script editor
tell application "System Events" to tell process "Finder"
set frontmost to true
keystroke "N" using {command down, shift down}
end tell
Your script works if you add under "tell process" Finder "
"set frontmost to true"
Which give
tell application "System Events"
tell process "Finder"
set frontmost to true
tell menu bar 1
tell menu bar item "File"
tell menu "File"
click menu item "New folder"
end tell
end tell
end tell
end tell
end tell
tell application "Finder"
set thepath to alias "Macintosh HD:Users:JasonMagnuson:Documents:" as text
make new folder at thepath with properties {name:"nov_archive"}
end tell

Resources