mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-12-23 10:21:15 +01:00
Add TerminalSession helper for managing a tmux session
This commit is contained in:
parent
e6591d5de0
commit
07a6768fcb
2 changed files with 56 additions and 0 deletions
|
@ -1,4 +1,5 @@
|
|||
require 'rspec/wait'
|
||||
require 'terminal_session'
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.expect_with :rspec do |expectations|
|
||||
|
|
55
spec/terminal_session.rb
Normal file
55
spec/terminal_session.rb
Normal file
|
@ -0,0 +1,55 @@
|
|||
require 'securerandom'
|
||||
|
||||
class TerminalSession
|
||||
def initialize(width: 80, height: 24, prompt: '', term: 'xterm-256color')
|
||||
tmux_command("new-session -d -x #{width} -y #{height} 'PS1=#{prompt} TERM=#{term} zsh -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
|
Loading…
Reference in a new issue