Class: ITermCLI::SessionManager
- Inherits:
-
Object
- Object
- ITermCLI::SessionManager
- Defined in:
- lib/iterm_cli/session_manager.rb
Defined Under Namespace
Classes: Session
Instance Attribute Summary collapse
-
#sessions ⇒ Object
readonly
Returns the value of attribute sessions.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(sessions) ⇒ SessionManager
constructor
A new instance of SessionManager.
- #kill(names) ⇒ Object
- #list ⇒ Object
- #start(names) ⇒ Object
Constructor Details
#initialize(sessions) ⇒ SessionManager
27 28 29 |
# File 'lib/iterm_cli/session_manager.rb', line 27 def initialize(sessions) @sessions = parse_sessions(sessions) end |
Instance Attribute Details
#sessions ⇒ Object (readonly)
Returns the value of attribute sessions.
25 26 27 |
# File 'lib/iterm_cli/session_manager.rb', line 25 def sessions @sessions end |
Class Method Details
.load(sessions_file) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/iterm_cli/session_manager.rb', line 16 def self.load(sessions_file) unless File.exists?(sessions_file) $stderr.puts "#{sessions_file} not found" exit 1 end sessions = YAML.load_file(sessions_file) new(sessions) end |
Instance Method Details
#kill(names) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/iterm_cli/session_manager.rb', line 45 def kill(names) sessions_will_kill = select_sessions_by_names(names) existed = existed_session_names sessions_will_kill.select!{|s| existed.include?(s.name) } mutex = Mutex.new sessions_will_kill.map{|session| Thread.new { mutex.synchronize { $stdout.puts "Kill #{session.name}" } Terminal::SendKeys.call(session.kill.split(" "), target: session.name) } }.each(&:join) end |
#list ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/iterm_cli/session_manager.rb', line 59 def list existed = existed_session_names column_width = sessions.values.map{|s| s.name.length }.max sessions.values.each do |session| prefix = if existed.include?(session.name) "*" else " " end puts [prefix, session.name.ljust(column_width), session.command].join(" ") end end |
#start(names) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/iterm_cli/session_manager.rb', line 31 def start(names) sessions_will_start = select_sessions_by_names(names) existed = existed_session_names sessions_will_start.reject!{|s| existed.include?(s.name) } mutex = Mutex.new sessions_will_start.map{|session| Thread.new { mutex.synchronize { $stdout.puts "Start #{session.name}" } Terminal::NewSession.call([session.command], name: session.name) } }.each(&:join) end |