class Console
Tmux integration
Public Class Methods
attach(session:, window: nil, pane: nil)
click to toggle source
# File lib/opsconsole/console.rb, line 69 def self.attach(session:, window: nil, pane: nil) select_pane(session: session, window: window, pane: pane) attach_session(session: session, window: window, pane: pane) end
attach_session(session:, window: nil, pane: nil)
click to toggle source
# File lib/opsconsole/console.rb, line 4 def self.attach_session(session:, window: nil, pane: nil) sh(%W[attach -t =#{session}:#{window}.#{pane}]) end
create(session:, window:, user:, hosts:, commands:, synchronize:)
click to toggle source
# File lib/opsconsole/console.rb, line 93 def self.create(session:, window:, user:, hosts:, commands:, synchronize:) return if present?(target: "=#{session}:#{window}.1") if present?(target: "=#{session}:") create_window(session: session, window: window) else create_session(session: session, window: window) end create_panes(session: session, window: window, user: user, hosts: hosts, commands: commands) set_window_option(session: session, window: window, option: 'synchronize-panes', value: synchronize ? 'on' : 'off') end
create_panes(session:, window:, user:, hosts:, commands:)
click to toggle source
# File lib/opsconsole/console.rb, line 116 def self.create_panes(session:, window:, user:, hosts:, commands:) hosts.size.downto(2) do |h| width = 100 / h split_window(session: session, window: window, pane: 1, direction: 'h', size: width) end hosts.size.downto(1) do |h| host = hosts[h - 1] ssh = "ssh -tt -o ConnectTimeout=2 #{user}@#{host}" commands = [ssh] if commands.empty? commands.size.downto(1) do |c| command = "#{ssh} '#{commands[c - 1]}'" split_window(session: session, window: window, pane: h, direction: 'v', size: 100 / c, command: command) end kill_pane(session: session, window: window, pane: h) end select_pane(session: session, window: window, pane: 1) end
create_session(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 149 def self.create_session(session:, window:) new_session(session: session, window: window) set_option(session: session, option: 'base-index', value: 1) set_option(session: session, option: 'pane-border-status', value: 'top') set_option(session: session, option: 'pane-border-format', value: '#{pane_index}') set_option(session: session, option: 'status-left-length', value: session.size + 4) set_option(session: session, option: 'status-right', value: ['#{session_name}', '#{window_name}', '#{pane_index}'].join(':')) set_window_option(session: session, window: window, option: 'pane-base-index', value: 1) end
create_window(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 175 def self.create_window(session:, window:) new_window(session: session, window: window) set_window_option(session: session, window: window, option: 'pane-base-index', value: 1) end
destroy(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 78 def self.destroy(session:, window:) if session.nil? STDERR.puts 'can not find session' elsif window.nil? kill_session(session: session) else kill_window(session: session, window: window) end end
kill_pane(session:, window:, pane:)
click to toggle source
# File lib/opsconsole/console.rb, line 16 def self.kill_pane(session:, window:, pane:) sh(%W[killp -t =#{session}:#{window}.#{pane}]) end
kill_session(session:)
click to toggle source
# File lib/opsconsole/console.rb, line 12 def self.kill_session(session:) sh(%W[kill-session -t =#{session}:]) end
kill_window(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 20 def self.kill_window(session:, window:) sh(%W[killw -t =#{session}:#{window}.]) end
list()
click to toggle source
# File lib/opsconsole/console.rb, line 89 def self.list list_panes end
list_panes()
click to toggle source
# File lib/opsconsole/console.rb, line 24 def self.list_panes fmt = ['#{session_name}', '#{window_name}', '#{window_active}', '#{pane_index}', '#{pane_active}'].join(' ') sh(%W[lsp -a -F #{fmt}]) end
new_session(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 33 def self.new_session(session:, window:) sh(%W[new -d -s #{session} -n #{window}]) end
new_window(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 37 def self.new_window(session:, window:) sh(%W[neww -t #{session} -n #{window}]) end
present?(target:)
click to toggle source
# File lib/opsconsole/console.rb, line 41 def self.present?(target:) sh(%W[has -t #{target}].push(err: File::NULL)) end
select_pane(session:, window:, pane:)
click to toggle source
# File lib/opsconsole/console.rb, line 61 def self.select_pane(session:, window:, pane:) sh(%W[selectp -t =#{session}:#{window}.#{pane}]) end
select_window(session:, window:)
click to toggle source
# File lib/opsconsole/console.rb, line 65 def self.select_window(session:, window:) sh(%W[selectw -t =#{session}:#{window}.]) end
set_option(session:, option:, value:)
click to toggle source
# File lib/opsconsole/console.rb, line 45 def self.set_option(session:, option:, value:) sh(%W[set -t =#{session}: #{option} #{value}]) end
set_window_option(session:, window:, option:, value:)
click to toggle source
# File lib/opsconsole/console.rb, line 49 def self.set_window_option(session:, window:, option:, value:) sh(%W[setw -t =#{session}:#{window}. #{option} #{value}]) end
sh(args)
click to toggle source
# File lib/opsconsole/console.rb, line 8 def self.sh(args) system('tmux', '-L', 'opsconsole', *args) end
split_window(session:, window:, pane:, direction:, size:, command: nil)
click to toggle source
# File lib/opsconsole/console.rb, line 53 def self.split_window(session:, window:, pane:, direction:, size:, command: nil) if command.nil? sh(%W[splitw -t =#{session}:#{window}.#{pane} -#{direction} -p #{size}]) else sh(%W[splitw -t =#{session}:#{window}.#{pane} -#{direction} -p #{size} #{command}]) end end