iterm_window 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README.rdoc +2 -2
  2. data/lib/iterm_window.rb +62 -78
  3. metadata +23 -32
data/README.rdoc CHANGED
@@ -15,7 +15,7 @@ the tab name as an ItermWindow method.
15
15
  == EXAMPLE - Open a new iTerm window, cd to a project and open it in TextMate
16
16
 
17
17
  require 'rubygems'
18
- require 'chrisjpowers-iterm_window'
18
+ require 'iterm_window'
19
19
 
20
20
  ItermWindow.open do
21
21
  open_tab :my_tab do
@@ -66,4 +66,4 @@ the tab name as an ItermWindow method.
66
66
  end
67
67
  second_tab.write "echo 'hello there!'"
68
68
  first_tab.select # brings first tab back to focus
69
- end
69
+ end
data/lib/iterm_window.rb CHANGED
@@ -1,38 +1,39 @@
1
1
  # Developed March 17, 2008 by Chris Powers
2
- #
2
+ #
3
3
  # The ItermWindow class models an iTerm terminal window and allows for full control via Ruby commands.
4
4
  # Under the hood, this class is a wrapper of iTerm's Applescript scripting API. Methods are used to
5
5
  # generate Applescript code which is run as an <tt>osascript</tt> command when the ItermWindow initialization
6
6
  # block is closed.
7
- #
7
+ #
8
8
  # ItermWindow::Tab models a tab (session) in an iTerm terminal window and allows for it to be controlled by Ruby.
9
9
  # These tabs can be created with either the ItermWindow#open_bookmark method or the ItermWindow#open_tab
10
10
  # method. Each tab is given a name (symbol) by which it can be accessed later as a method of ItermWindow.
11
- #
11
+ #
12
12
  # EXAMPLE - Open a new iTerm window, cd to a project and open it in TextMate
13
- #
13
+ #
14
14
  # ItermWindow.open do
15
15
  # open_tab :my_tab do
16
16
  # write "cd ~/projects/my_project/trunk"
17
17
  # write "mate ./"
18
18
  # end
19
19
  # end
20
- #
20
+ #
21
21
  # EXAMPLE - Use the current iTerm window, cd to a project and open in TextMate, launch the server and the console and title them
22
- #
22
+ #
23
23
  # ItermWindow.current do
24
24
  # open_tab :project_dir do
25
25
  # write "cd ~/projects/my_project/trunk"
26
26
  # write "mate ./"
27
27
  # set_title "MyProject Dir"
28
28
  # end
29
- #
30
- # window.open_tab :server do
29
+ #
30
+ # open_tab :server do
31
31
  # write "cd ~/projects/my_project/trunk"
32
32
  # write "script/server -p 3005"
33
33
  # set_title "MyProject Server"
34
34
  # end
35
- # window.open_tab :console do
35
+ #
36
+ # open_tab :console do
36
37
  # write "cd ~/projects/my_project/trunk"
37
38
  # write "script/console"
38
39
  # set_title "MyProject Console"
@@ -40,18 +41,21 @@
40
41
  # end
41
42
  #
42
43
  # EXAMPLE - Same thing, but use bookmarks that were made for the server and console. Also, switch focus back to project dir.
43
- #
44
+ #
44
45
  # ItermWindow.current do
45
46
  # open_tab :project_dir do
46
47
  # write "cd ~/projects/my_project/trunk"
47
48
  # write "mate ./"
48
49
  # end
50
+ #
49
51
  # open_bookmark :server, 'MyProject Server'
50
52
  # open_bookmark :console, 'MyProject Console'
53
+ #
51
54
  # project_dir.select
52
- #
55
+ # end
56
+ #
53
57
  # EXAMPLE - Arbitrarily open two tabs, switch between them and run methods/blocks with Tab#select method and Tab#write directly
54
- #
58
+ #
55
59
  # ItermWindow.open do
56
60
  # open_tab :first_tab
