class Tmux
Attributes
win[R]
Public Class Methods
new(shell = :bash)
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 75 def initialize(shell = :bash) @win = go(%W[new-window -d -P -F #I #{Shell.send(shell)}]).first go(%W[set-window-option -t #{@win} pane-base-index 0]) return unless shell == :fish send_keys 'function fish_prompt; end; clear', :Enter self.until(&:empty?) end
Public Instance Methods
capture()
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 100 def capture go(%W[capture-pane -p -J -t #{win}]).map(&:rstrip).reverse.drop_while(&:empty?).reverse end
focus()
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 88 def focus go(%W[select-window -t #{win}]) end
kill()
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 84 def kill go(%W[kill-window -t #{win}]) end
paste(str)
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 96 def paste(str) system('tmux', 'setb', str, ';', 'pasteb', '-t', win, ';', 'send-keys', '-t', win, 'Enter') end
prepare()
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 148 def prepare tries = 0 begin self.until(true) do |lines| message = "Prepare[#{tries}]" send_keys ' ', 'C-u', :Enter, message, :Left, :Right lines[-1] == message end rescue Minitest::Assertion (tries += 1) < 5 ? retry : raise end send_keys 'C-u', 'C-l' end
send_keys(*args)
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 92 def send_keys(*args) go(%W[send-keys -t #{win}] + args.map(&:to_s)) end
until(refresh = false) { |lines| ... }
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 104 def until(refresh = false) lines = nil begin wait do lines = capture class << lines def counts lazy .map { |l| l.scan(%r{^. ([0-9]+)/([0-9]+)( \(([0-9]+)\))?}) } .reject(&:empty?) .first&.first&.map(&:to_i)&.values_at(0, 1, 3) || [0, 0, 0] end def match_count counts[0] end def item_count counts[1] end def select_count counts[2] end def any_include?(val) method = val.is_a?(Regexp) ? :match : :include? find { |line| line.send(method, val) } end end yield(lines).tap do |ok| send_keys 'C-l' if refresh && !ok end end rescue Minitest::Assertion puts $ERROR_INFO.backtrace puts '>' * 80 puts lines puts '<' * 80 raise end lines end
Private Instance Methods
go(args)
click to toggle source
# File lib/helpers/fzf/test/test_go.rb, line 164 def go(args) IO.popen(%w[tmux] + args) { |io| io.readlines(chomp: true) } end