module TerminalImage

Constants

VERSION

Public Class Methods

encode(file) click to toggle source
# File lib/terminal_image.rb, line 30
def encode(file)
  if ENV['TERM_PROGRAM'] == 'iTerm.app'
    encode_for_iterm2(file)
  elsif which 'img2sixel'
    encode_for_libsixel(file)
  else
    puts 'Use iTerm2 or install libsixel according to https://github.com/saitoha/libsixel#install'
    raise UnsupportedTerminal, 'Unsupported terminal'
  end
end
encode_url(url) click to toggle source
# File lib/terminal_image.rb, line 23
def encode_url(url)
  tempfile = Tempfile.create
  tempfile.binmode
  URI.open(url) { |o| tempfile.write o.read }
  TerminalImage.encode(tempfile)
end
show(file) click to toggle source
# File lib/terminal_image.rb, line 19
def show(file)
  puts encode(file)
end
show_url(url) click to toggle source
# File lib/terminal_image.rb, line 12
def show_url(url)
  tempfile = Tempfile.create
  tempfile.binmode
  URI.open(url) { |o| tempfile.write o.read }
  TerminalImage.show(tempfile)
end

Private Class Methods

encode_for_iterm2(file) click to toggle source
# File lib/terminal_image.rb, line 43
def encode_for_iterm2(file)
  width, height = FastImage.size(file)
  "\033]1337;File=inline=1;width=#{width}px;height=#{height}px:#{Base64.strict_encode64(file.read)}\a\n"
end
encode_for_libsixel(file) click to toggle source
# File lib/terminal_image.rb, line 48
def encode_for_libsixel(file)
  `img2sixel < #{file.path} 2>/dev/null`
end
which(cmd) click to toggle source
# File lib/terminal_image.rb, line 52
def which(cmd)
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    exts.each do |ext|
      exe = File.join(path, "#{cmd}#{ext}")
      return exe if File.executable?(exe) && !File.directory?(exe)
    end
  end
  nil
end