class Pepin::CursesView::ListView
Public Class Methods
new(height, width, y, x, query:)
click to toggle source
# File lib/pepin/curses_view.rb, line 65 def initialize(height, width, y, x, query:) @query = query @window = Curses::Window.new(height, width, y, x) @query.add_observer -> { render }, :call end
Public Instance Methods
render()
click to toggle source
# File lib/pepin/curses_view.rb, line 72 def render @window.clear @query.search.each.with_index 1 do |item, n| selected = n == 1 matched_offset = @query.pattern ? @query.pattern.match(item).offset(0) : [-1, -1] @window.setpos n, 0 @window.attron Curses::A_UNDERLINE if selected item.each_char.with_index do |ch, i| @window.attron Curses::A_BOLD if i == matched_offset[0] @window.attroff Curses::A_BOLD if i == matched_offset[1] @window.addch ch end @window.addstr ' ' * (@window.maxx - @window.curx) @window.attroff Curses::A_UNDERLINE if selected @window.attroff Curses::A_BOLD end @window.refresh end