termrc 0.1.2 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1a78e12e43b40860409e8eb4350ad140baa85ab
4
- data.tar.gz: 6759c63e3ff8804eeae89109f21338c74f6c9676
3
+ metadata.gz: 6d06e86ff71c380bb240d0d2f60a64cc71a3775f
4
+ data.tar.gz: 25e8812bffe0288f4a46e10a1b8941eec36cee9d
5
5
  SHA512:
6
- metadata.gz: 917c9dc5975ca098dbd8f097836fefe8bb8344ff49d3bc9f10b473f9f28357a4a2f9918c5a21824e131ae9718ab53326801f9d8a7b6310d82fd35a10db0b739b
7
- data.tar.gz: f0564b6c2288586dad11ad41d9a1f2631159239f022a52233a82a1e19e2e5f22b359f9d85762141b75526368c1d716cb6c4e5f54c8b9454453bc66aba772b765
6
+ metadata.gz: 8c2b0a2c8053326bcd400d0e921494244fcab4e5e29e130fb5685c9e95d0c685c6587bd241973d4bf89160e5cfe16c48bcc19d9724e5d626436dd60ebd01e24f
7
+ data.tar.gz: b411d51211d9a4372568aff51c56dd7d4eaff1a47f9b7023db934408ea3d6024131193626310298e78c864565b39d6a682d4e7c710e1de5c8dd24331b2596104
data/.termrc CHANGED
@@ -7,5 +7,5 @@ commands:
7
7
  rake: rake -T
8
8
 
9
9
  layout:
10
- - [ 'gs' ]
11
- - [ 'rake' ]
10
+ - [ gs ]
11
+ - [ rake ]
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  <img src="https://rawgithub.com/briangonzalez/termrc/master/images/osx.svg" width=25 style="margin-right: 10px"> termrc
3
2
  ======
