/iterm_window

Control your terminal windows in iTerm with Ruby -- great for automation scripting!

Primary LanguageRubyMIT LicenseMIT

iTermWindow

Developed March 17, 2008 by Chris Powers

The ItermWindow class models an iTerm terminal window and allows for full control via Ruby commands. Under the hood, this class is a wrapper of iTerm’s Applescript scripting API. Methods are used to generate Applescript code which is run as an osascript command when the ItermWindow initialization block is closed.

ItermWindow::Tab models a tab (session) in an iTerm terminal window and allows for it to be controlled by Ruby. These tabs can be created with either the ItermWindow#open_bookmark method or the ItermWindow#open_tab method. Each tab is given a name (symbol) by which it can be accessed later in the code using the tab name as an ItermWindow method.

EXAMPLE - Open a new iTerm window, cd to a project and open it in TextMate

require 'rubygems'
require 'iterm_window'

ItermWindow.open do
  open_tab :my_tab do
    write "cd ~/projects/my_project/trunk"
    write "mate ./"
  end
end

EXAMPLE - Use the current iTerm window, cd to a project and open in TextMate, launch the server and the console and title them

ItermWindow.current do
  open_tab :project_dir do
    write "cd ~/projects/my_project/trunk"
    write "mate ./"
    set_title "MyProject Dir"
  end
  open_tab :server do
    write "cd ~/projects/my_project/trunk"
    write "script/server -p 3005"
    set_title "MyProject Server"
  end
  open_tab :console do
    write "cd ~/projects/my_project/trunk"
    write "script/console"
    set_title "MyProject Console"
  end
end

EXAMPLE - Same thing, but use bookmarks that were made for the server and console. Also, switch focus back to project dir.

ItermWindow.current do
  open_tab :project_dir do
    write "cd ~/projects/my_project/trunk"
    write "mate ./"
  end
  open_bookmark :server, 'MyProject Server'
  open_bookmark :console, 'MyProject Console'
  project_dir.select

EXAMPLE - Arbitrarily open two tabs, switch between them and run methods/blocks with Tab#select method and Tab#write directly

ItermWindow.open do
  open_tab :first_tab
  open_tab :second_tab
  first_tab.select do
    write 'cd ~/projects'
    write 'ls'
  end
  second_tab.write "echo 'hello there!'"
  first_tab.select # brings first tab back to focus
end