lib/ruco/screen.rb in ruco-0.2.0.beta vs lib/ruco/screen.rb in ruco-0.2.0.beta2

- old
+ new

@@ -1,29 +1,23 @@ module Ruco class Screen - @@styles = {} - def initialize(options) @options = options @cache = [] end def self.open(options, &block) new(options).open(&block) end def open(&block) - if $ruco_colors and ENV['TERM'] == 'xterm' - ENV['TERM'] += '-256color' # activate 256 colors - end Curses.noecho # do not show typed chars Curses.nonl # turn off newline translation Curses.stdscr.keypad(true) # enable arrow keys Curses.raw # give us all other keys Curses.stdscr.nodelay = 1 # do not block -> we can use timeouts Curses.init_screen - Curses.start_color if $ruco_colors and Curses.has_colors? yield self ensure Curses.clear # needed to clear the menu/status bar on windows Curses.close_screen end @@ -92,64 +86,16 @@ return if @cache[key] == args # would not change the line -> nothing to do @cache[key] = args # store current line yield # render the line end - def self.curses_style(style) - @@styles[style] ||= begin - if $ruco_colors - foreground = $ruco_foreground || '#ffffff' - background = $ruco_background || '#000000' + STYLES = { + :normal => 0, + :reverse => Curses::A_REVERSE + } - foreground, background = if style == :normal - [foreground, background] - elsif style == :reverse - ['#000000', '#ffffff'] - else - # :red or [:red, :blue] - f,b = style - b ||= background - [f,b] - end - - foreground = html_to_terminal_color(foreground) - background = html_to_terminal_color(background) - color_id(foreground, background) - else # no colors - if style == :reverse - Curses::A_REVERSE - else - Curses::A_NORMAL - end - end - end - end - - # create a new color from foreground+background or reuse old - # and return color-id - def self.color_id(foreground, background) - @@color_ids ||= {} - @@color_ids[[foreground, background]] ||= begin - # make a new pair with a unique id - @@max_color_id ||= 0 - id = (@@max_color_id += 1) - unless defined? RSpec # stops normal text-output, do not use in tests - Curses::init_pair(id, foreground, background) - end - Curses.color_pair(id) - end - end - - COLOR_SOURCE_VALUES = 256 - COLOR_TARGET_VALUES = 5 - COLOR_DIVIDE = COLOR_SOURCE_VALUES / COLOR_TARGET_VALUES - TERM_COLOR_BASE = 16 - - def self.html_to_terminal_color(html_color) - return unless html_color - r = (html_color[1..2].to_i(16) / COLOR_DIVIDE) * 36 - g = (html_color[3..4].to_i(16) / COLOR_DIVIDE) * 6 - b = (html_color[5..6].to_i(16) / COLOR_DIVIDE) * 1 - TERM_COLOR_BASE + r + g + b + def self.curses_style(style) + return 0 unless style + STYLES[style] or raise("Unknown style #{style.inspect}") end end end