57
61
  # open_tab :second_tab
@@ -66,51 +70,53 @@
66
70
 
67
71
  # The ItermWindow class models an iTerm terminal window and allows for full control via Ruby commands.
68
72
  class ItermWindow
69
-
70
- # While you can directly use ItermWindow.new, using either ItermWindow.open or
73
+
74
+ # While you can directly use ItermWindow.new, using either ItermWindow.open or
71
75
  # ItermWindow.current is the preferred method.
72
- def initialize(window_type = :new, &block)
76
+ def initialize
73
77
  @buffer = []
74
78
  @tabs = {}
75
- run_commands window_type, &block
76
- send_output
77
79
  end
78
-
80
+
79
81
  # Creates a new terminal window, runs the block on it
80
82
  def self.open(&block)
81
- new(:new, &block)
83
+ self.new.run(:new, &block)
82
84
  end
83
-
85
+
84
86
  # Selects the first terminal window, runs the block on it
85
87
  def self.current(&block)
86
- new(:current, &block)
88
+ self.new.run(:current, &block)
89
+ end
90
+
91
+ def run(window_type = :new, &block)
92
+ run_commands window_type, &block
93
+ send_output
87
94
  end
88
-
95
+
89
96
  # Creates a new tab from a bookmark, runs the block on it
90
97
  def open_bookmark(name, bookmark, &block)
91
98
  create_tab(name, bookmark, &block)
92
99
  end
93
-
100
+
94
101
  # Creates a new tab from 'Default Session', runs the block on it
95
102
  def open_tab(name, &block)
96
103
  create_tab(name, 'Default Session', &block)
97
104
  end
98
-
105
+
99
106
  # Outputs a single line of Applescript code
100
107
  def output(command)
