From f66d94c6b06c58141c40935bfb18a45858cf79da Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 18 Apr 2015 02:52:30 +0900 Subject: Add `--color=[dark|light|16|bw]` option - dark: the current default for 256-color terminal - light: color scheme for 256-color terminal with light background - 16: the default color scheme for 16-color terminal (`+2`) - bw: no colors (`+c`) --- src/curses/curses.go | 98 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 30 deletions(-) (limited to 'src/curses') diff --git a/src/curses/curses.go b/src/curses/curses.go index 3340a5c3..f3263615 100644 --- a/src/curses/curses.go +++ b/src/curses/curses.go @@ -95,6 +95,18 @@ const ( doubleClickDuration = 500 * time.Millisecond ) +type ColorTheme struct { + darkBg C.short + prompt C.short + match C.short + current C.short + currentMatch C.short + spinner C.short + info C.short + cursor C.short + selected C.short +} + type Event struct { Type int Char rune @@ -117,6 +129,9 @@ var ( _colorMap map[int]int _prevDownTime time.Time _clickY []int + Default16 *ColorTheme + Dark256 *ColorTheme + Light256 *ColorTheme DarkBG C.short ) @@ -124,6 +139,36 @@ func init() { _prevDownTime = time.Unix(0, 0) _clickY = []int{} _colorMap = make(map[int]int) + Default16 = &ColorTheme{ + darkBg: C.COLOR_BLACK, + prompt: C.COLOR_BLUE, + match: C.COLOR_GREEN, + current: C.COLOR_YELLOW, + currentMatch: C.COLOR_GREEN, + spinner: C.COLOR_GREEN, + info: C.COLOR_WHITE, + cursor: C.COLOR_RED, + selected: C.COLOR_MAGENTA} + Dark256 = &ColorTheme{ + darkBg: 236, + prompt: 110, + match: 108, + current: 254, + currentMatch: 151, + spinner: 148, + info: 144, + cursor: 161, + selected: 168} + Light256 = &ColorTheme{ + darkBg: 251, + prompt: 25, + match: 66, + current: 237, + currentMatch: 23, + spinner: 65, + info: 101, + cursor: 161, + selected: 168} } func attrColored(pair int, bold bool) C.int { @@ -173,7 +218,7 @@ func getch(nonblock bool) int { return int(b[0]) } -func Init(color bool, color256 bool, black bool, mouse bool) { +func Init(theme *ColorTheme, black bool, mouse bool) { { in, err := os.OpenFile("/dev/tty", syscall.O_RDONLY, 0) if err != nil { @@ -203,42 +248,35 @@ func Init(color bool, color256 bool, black bool, mouse bool) { os.Exit(1) }() - if color { + if theme != nil { C.start_color() - var bg C.short - if black { - bg = C.COLOR_BLACK - } else { - C.use_default_colors() - bg = -1 - } - if color256 { - DarkBG = 236 - C.init_pair(ColPrompt, 110, bg) - C.init_pair(ColMatch, 108, bg) - C.init_pair(ColCurrent, 254, DarkBG) - C.init_pair(ColCurrentMatch, 151, DarkBG) - C.init_pair(ColSpinner, 148, bg) - C.init_pair(ColInfo, 144, bg) - C.init_pair(ColCursor, 161, DarkBG) - C.init_pair(ColSelected, 168, DarkBG) - } else { - DarkBG = C.COLOR_BLACK - C.init_pair(ColPrompt, C.COLOR_BLUE, bg) - C.init_pair(ColMatch, C.COLOR_GREEN, bg) - C.init_pair(ColCurrent, C.COLOR_YELLOW, DarkBG) - C.init_pair(ColCurrentMatch, C.COLOR_GREEN, DarkBG) - C.init_pair(ColSpinner, C.COLOR_GREEN, bg) - C.init_pair(ColInfo, C.COLOR_WHITE, bg) - C.init_pair(ColCursor, C.COLOR_RED, DarkBG) - C.init_pair(ColSelected, C.COLOR_MAGENTA, DarkBG) - } + initPairs(theme, black) _color = attrColored } else { _color = attrMono } } +func initPairs(theme *ColorTheme, black bool) { + var bg C.short + if black { + bg = C.COLOR_BLACK + } else { + C.use_default_colors() + bg = -1 + } + + DarkBG = theme.darkBg + C.init_pair(ColPrompt, theme.prompt, bg) + C.init_pair(ColMatch, theme.match, bg) + C.init_pair(ColCurrent, theme.current, DarkBG) + C.init_pair(ColCurrentMatch, theme.currentMatch, DarkBG) + C.init_pair(ColSpinner, theme.spinner, bg) + C.init_pair(ColInfo, theme.info, bg) + C.init_pair(ColCursor, theme.cursor, DarkBG) + C.init_pair(ColSelected, theme.selected, DarkBG) +} + func Close() { C.endwin() C.swapOutput() -- cgit v1.2.3