diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2015-04-18 02:52:30 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-04-18 02:55:17 +0900 |
| commit | f66d94c6b06c58141c40935bfb18a45858cf79da (patch) | |
| tree | bf33ee2c91769984d59d2fd0fb479bdeda5f80a1 /src/curses | |
| parent | 2fe1e28220c543ddbf4e12ee7396e44ee85ad8e0 (diff) | |
| download | fzf-f66d94c6b06c58141c40935bfb18a45858cf79da.tar.gz | |
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`)
Diffstat (limited to 'src/curses')
| -rw-r--r-- | src/curses/curses.go | 98 |
1 files changed, 68 insertions, 30 deletions
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() |
