terminal_multiplexer 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.s??
6
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in terminal-multiplexer.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'rspec'
8
+ gem 'guard' #, '0.8.8'
9
+ gem 'guard-rspec'
10
+ gem 'pry'
11
+ gem 'libnotify'
12
+ gem 'rb-inotify'
13
+ gem 'rb-readline'
14
+ gem 'fuubar'
15
+ end
data/Guardfile ADDED
@@ -0,0 +1,11 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec',
5
+ :version => 2 ,
6
+ :cli => '--color --format Fuubar' do
7
+ watch(%r{^spec/.+_spec\.rb$})
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+ end
11
+
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ terminal-multiplexer (3) -- easy to use wrapper for tmux
2
+ =========================================================
3
+
4
+ ## DESCRIPTION
5
+
6
+ This is a wrapper for tmux to integrate easily in one's development workflow.
7
+
8
+ You should configure tmux via its config-file ".tmux.conf". You could use this
9
+ library to create sessions and windows in that sessions.
10
+
11
+ ## SYNOPSIS
12
+
13
+ ```bash
14
+ #require lib
15
+ require 'terminal-multiplexer'
16
+ #create new instance
17
+ tmux = Terminal::Multiplexer.new
18
+ #create new session to hold all windows
19
+ tmux.new_session
20
+ tmux.new_session('window_name','command')
21
+ #create new window
22
+ tmux.new_window
23
+ tmux.new_window('window_name','command')
24
+ #start tmux
25
+ tmux.start
26
+ ```
27
+
28
+ ## INSTALL
29
+
30
+ * `Packaged:`
31
+
32
+ ```bash
33
+ gem install terminal_multiplexer
34
+ ```
35
+
36
+ * `Source code:`
37
+
38
+ ```bash
39
+ git clone https://github.com/maxmeyer/terminal_multiplexer.git
40
+ cd terminal_multiplexer
41
+ rake build
42
+ gem install pkg/terminal_multiplexer-xxxx
43
+ ```
44
+
45
+ ## EXAMPLES
46
+
47
+ Please see "doc/examples/" for example scripts.
48
+
49
+ ## FURTHER READING
50
+
51
+ * http://tmux.sourceforge.net
52
+
53
+
54
+ ## LICENSE
55
+
56
+ (c) 2012-, All rights reserved, Max Meyer
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+ require 'terminal-multiplexer'
5
+
6
+ class Default < Thor
7
+ desc "work" , "Start working environment"
8
+ def work
9
+ tmux = Terminal::Multiplexer.new
10
+ tmux.new_session
11
+ tmux.new_window
12
+ tmux.new_window
13
+ tmux.new_window
14
+ tmux.new_window('tests', 'guard')
15
+ tmux.start
16
+ end
17
+ end
18
+
19
+ Default.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'terminal-multiplexer'
4
+
5
+ tmux = Terminal::Multiplexer.new
6
+ tmux.new_session
7
+ tmux.new_window
8
+ tmux.start
data/env ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+ require 'terminal-multiplexer'
5
+
6
+ class Default < Thor
7
+ desc "work" , "Start working environment"
8
+ def work
9
+ tmux = Terminal::Multiplexer.new
10
+ tmux.new_session
11
+ tmux.new_window
12
+ tmux.new_window
13
+ tmux.new_window
14
+ tmux.new_window('tests', 'guard')
15
+ tmux.start
16
+ end
17
+ end
18
+
19
+ Default.start
@@ -0,0 +1,11 @@
1
+ module Terminal
2
+ module Exceptions
3
+
4
+ class SessionNotFound < Exception
5
+ end
6
+
7
+ class DuplicateSessionIdentifier < Exception
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,50 @@
1
+ module Terminal
2
+ class Session
3
+ attr_reader :name, :command
4
+ attr_accessor :active_window
5
+
6
+ def initialize(name = 'default', command = 'zsh')
7
+
8
+ name = 'default' if name == nil or name == ''
9
+ command = 'zsh' if command == nil or command == ''
10
+
11
+ @name = name
12
+ @command = command
13
+ @windows = []
14
+ @active_window = 1
15
+ end
16
+
17
+ def plain
18
+ w_defs ||= build_window_string
19
+ w_opts ||= build_window_options
20
+
21
+ "new-session #{w_opts} #{command}\\;#{w_defs}"
22
+ end
23
+
24
+ private
25
+
26
+ def build_window_options
27
+ "-n #{name}"
28
+ end
29
+
30
+
31
+ def build_window_string
32
+ w_str = ''
33
+
34
+ if @windows.count > 0
35
+ w_str += ' '
36
+ w_str += @windows.collect{|w| w.plain}.join(' ')
37
+ end
38
+
39
+ w_str += " select-window -t:+#{active_window}\\;"
40
+
41
+ end
42
+
43
+ public
44
+
45
+ def add_window(window)
46
+ @windows << window
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,3 @@
1
+ module Terminal
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,20 @@
1
+ module Terminal
2
+ class Window
3
+ attr_accessor :name, :command
4
+
5
+ def initialize(name = 'tab', command = 'zsh')
6
+
7
+ name = 'tab' if name == nil or name == ''
8
+ command = 'zsh' if command == nil or command == ''
9
+
10
+ @name = name
11
+ @command = command
12
+ @options = []
13
+ end
14
+
15
+ def plain
16
+ @options.push "-n #{name}"
17
+ "new-window #{@options.join(' ')} #{command}\\;"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,61 @@
1
+ require 'terminal-multiplexer/version'
2
+ require 'terminal-multiplexer/window'
3
+ require 'terminal-multiplexer/session'
4
+ require 'terminal-multiplexer/exceptions'
5
+
6
+ require 'highline/import'
7
+
8
+ module Terminal
9
+ class Multiplexer
10
+ include Exceptions
11
+
12
+
13
+ def initialize(*options)
14
+ # @options = {
15
+ # :default_cmd => 'zsh'
16
+ # }.update options
17
+ #
18
+ @sessions = []
19
+ end
20
+
21
+ def new_session(name='default', command='zsh')
22
+ if @sessions.find { |s| s.name == name }
23
+ raise DuplicateSessionIdentifier , "Please do not reuse the session identifier. You used \"#{name}\" at least twice."
24
+ end
25
+
26
+ session = Session.new(name, command)
27
+ @sessions << session
28
+ session
29
+ end
30
+
31
+ def new_window(name='tab', command='zsh', session_name='default')
32
+ session = @sessions.find { |s| s.name == session_name }
33
+
34
+
35
+ if session == nil
36
+ say "Warning: No valid session found. Create a default one"
37
+ session = new_session
38
+ end
39
+
40
+ session.add_window Window.new( name , command )
41
+
42
+ end
43
+
44
+ private
45
+
46
+ def build_multiplexer_command_string
47
+ m_str = @sessions.collect{ |s| s.plain}.join(' ')
48
+ m_str
49
+ end
50
+
51
+ public
52
+
53
+ def start(process_info={})
54
+
55
+ process_info[:cmd] = 'tmux'
56
+ process_info[:status] = system("#{process_info[:cmd]} #{build_multiplexer_command_string}")
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ module Terminal
4
+ describe Session do
5
+ let(:sess) { Session.new }
6
+
7
+ describe "run with rubbish options" do
8
+ let(:sess) { Session.new(nil,nil) }
9
+
10
+ it "has a name" do
11
+ sess.name.should == 'default'
12
+ end
13
+
14
+ it " has a command associated with it" do
15
+ sess.command.should == 'zsh'
16
+ end
17
+ end
18
+
19
+ describe "run with no option" do
20
+
21
+ it "has a name" do
22
+ sess.name.should == 'default'
23
+ end
24
+
25
+ it " has a command associated with it" do
26
+ sess.command.should == 'zsh'
27
+ end
28
+ end
29
+
30
+ describe "run with option" do
31
+ let(:sess) { Session.new('session','ksh') }
32
+
33
+ it "has a name" do
34
+ sess.name.should == 'session'
35
+ end
36
+
37
+ it "has a command associated with it" do
38
+ sess.command.should == 'ksh'
39
+ end
40
+ end
41
+
42
+ describe "#plain" do
43
+ it "returns the correct tmux string" do
44
+ sess.plain.should == "new-session -n default zsh\\; select-window -t:+1\\;"
45
+ end
46
+ end
47
+
48
+ describe "#add_window" do
49
+ before :each do
50
+ @win = double('window')
51
+ @win.should_receive(:plain).and_return('new-window -n tab zsh\\;')
52
+ end
53
+
54
+ it "returns the correct tmux string" do
55
+ sess.add_window(@win)
56
+ sess.plain.should == "new-session -n default zsh\\; new-window -n tab zsh\\; select-window -t:+1\\;"
57
+ end
58
+ end
59
+
60
+ describe "#active_window" do
61
+ it "sets the active window after creation of session and windows" do
62
+ sess.active_window(2)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH << File.expand_path('../lib/terminal-multiplexer' , File.dirname(__FILE__))
2
+
3
+ require 'terminal-multiplexer'
4
+ require 'pry'
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ module Terminal
4
+ include Exceptions
5
+
6
+ describe Multiplexer do
7
+
8
+ describe "#new_session" do
9
+ let(:multi) { Multiplexer.new }
10
+
11
+ it "creates a new session with default name" do
12
+ multi.new_session
13
+ multi.send(:build_multiplexer_command_string).should == "new-session -n default zsh\\; select-window -t:+1\\;"
14
+ end
15
+
16
+ it "creates a new session with given name" do
17
+ multi.new_session('session1','ksh')
18
+ multi.send(:build_multiplexer_command_string).should == "new-session -n session1 ksh\\; select-window -t:+1\\;"
19
+ end
20
+
21
+ it "creates a string for all sessions created" do
22
+ multi.new_session
23
+ multi.new_session('session1','ksh')
24
+ multi.send(:build_multiplexer_command_string).should == "new-session -n default zsh\\; select-window -t:+1\\; new-session -n session1 ksh\\; select-window -t:+1\\;"
25
+ end
26
+
27
+ it "raises an exception if a session identifier is reused" do
28
+ lambda{
29
+ multi.new_session
30
+ multi.new_session
31
+ }.should raise_error DuplicateSessionIdentifier
32
+ end
33
+ end
34
+
35
+ describe "#new_window" do
36
+ let(:multi) { Multiplexer.new }
37
+
38
+ it "creates a new window for the default session" do
39
+ multi.new_window
40
+ multi.send(:build_multiplexer_command_string).should == "new-session -n default zsh\\; new-window -n tab zsh\\;"
41
+ end
42
+ it "creates two session one with and one without a window if the session name doesn't match " do
43
+ multi.new_session('session1','ksh')
44
+ multi.new_window
45
+ multi.send(:build_multiplexer_command_string).should == "new-session -n session1 ksh\\; new-session -n default zsh\\; new-window -n tab zsh\\; select-window -t:+1\\;"
46
+ end
47
+
48
+ it "creates two session one with and one without a window if the session name doesn't match " do
49
+ multi.new_session
50
+ multi.new_window
51
+ multi.send(:build_multiplexer_command_string).should == "new-session -n default zsh\\; new-window -n tab zsh\\; select-window -t:+1\\;"
52
+ end
53
+
54
+ #it "creates a new window for a given session" do
55
+ # multi.new_session
56
+ #end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ module Terminal
4
+ describe Window do
5
+ let(:win) { Window.new }
6
+
7
+ describe "run with no option" do
8
+ it "has a name" do
9
+ win.name.should == 'tab'
10
+ end
11
+
12
+ it "has a command associated with it" do
13
+ win.command.should == 'zsh'
14
+ end
15
+ end
16
+
17
+ describe "run with option" do
18
+ let(:win) { Window.new('win','ksh') }
19
+
20
+ it "has a name" do
21
+ win.name.should == 'win'
22
+ end
23
+
24
+ it "has a command associated with it" do
25
+ win.command.should == 'ksh'
26
+ end
27
+ end
28
+
29
+ describe "#plain" do
30
+ it "returns the correct tmux string" do
31
+ win.plain.should == "new-window -n tab zsh\\;"
32
+ end
33
+ end
34
+ end
35
+ end
36
+
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "terminal-multiplexer/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "terminal_multiplexer"
7
+ s.version = Terminal::VERSION
8
+ s.authors = ["Max Meyer"]
9
+ s.email = ["dev@fedux.org"]
10
+ s.homepage = ""
11
+ s.summary = %q{Building tmux sessions with ease}
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+ # specify any dependencies here; for example:
19
+ # s.add_development_dependency "rspec"
20
+ s.add_runtime_dependency "highline"
21
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terminal_multiplexer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Max Meyer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-04 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: highline
16
+ requirement: &13629420 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *13629420
25
+ description:
26
+ email:
27
+ - dev@fedux.org
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Guardfile
35
+ - README.md
36
+ - Rakefile
37
+ - doc/examples/tmux_wrapper-thor.rb
38
+ - doc/examples/tmux_wrapper.rb
39
+ - env
40
+ - lib/terminal-multiplexer.rb
41
+ - lib/terminal-multiplexer/exceptions.rb
42
+ - lib/terminal-multiplexer/session.rb
43
+ - lib/terminal-multiplexer/version.rb
44
+ - lib/terminal-multiplexer/window.rb
45
+ - spec/session/session_spec.rb
46
+ - spec/spec_helper.rb
47
+ - spec/terminal-multiplexer/terminal-multiplexer_spec.rb
48
+ - spec/window/window_spec.rb
49
+ - terminal_multiplexer.gemspec
50
+ homepage: ''
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 1.8.6
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Building tmux sessions with ease
74
+ test_files:
75
+ - spec/session/session_spec.rb
76
+ - spec/spec_helper.rb
77
+ - spec/terminal-multiplexer/terminal-multiplexer_spec.rb
78
+ - spec/window/window_spec.rb