class EverydayCurses::MyCurses

Attributes

bodies[RW]
ch[R]

endregion

footers[RW]
headers[RW]

Public Class Methods

new(use_curses, linesh, linesf) click to toggle source

region External

# File lib/everyday-curses/mycurses.rb, line 8
def initialize(use_curses, linesh, linesf)
  @use_curses = use_curses
  @linesh     = linesh
  @linesf     = linesf
  @colors     = []
  @headers    = []
  @bodies     = []
  @footers    = []
  @cur_l      = 0
  @max_l      = 0
  @ch         = nil
  setup_curses(linesf, linesh) if @use_curses
end

Public Instance Methods

body_live_append(str) click to toggle source
# File lib/everyday-curses/mycurses.rb, line 113
def body_live_append(str)
  @padb << str
  padb_refresh
end
clear() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 48
def clear
  @headers = []
  @bodies  = []
  @footers = []
end
clear_ch() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 92
def clear_ch
  read_ch
  while @ch == 10 || @ch == Curses::Key::ENTER || @ch == Curses::Key::UP || @ch == Curses::Key::DOWN
    read_ch
  end
end
configure_curses() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 33
def configure_curses
  @padh.keypad(true)
  @padh.clear
  @padh.nodelay = true
  @padb.keypad(true)
  @padb.clear
  @padb.nodelay = true
  @padf.keypad(true)
  @padf.clear
  @padf.nodelay = true
  Curses::cbreak
  Curses::start_color
  Curses::use_default_colors
end
dispose() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 123
def dispose
  Curses::close_screen if @use_curses
end
header_live_append(str) click to toggle source
# File lib/everyday-curses/mycurses.rb, line 108
def header_live_append(str)
  @padh << str
  padh_refresh
end
myprints() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 54
def myprints
  @use_curses ? print_curses : print_normal
end
print_curses() click to toggle source
print_normal() click to toggle source
read_ch() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 88
def read_ch
  @ch = @padf.getch
end
resize_curses() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 76
def resize_curses
  @padh.resize(@headers.count, Curses::cols)
  @padb.resize(@bodies.count, Curses::cols)
  @padf.resize(@footers.count, Curses::cols)
  @padh.clear
  @padb.clear
  @padf.clear
  @padh.setpos(0, 0)
  @padb.setpos(0, 0)
  @padf.setpos(0, 0)
end
scroll_iteration() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 99
def scroll_iteration
  old_subpad_size = @subpad_size
  update_subpad_size
  update_max_l
  update_scroll(@subpad_size != old_subpad_size)
  sleep(0.05)
  read_ch
end
setup_curses(linesf, linesh) click to toggle source
# File lib/everyday-curses/mycurses.rb, line 22
def setup_curses(linesf, linesh)
  Curses::noecho
  Curses::init_screen
  @subpad_start = linesh
  update_subpad_size
  @padh = Curses::Pad.new(linesh, Curses::cols)
  @padb = Curses::Pad.new(Curses::lines - linesh - linesf, Curses::cols)
  @padf = Curses::Pad.new(linesf, Curses::cols)
  configure_curses
end

Private Instance Methods

myprint(text, pad) click to toggle source
# File lib/everyday-curses/mycurses.rb, line 134
def myprint(text, pad)
  if @use_curses
    if text.include?("\e")
      pieces = text.scan(/#{"\e"}\[(.+?)m([^#{"\e"}]+?)#{"\e"}\[0m|([^#{"\e"}]+)/)
      pieces.each { |v|
        if v[2].nil?
          pad.attron(get_format(v[0])) {
            pad << v[1]
          }
        else
          pad << v[2]
        end
      }
    else
      pad << text
    end
  else
    print text
  end
end
myputs(text, pad) click to toggle source

region Internal

# File lib/everyday-curses/mycurses.rb, line 130
def myputs(text, pad)
  myprint("#{text}\n", pad)
end
padb_refresh() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 168
def padb_refresh
  @padb.refresh(@cur_l, 0, @subpad_start, 0, @subpad_start + @subpad_size - 1, Curses::cols - 1)
end
padf_refresh() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 172
def padf_refresh
  @padf.refresh(0, 0, @subpad_start + [@subpad_size, @bodies.count].min, 0, @subpad_start + [@subpad_size, @bodies.count].min + @footers.count, Curses::cols - 1)
end
padh_refresh() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 164
def padh_refresh
  @padh.refresh(0, 0, 0, 0, @subpad_start - 1, Curses::cols - 1)
end
update_max_l() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 155
def update_max_l
  @max_l = [0, @bodies.count - @subpad_size].max
end
update_scroll(force_refresh = false) click to toggle source
# File lib/everyday-curses/mycurses.rb, line 176
def update_scroll(force_refresh = false)
  if @ch == Curses::Key::UP
    @cur_l = [0, @cur_l - 1].max
  elsif @ch == Curses::Key::DOWN
    @cur_l = [@max_l, @cur_l + 1].min
  end
  @cur_l = [@cur_l, @max_l].min
  if @ch == Curses::Key::UP || @ch == Curses::Key::DOWN || force_refresh
    Curses::refresh
    padh_refresh
    padb_refresh
    padf_refresh
  end
  @cur_l
end
update_subpad_size() click to toggle source
# File lib/everyday-curses/mycurses.rb, line 159
def update_subpad_size
  Curses::refresh
  @subpad_size = Curses::lines - @linesh - @linesf
end