101
108
  @buffer << command.gsub(/'/, '"')
102
109
  end
103
-
104
-
110
+
111
+
105
112
  private
106
-
113
+
107
114
  # Outputs @buffer to the command line as an osascript function
108
115
  def send_output
109
116
  buffer_str = @buffer.map {|line| "-e '#{line}'"}.join(' ')
110
- `osascript #{buffer_str}`
111
- # puts buffer_str
117
+ shell_out "osascript #{buffer_str}"
112
118
  end
113
-
119
+
114
120
  # Initializes the terminal window
115
121
  def run_commands(window_type, &block)
116
122
  window_types = {:new => '(make new terminal)', :current => 'first terminal'}
@@ -123,25 +129,33 @@ class ItermWindow
123
129
  output "end tell"
124
130
  output "end tell"
125
131
  end
126
-
127
- # Creates a new Tab object, either default or from a bookmark
132
+
133
+ # Creates a new Tab object, either default or from a bookmark,
134
+ # and creates a convenience method for retrieval
128
135
  def create_tab(name, bookmark=nil, &block)
129
136
  @tabs[name] = Tab.new(self, name, bookmark, &block)
137
+ create_tab_convenience_method(name)
138
+ end
139
+
140
+ private
141
+
142
+ def create_tab_convenience_method(name)
143
+ (class << self; self; end).send(:define_method, name) do
144
+ @tabs[name]
145
+ end
130
146
  end
131
-
132
- # Access the tabs by their names
133
- def method_missing(method_name, *args, &block)
134
- @tabs[method_name] || super
147
+
148
+ def shell_out(str)
149
+ %x{str}
135
150
  end
136
-
137
151
 
138
-
152
+
139
153
  # The Tab class models a tab (session) in an iTerm terminal window and allows for it to be controlled by Ruby.
140
154
  class Tab
141
-
155
+
142
156
  attr_reader :name
143
157
  attr_reader :bookmark
144
-
158
+
145
159
  def initialize(window, name, bookmark = nil, &block)
146
160
  @name = name
147
161
  @bookmark = bookmark
@@ -152,7 +166,7 @@ class ItermWindow
152
166
  output "set #{name}_tty to the tty of the last session"
153
167
  execute_block &block if block_given?
154
168
  end
155
-
169
+
156
170
  # Brings a tab into focus, runs a block on it if passed
157
171
  def select(&block)
158
172
  if block_given?
@@ -161,7 +175,7 @@ class ItermWindow
161
175
  output "select session id #{name}_tty"
162
176
  end
163
177
  end
164
-
178
+
165
179
  # Writes a command into the terminal tab
166
180
  def write(command)
167
181
  if @currently_executing_block
@@ -170,7 +184,7 @@ class ItermWindow
170
184
  execute_block { write command }
171
185
  end
172
186
  end
173
-
187
+
174
188
  # Sets the title of the tab (ie the text on the iTerm tab itself)
175
189
  def set_title(str)
176
190
  if @currently_executing_block
@@ -179,37 +193,7 @@ class ItermWindow
179
193
  execute_block { set_title = str }
180
194
  end
181
195
  end
182
-
183
- # These style methods keep crashing iTerm for some reason...
184
-
185
- # # Sets the tab's font color
186
- # def set_font_color(str)
187
- # if @currently_executing_block
188
- # output "set foreground color to '#{str}'"
189
- # else
190
- # execute_block { set_font_color = str }
191
- # end
192
- # end
193
- #
194
- # # Sets the tab's background color
195
- # def set_background_color(str)
196
- # if @currently_executing_block
197
- # output "set background color to '#{str}'"
198
- # else
199
- # execute_block { set_bg_color = str }
200
- # end
201
- # end
202
- # alias_method :set_bg_color, :set_background_color
203
- #
204
- # # Sets the tab's transparency
205
- # def set_transparency(float)
206
- # if @currently_executing_block
207
- # output "set transparency to '#{float}'"
208
- # else
209
- # execute_block { set_transparency = float }
210
- # end
211
- # end
212
-
196
+
213
197
  # Runs a block on this tab with proper opening and closing statements
214
198
  def execute_block(&block)
215
199
  @currently_executing_block = true
@@ -218,14 +202,14 @@ class ItermWindow
218
202
  output "end tell"
219
203
  @currently_executing_block = false
220
204
  end
221
-
205
+
222
206
  private
223
-
207
+
224
208
  def output(command)
225
209
  @window.output command
226
210
  end
227
211
 
228
-
212
+
229
213
  end
230
-
214
+
231
215
  end
metadata CHANGED
@@ -1,57 +1,48 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: iterm_window
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.4
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Chris Powers
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2009-02-20 00:00:00 -06:00
13
- default_executable:
12
+ date: 2009-02-20 00:00:00.000000000 Z
14
13
  dependencies: []
15
-
16
14
  description:
17
15
  email: chrisjpowers@gmail.com
18
16
  executables: []
19
-
20
17
  extensions: []
21
-
22
18
  extra_rdoc_files: []
23
-
24
- files:
19
+ files:
25
20
  - README.rdoc
26
21
  - LICENSE
27
22
  - lib/iterm_window.rb
28
- has_rdoc: true
29
23
  homepage: http://github.com/chrisjpowers/iterm_window
30
24
  licenses: []
31
-
32
25
  post_install_message:
33
26
  rdoc_options: []
34
-
35
- require_paths:
27
+ require_paths:
36
28
  - lib
37
- required_ruby_version: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: "0"
42
- version:
43
- required_rubygems_version: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: "0"
48
- version:
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
49
41
  requirements: []
50
-
51
42
  rubyforge_project:
52
- rubygems_version: 1.3.5
43
+ rubygems_version: 1.8.24
53
44
  signing_key:
54
45
  specification_version: 3
55
- summary: The ItermWindow class models an iTerm terminal window and allows for full control via Ruby commands.
46
+ summary: The ItermWindow class models an iTerm terminal window and allows for full
47
+ control via Ruby commands.
56
48
  test_files: []
57
-