Mynu
A simple DSL to create a systembar menu with macruby in OSX
gem install mynu
macruby examples/hello-mynu.rb
An example of abusing open [-a]
macruby examples/workflow.rb
Or if your feeling bohemian:
macruby examples/queen.rb
require 'rubygems'
require 'mynu'
mynu = Mynu.new
mynu.item "Hello World!" do ||
puts "Inside menu setup!"
.title = "Good Bye World!"
.item "Option 1" do ||
.execute do
puts "Execution block"
.title = "Dynamically changed!"
end
end
.item "Option 2" do ||
.item "Option 2a" do
puts "Option 2a clicked!"
end
.item "Option 2b" do
puts "Option 2b clicked!"
end
.execute do
puts "Execution block and items"
.title = "Dynamically changed!"
end
end
= .item "Disabled" do ||
.disabled
end
.item "Enable `Disabled`" do ||
.execute do
.enabled
.execute do
.title = "Disabled (Again)!"
.disabled
end
end
end
end
mynu.item "Simple Item" do
puts "Hello World!"
end
mynu.run
====
require 'rubygems'
require 'mynu'
mynu = Mynu.new
mynu.item "Applications" do |applications|
applications.item "Terminal" do
# TODO: AppleScript a tab, this does nothing if terminal is open
`open -a /Applications/Utilities/Terminal.app`
end
end
mynu.item "Project" do |project|
project.item "Live" do
`open http://example.com`
end
project.item "Staging" do
`open http://user:[email protected]`
end
project.item "Development" do
`open http://example.dev`
end
project.item "Repos" do |repos|
repos.item "Example" do
`open ~/example`
end
repos.item "Resources" do
`open ~/example-resources`
end
end
end
mynu.items << NSMenuItem.separatorItem
mynu.item "Development" do |development|
development.item "Rails" do |development_mynu|
development_mynu.item "Github" do
`open http://github.com/rails/rails`
end
development_mynu.item "Repo" do
`open ~/workspace/rails`
end
end
end
mynu.items << NSMenuItem.separatorItem
mynu.item "Downloads" do
`open ~/Downloads`
end
mynu.items << NSMenuItem.separatorItem
desktop = mynu.item "Desktop" do
`open ~/Desktop`
end
mynu.items << NSMenuItem.separatorItem
mynu.run
Todo
- Lots
- Reloading
- Crash Handling
- FileMenuItem
- Improved API
- Simple Dialogs?