4
3
  Take your [iTerm2](http://www.iterm2.com/) environments with you wherever you go.
@@ -22,7 +21,6 @@ The `.termrc` file is a [YAML](http://en.wikipedia.org/wiki/YAML) file which sto
22
21
  Place the `.termrc file` at your project's root, then call `termrc start`. Voila!
23
22
 
24
23
  **Example .termrc**
25
-
26
24
  ```yaml
27
25
  commands:
28
26
  here: echo "Hello, here."
@@ -32,18 +30,20 @@ commands:
32
30
  you: echo "Hello, you."
33
31
 
34
32
  layout:
35
- - [ 'here', 'there' ] # row 1, with 2 panes
36
- - [ 'world' ] # row 2, with 1 pane
37
- - [ 'me', 'you' ] # row 3, with 2 panes
33
+ - [ here, there ] # row 1, with 2 panes
34
+ - [ world ] # row 2, with 1 pane
35
+ - [ me, you ] # row 3, with 2 panes
38
36
  ```
39
37
 
40
38
  **The Result**
41
-
42
39
  A `.termrc` file is a YAML file which requires two keys: `commands` and a `layout`. Each item in `layout` corresponds to a row of panes in iTerm2. So, for instance, the example `.termrc` file above would produce a new iTerm2 window with the following commands running inside each pane:
43
40
 
44
41
  <img src="https://rawgithub.com/briangonzalez/termrc/master/images/termrc-screen.png">
45
42
 
46
- You can supply an optional third key, `root`, which indicates the root directory you'd like each command to be run inside of. Have a look at [this project's](https://github.com/briangonzalez/termrc/blob/master/.termrc) `.termrc` file for an example.
43
+ You can supply an optional third key, `root`, which indicates the root directory you'd like each command to be run inside of. Have a look at [this project's](https://github.com/briangonzalez/termrc/blob/master/.termrc)`.termrc` file for an example.
44
+
45
+ ** Tabs **
46
+ You can automate tabs by providing an array of arrays, each array denoting a new tab and the layout within it. See [this template file]() for an example.
47
47
 
48
48
  CLI
49
49
  ---
@@ -66,4 +66,4 @@ Find me on [Twitter](http://twitter.com/brianmgonzalez).
66
66
  Resources
67
67
  ---------
68
68
  - [iTerm2 - Scripting with Applescript](https://code.google.com/p/iterm2/wiki/AppleScript)
69
- - [iTerm2 - Working with panes](https://code.google.com/p/iterm2/issues/detail?id=559)
69
+ - [iTerm2 - Working with panes](https://code.google.com/p/iterm2/issues/detail?id=559)
@@ -1,13 +1,13 @@
1
1
 
2
2
  tell application "iTerm"
3
3
 
4
- -- Create a new terminal window.
5
- set myterm to (make new terminal)
4
+ -- Create a new terminal window or tab.
5
+ [window_or_tab]
6
6
 
7
7
  tell myterm
8
8
 
9
9
  -- Create a new session.
10
- set mysession to (make new session at the end of sessions)
10
+ [session]
11
11
 
12
12
  -- Create rows.
13
13
  [rows]
@@ -18,8 +18,8 @@ tell application "iTerm"
18
18
  -- Create panes within each row.
19
19
  [panes]
20
20
 
21
- -- Terminate session 1, which is unused.
22
- terminate the first session
21
+ -- Terminate first or last session, which are unused.
22
+ [terminate_unused]
23
23
 
24
24
  -- Sleep for a bit while we catch up.
25
25
  [sleep]
@@ -30,6 +30,6 @@ tell application "iTerm"
30
30
  end tell
31
31
 
32
32
  -- Reposition window.
33
- set the bounds of the first window to {10, 10, 600, 600}
33
+ -- set the bounds of the first window to {10, 10, 600, 600}
34
34
 
35
35
  end tell
@@ -9,6 +9,6 @@ commands:
9
9
  you: echo "Hello, you."
10
10
 
11
11
  layout:
12
- - [ 'here', 'there' ] # row 1, with 2 panes
13
- - [ 'world' ] # row 2, with 1 pane
14
- - [ 'me', 'you' ] # row 3, with 2 panes
12
+ - [ here, there ] # row 1, with 2 panes
13
+ - [ world ] # row 2, with 1 pane
14
+ - [ me, you ] # row 3, with 2 panes
@@ -0,0 +1,27 @@
1
+ root:
2
+ ~
3
+
4
+ commands:
5
+ here: echo "Hello, here."
6
+ there: echo "Hello, there."
7
+ world: echo "Hello, world."
8
+ me: echo "Hello, me."
9
+ you: echo "Hello, you."
10
+
11
+ layout:
12
+ - [
13
+ # Tab 1 **
14
+ [ here, there ] # row 1, with 2 panes
15
+ ]
16
+ - [
17
+ # Tab 2 **
18
+ [ here, there ], # row 1, with 2 panes
19
+ [ world ], # row 2, with 1 pane
20
+ [ me, you ] # row 3, with 2 panes
21
+ ]
22
+ - [
23
+ # Tab 3 **
24
+ [ here, there ], # row 1, with 2 panes
25
+ [ world ], # row 2, with 1 pane
26
+ [ me, you ] # row 3, with 2 panes
27
+ ]
@@ -10,25 +10,52 @@ module Termrc
10
10
  TEMPLATE_FILE = File.join( File.expand_path('../..', __FILE__), 'template', 'run.osascript' )
11
11
  TEMPLATE = File.read( TEMPLATE_FILE )
12
12
 
13
+ attr_accessor :layout
14
+ attr_accessor :commands
15
+
13
16
  def initialize(yml)
14
17
  @root = yml['root']
15
18
  @commands = yml['commands']
16
19
  @layout = yml['layout']
20
+ @cmd_index = 1
17
21
  end
18
22
 
19
23
  def run!
20
- f = applescript_file
21
- puts `/usr/bin/osascript #{f.path}`
22
- f.unlink
24
+ applescript_files.each do |f|
25
+ puts `/usr/bin/osascript #{f.path}`
26
+ f.unlink
27
+ end
28
+ end
29
+
30
+ def applescript_files
31
+ if tabs?
32
+ return @layout.each_with_index.map{ |layout_array, index|
33
+ applescript_file(layout_array, index)
34
+ }
35
+ else
36
+ return [ applescript_file(@layout, 0) ]
37
+ end
23
38
  end
24
39
 
25
- def applescript_file
40
+ def applescript_file(layout_array, index)
26
41
  t = TEMPLATE
27
- t = t.gsub("[rows]", rows)
28
- t = t.gsub("[sleep]", sleep)
29
- t = t.gsub("[panes]", panes)
30
- t = t.gsub("[commands]", commands)
31
- t
42
+
43
+ if index > 0
44
+ # All other tabs.
45
+ t = t.gsub("[window_or_tab]", new_tab)
46
+ t = t.gsub("[session]", current_session)
47
+ t = t.gsub("[terminate_unused]", terminate_session('last'))
48
+ else
49
+ # First tab.
50
+ t = t.gsub("[window_or_tab]", new_window)
51
+ t = t.gsub("[session]", new_session)
52
+ t = t.gsub("[terminate_unused]", terminate_session)
53
+ end
54
+
55
+ t = t.gsub("[rows]", rows(layout_array))
56
+ t = t.gsub("[sleep]", rest)
57
+ t = t.gsub("[panes]", panes(layout_array))
58
+ t = t.gsub("[commands]", commands(layout_array))
32
59
 
33
60
  file = Tempfile.new('termrc.osascript')
34
61
  file.write(t)
@@ -36,15 +63,15 @@ module Termrc
36
63
  file
37
64
  end
38
65
 
39
- def rows
40
- Array.new( row_count, new_row ).join("\n")
66
+ def rows(layout_array)
67
+ Array.new( row_count(layout_array), new_row ).join("\n")
41
68
  end
42
69
 
43
- def panes
70
+ def panes(layout_array)
44
71
  cmd = next_pane # back to the top
45
72
  cmd = next_pane # back to the top
46
73
 
47
- @layout.each do |cmds|
74
+ layout_array.each do |cmds|
48
75
  cmd << Array.new( cmds.length - 1, new_column ).join("\n")
49
76
  cmd << next_pane
50
77
  cmd << "\n"
@@ -53,28 +80,31 @@ module Termrc
53
80
  cmd
54
81
  end
55
82
 
56
- def commands
83
+ def commands(layout_array)
57
84
  cmd = ""
58
85
 
59
- index = 1
60
- @layout.each do |commands|
86
+ layout_array.each do |commands|
61
87
  commands.each do |name|
62
- cmd << execute_command(index, @commands[name] )
63
- index += 1
88
+ cmd << execute_command( @cmd_index, @commands[name] )
89
+ @cmd_index += 1
64
90
  end
65
91
  end
66
92
 
67
93
  cmd
68
94
  end
69
95
 
70
- def row_count
71
- @row_count ||= @layout.length
96
+ def row_count(layout_array)
97
+ layout_array.length
98
+ end
99
+
100
+ def tabs?
101
+ @layout[0].is_a?(Array) and @layout[0][0].is_a? Array
72
102
  end
73
103
 
74
104
  protected
75
105
 
76
- def sleep
77
- "do shell script \"sleep #{SLEEP_INTERVAL}\" \n"
106
+ def rest(i=SLEEP_INTERVAL)
107
+ "do shell script \"sleep #{i}\" \n"
78
108
  end
79
109
 
80
110
  def new_row
@@ -89,6 +119,29 @@ module Termrc
89
119
  keystroke("]", "command down")
90
120
  end
91
121
 
122
+ def new_tab
123
+ [
124
+ keystroke("t", "command down"),
125
+ "set myterm to (current terminal)",
126
+ ].join("\n")
127
+ end
128
+
129
+ def new_window
130
+ [ "set myterm to (make new terminal)" ].join("\n")
131
+ end
132
+
133
+ def new_session
134
+ "set mysession to (make new session at the end of sessions) "
135
+ end
136
+
137
+ def current_session
138
+ "set mysession to (current session) "
139
+ end
140
+
141
+ def terminate_session(which='first')
142
+ "terminate the #{which} session"
143
+ end
144
+
92
145
  def execute_command(item, command)
93
146
  command = command.gsub('"', '\\"')
94
147
  command = command.gsub("'", "\\'")
@@ -98,7 +151,7 @@ module Termrc
98
151
 
99
152
  def keystroke(key, using="")
100
153
  cmd = "tell application \"System Events\" to keystroke \"#{key}\" "
101
- cmd << "using #{using} \n" if using
154
+ cmd << "using {#{using}} \n" if using
102
155
  cmd << "\n" if !using
103
156
  cmd
104
157
  end
data/lib/termrc/cli.rb CHANGED
@@ -43,7 +43,8 @@ module Termrc
43
43
  file = file || '.termrc'
44
44
  raise Thor::Error.new "File '#{file}'' does not exist!" unless File.exist? file
45
45
 
46
- say "Starting termrc file: '#{file}'", :yellow
46
+ say "Starting termrc file: '#{file}'.", :yellow
47
+ say "[ Please wait until fully launched! ]", :red
47
48
  begin
48
49
  Termrc::Base.new( File.expand_path(file) )
49
50
  rescue Exception => e
data/termrc.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
10
10
  gem.executables << 'termrc'
11
11
  gem.name = "termrc"
12
- gem.version = '0.1.2'
12
+ gem.version = '0.2.0'
13
13
  gem.license = 'MIT'
14
14
 
15
15
  gem.add_runtime_dependency 'thor', '~> 0.18.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: termrc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Gonzalez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-03 00:00:00.000000000 Z
11
+ date: 2013-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -39,6 +39,7 @@ files:
39
39
  - bin/termrc
40
40
  - lib/template/run.osascript
41
41
  - lib/template/termrc_base.template
42
+ - lib/template/termrc_with_tabs.template
42
43
  - lib/termrc.rb
43
44
  - lib/termrc/base.rb
44
45
  - lib/termrc/builder.rb