mirror of
				https://github.com/zsh-users/zsh-autosuggestions.git
				synced 2024-05-11 05:54:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'securerandom'
 | 
						|
 | 
						|
class TerminalSession
 | 
						|
  ZSH_BIN = ENV['TEST_ZSH_BIN'] || 'zsh'
 | 
						|
 | 
						|
  def initialize(width: 80, height: 24, prompt: '', term: 'xterm-256color')
 | 
						|
    tmux_command("new-session -d -x #{width} -y #{height} 'PS1=#{prompt} TERM=#{term} #{ZSH_BIN} -f'")
 | 
						|
  end
 | 
						|
 | 
						|
  def run_command(command)
 | 
						|
    send_string(command)
 | 
						|
    send_keys('enter')
 | 
						|
  end
 | 
						|
 | 
						|
  def send_string(str)
 | 
						|
    tmux_command("send-keys -t 0 -l '#{str.gsub("'", "\\'")}'")
 | 
						|
  end
 | 
						|
 | 
						|
  def send_keys(*keys)
 | 
						|
    tmux_command("send-keys -t 0 #{keys.join(' ')}")
 | 
						|
  end
 | 
						|
 | 
						|
  def content(esc_seqs: false)
 | 
						|
    cmd = 'capture-pane -p -t 0'
 | 
						|
    cmd += ' -e' if esc_seqs
 | 
						|
    tmux_command(cmd).strip
 | 
						|
  end
 | 
						|
 | 
						|
  def clear
 | 
						|
    send_keys('C-l')
 | 
						|
  end
 | 
						|
 | 
						|
  def destroy
 | 
						|
    tmux_command('kill-session')
 | 
						|
  end
 | 
						|
 | 
						|
  def cursor
 | 
						|
    tmux_command("display-message -t 0 -p '\#{cursor_x},\#{cursor_y}'").
 | 
						|
      strip.
 | 
						|
      split(',').
 | 
						|
      map(&:to_i)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def socket_name
 | 
						|
    @socket_name ||= SecureRandom.hex(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def tmux_command(cmd)
 | 
						|
    out = `tmux -u -L #{socket_name} #{cmd}`
 | 
						|
 | 
						|
    raise('tmux error') unless $?.success?
 | 
						|
 | 
						|
    out
 | 
						|
  end
 | 
						|
end
 |