class EverydayCurses::MyCurses
Attributes
bodies[RW]
ch[R]
endregion
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
# File lib/everyday-curses/mycurses.rb, line 64 def print_curses resize_curses myprint(@headers.join("\n"), @padh) myprint(@bodies.join("\n"), @padb) myprint(@footers.join("\n"), @padf) update_max_l @cur_l = [@cur_l, @max_l].min padh_refresh padb_refresh padf_refresh end
print_normal()
click to toggle source
# File lib/everyday-curses/mycurses.rb, line 58 def print_normal @headers.each { |v| puts v } @bodies.each { |v| puts v } @footers.each { |v| puts v } end
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