blob: 74dc3e73f98c965e615a2f0052eafb2d7a9d5528 (
plain) (
tree)
|
|
require 'ncurses'
require 'code/debug'
module Color
extend self
COLORSCHEMEDIR = File.join(MYDIR, 'data', 'colorscheme')
def load_colorscheme(name)
## colorschemes are located in data/colorscheme/
fname = File.join(COLORSCHEMEDIR, "#{name}.rb")
assert File.exists?(fname), "No such colorscheme: #{fname}"
clear_all
load fname
# ::Console.write("Colorscheme #{name} loaded.")
end
def clear_all()
clear
for key, type in TYPES
type.clear
end
end
def clear
for var in instance_variables
instance_variable_set(var, nil)
end
end
def default() -1 end
def black() 0 end
def red() 1 end
def green() 2 end
def yellow() 3 end
def blue() 4 end
def magenta() 5 end
def cyan() 6 end
def white() 7 end
alias df default
alias brown yellow
alias orange yellow
alias purlpe magenta
alias pink magenta
alias teal cyan
alias gray white
alias grey white
def none() Ncurses::A_NORMAL end
def bold() Ncurses::A_BOLD end
def reverse() Ncurses::A_REVERSE end
def underline() Ncurses::A_UNDERLINE end
def standout() Ncurses::A_STANDOUT end
def blink() Ncurses::A_BLINK end
def dim() Ncurses::A_DIM end
def protect() Ncurses::A_PROTECT end
def invisible() Ncurses::A_INVIS end
def altcharset() Ncurses::A_ALTCHARSET end
def chartext() Ncurses::A_CHARTEXT end
alias reversed reverse
alias revert reverse
alias invis invisible
def default_color() return default, default, none end
alias dc default_color
## a shortcut.
## use %w{txt type left_side}
## is equivalent to:
## def txt() @txt || @type || @left_side || @base end
def self.use(arr)
arr << 'base' unless arr.last == 'base'
body = arr.map{|x| "@#{x}"}.join(' || ')
eval "def #{arr.first}() #{body} end"
end
use %w{base}
use %w{file}
use %w{link file}
use %w{badlink link file}
use %w{goodlink link file}
use %w{directory file}
use %w{forbidden directory file}
use %w{top}
use %w{hostname top}
use %w{currentdir top}
use %w{currentfile top}
use %w{butt}
use %w{permissions butt}
use %w{allowed permissions butt}
use %w{denied permissions butt}
use %w{date butt}
use %w{info butt}
use %w{media file}
use %w{video media file}
use %w{sound media file}
use %w{image media file}
use %w{executable file}
use %w{script executable file}
use %w{binary executable file}
module Type
include Color
ATTRIBUTES = %w[
base file directory media executable
video sound image
script binary
link goodlink badlink
terminal_cursor error info
]
for a in ATTRIBUTES
eval <<-DONE
def #{a}()
@#{a}_cache ||= @#{a} || super || Color.#{a} || default_color
end
DONE
end
## this is only meant to be used in Color
def clear_all() nil end
end
module Normal; extend Type end
module Selected; extend Type end
module Marked; extend Type end
module Console; extend Type end
module SelectedCurrentRow; extend Type end
def [](x) TYPES[x] end
TYPES = {
:normal => Normal,
:selected => Selected,
:marked => Marked,
:console => Console,
:selected_current_row => SelectedCurrentRow
}
for key, val in TYPES
eval "def #{key}() #{val} end"
end
end
|