Osascript
Welcome to this MacOs-Only new gem!
Installation
Add this line to your application's Gemfile:
gem 'osascript'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install osascript
Usage
Only with MacOs.
With any application
require 'osascript'
Osascript.on?("applicationName")
# => true if application <applicationName> is running
# p.e.
Osascript.on?('Preview')
require 'osascript'
Osascript.get_window_properties("Finder", {window: "front window"})
# => return window’s properties of front window of Finder app
# {:bounds, :name, :index, :id, :zoomable, :zoomed, :visible, :miniaturizable
# :miniaturized, :closeable, :closed, :titled, :floating, :modal}
require 'osascript'
Osascript.quit("applicationName")
# => quit application applicationName
# p.e.
Osascript.quit("Final Cut Pro")
Keystroke
The Osascript::Key
class and its press
method let you simulate key strokes.
Syntax
require 'osascript'
Osascript::Key.press(
<key or array of key>[, <application>|nil][, <options>]
)
You can "press" a simple key:
require 'osascript'
Osascript::Key.press("a")
… in a particular application:
require 'osascript'
Osascript::Key.press("a", "TextEdit")
… or a word:
Osascript::Key.press("Hello world !")
… or a list of keys:
Osascript::Key.press(["a","b","c"])
You can set a delay between each stroke:
Osascript::Key.press(["a","b","c"], nil, {delay: 2.5})
# 2.5 seconds between each stroke
… or a list of words:
Osascript::Key.press(["Hello", 'world'])
You can press a key with a modifier:
Osascript::Key.press({"a", modifiers:[:command]})
# => select all
Osascript::Key.press({"c", modifiers:[:option]})
# => stroke a "Ç"
… or a list of keys with modifiers:
Osascript::Key.press([
{key:"z", modifiers:[:command]},
{key:"z", modifiers:[:command, :shift]},
{key:"z", modifiers:[:command]},
])
… or a key with (supplementary) delay before:
Osascript::Key.press([
{key:"z", delay: 4}, # wait 4 seconds before press "z"
])
You can press a key as a Symbol
:
Osascript::Key.press(:space)
… or a list of keys as Symbol
:
Osascript::Key.press(["a", :space, :enter, :left_arrow])
… or any of these above:
Osascript::Key.press([
"a",
"hello",
:left_arrow
{key: "v", modifiers:[:command]},
{key: :BACKSPACE, modifiers:[:command]}
])
Available Symbol Keys
# min or maj
:down_arrow # or :DOWN_ARROW
:up_arrow # idem
:left_arrow
:right_arrow
:enter
:return
:backspace
:escape
:space
:caps_lock
:tab
Tip: to simulate the "Delete" button in a dialog box, use
{key: :backspace, modifiers:[:command]}
Available modifiers
# Only min
:command
:option
:control
:shift
They are AppleScript modifiers.
With Terminal
require 'osascript'
def run_in_terminal(keys, **options)
Osascript::Key.press(keys, 'Terminal', **options)
end
#
# Open a new window in Terminal console
#
run_in_terminal({key: "n", modifiers:[:command]})
#
# Run a script (to see all files in current folder, even hidden ones)
#
run_in_terminal("ls -la")
With Preview
require 'osascript'
Osascript::Preview.open_document("/path/to/doc.pdf")
# => open document in Preview
Osascript::Preview.document_opened?("/path/to/doc.pdf")
# => return true if document is opened in Preview
Osascript::Preview.documents_paths
# => return {Array} of path {String} of every document
# opened in Preview
Osascript::Preview.documents_names
# => return {Array} of name {String} of every document
# opened in Preview
With Safari
Osascript::Safari.open_url("https://my.url/to/open.html")
# => open the ur in the front document
Osascript::Safari.open_url("https://my.url/to/open.html", {new_window: true})
# => open the url in a new tab of front window
Osascript::Safari.get_url
# => return the url of the front document
Osascript::Safari.get_url(where: 'tab 3 of window 2')
# => return the url of the tab 3 of window 2
Osascript::Safari.window_name
# => return the displayed name of the front window
Osascript::Safari.window_name(where: 'window 3')
# => return the displayed name of the window 3
Osascript::Safari.run_javascript("alert('Hello word!')")
# => run the javascript code in the front document
Osascript::Safari.run_javascript("alert('Hello word!')", {where:'tab 2 of window 1'})
# => run the javascript code in the tab 2 of window 1
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/PhilippePerret/osascript.