class TermSlides::Slides

Attributes

scaling_factor[RW]

Public Class Methods

new(args, &block) click to toggle source
# File lib/term-slides.rb, line 209
def initialize args, &block
  @scaling_factor = 1
  @args = args
  if @args.size > 0 and @args[0] == "hovercraft"
    @renderer = HovercraftRenderer.new
  else
    @renderer = TTYRenderer.new
  end
  @slides = []
  instance_eval &block
end

Public Instance Methods

read_char() click to toggle source
# File lib/term-slides.rb, line 220
def read_char
  STDIN.echo = false
  STDIN.raw!

  input = STDIN.getc.chr
  if input == "\e" then
    input << STDIN.read_nonblock(3) rescue nil
    input << STDIN.read_nonblock(2) rescue nil
  end
ensure
  STDIN.echo = true
  STDIN.cooked!

  return input
end
run() click to toggle source
# File lib/term-slides.rb, line 235
def run
  i = 0
  if @args.size > 0
    if @args[0] == "hovercraft"
      @slides.each do |slide|
        slide.render
      end
    else
      print `clear`
      @slides[@args[0].to_i].render
    end
    return
  end
  print "\033[?25l"
  while true
    print `clear`

    puts "#{i + 1}/#{@slides.size}"
    @slides[i].render
    s = read_char
    if s == "q"
      break
    elsif ["+"].include?(s)
      @scaling_factor *= 1.1
    elsif ["-"].include?(s)
      @scaling_factor *=  0.9
    elsif ["p", "\e[D", "\e[A", "h", "k"].include?(s)
      i -= 1 if i > 0
    elsif ["n", "\e[C", "\e[B", "l", "j"].include?(s)
      i += 1 if i < (@slides.size - 1)
    end
  end
  print "\033[?25h"
end
slide(name, &block) click to toggle source
# File lib/term-slides.rb, line 206
def slide name, &block
  @slides << Slide.new(@renderer, name, self, &block)
end