class Vice::Blitter
Public Class Methods
new(window)
click to toggle source
# File lib/vice/blitter.rb, line 2 def initialize(window) Curses.init_pair 1, Curses::COLOR_BLACK, Curses::COLOR_WHITE window.attrset Curses.color_pair(0) end
Public Instance Methods
drawalert(vice, window)
click to toggle source
# File lib/vice/blitter.rb, line 25 def drawalert(vice, window) window.setpos Curses.lines - 1, 0 window.addstr ' ' * Curses.cols return if vice.msg.nil? window.setpos Curses.lines - 1, 0 window.addstr ' ' + vice.msg vice.reset_alert end
drawbuffer(vice, window)
click to toggle source
# File lib/vice/blitter.rb, line 79 def drawbuffer(vice, window) buffer = vice.buffers[vice.current_buffer] visual_cursor = Vice::Cursor.new buffer.cursor.line, 0 (0..buffer.cursor.col - 1).each do |i| visual_cursor.col += if buffer.currentline[i] == "\t" vice.config[:tab_width] else 1 end end drawtabs vice, buffer, window @linenumwidth = buffer.lines.to_s.length + 1 visual_cursor.line += 1 # space for tabs above buffer visual_cursor.line -= buffer.v_scroll visual_cursor.col += @linenumwidth + 1 # leave space for line numbers while visual_cursor.line >= Curses.lines - 2 buffer.v_scroll += 1 visual_cursor.line -= 1 end while visual_cursor.line < 1 buffer.v_scroll -= 1 visual_cursor.line += 1 end (1..Curses.lines - 2).each do |r| # r: on-screen line # i: in-buffer line i = r - 1 + buffer.v_scroll window.setpos r, 0 if i < buffer.lines line = pad buffer.getline(i).gsub(/(\t)/, ' ' * vice.config[:tab_width]) window.addstr formatnumber(i + 1) + line else window.addstr pad(formatnumber('~')) end end drawstatus vice.mode, window, buffer, vice.prompt drawalert vice, window if vice.mode == :prompt window.setpos Curses.lines - 2, vice.prompt.length + 2 else window.setpos visual_cursor.line, visual_cursor.col end window.refresh end
drawstatus(mode, window, buffer, prompt)
click to toggle source
# File lib/vice/blitter.rb, line 37 def drawstatus(mode, window, buffer, prompt) window.attrset Curses.color_pair(1) # clear window.setpos Curses.lines - 2, 0 window.addstr ' ' * Curses.cols # draw mode window.setpos Curses.lines - 2, 0 modestring = if mode == :insert ' -- insert --' elsif mode == :prompt ' :' + prompt end window.addstr modestring # draw cursor position location = buffer.cursor.line.to_s + ',' + buffer.cursor.col.to_s window.setpos Curses.lines - 2, Curses.cols - location.length - 1 window.addstr location window.attrset Curses.color_pair(0) end
drawtabs(vice, buffer, window)
click to toggle source
# File lib/vice/blitter.rb, line 7 def drawtabs(vice, buffer, window) window.attrset Curses.color_pair(1) window.setpos 0, 0 window.addstr ' ' * Curses.cols window.setpos 0, 2 vice.buffers.each do |b| window.attrset(Curses.color_pair(0) | Curses::A_BOLD) if b == buffer name = b.filename || '[no name]' name = b.modified ? '+ ' + name : name window.addstr ' ' + name + ' ' window.attrset Curses.color_pair(1) if b == buffer end window.attrset Curses.color_pair(0) end
formatnumber(number)
click to toggle source
# File lib/vice/blitter.rb, line 61 def formatnumber(number) delta = if number == '~' @linenumwidth - 1 else @linenumwidth - number.to_s.length end delta.times do number = ' ' + number.to_s end number += ' ' end
pad(string)
click to toggle source
# File lib/vice/blitter.rb, line 73 def pad(string) delta = Curses.cols - string.length delta.times { string += ' ' } if delta.positive? string end