func initPairs(theme *ColorTheme, black bool) { fg := C.short(theme.Fg) bg := C.short(theme.Bg) if black { bg = C.COLOR_BLACK } else if theme.UseDefault { fg = -1 bg = -1 C.use_default_colors() } if theme.UseDefault { FG = -1 BG = -1 } else { FG = int(fg) BG = int(bg) C.assume_default_colors(C.int(theme.Fg), C.int(bg)) } CurrentFG = int(theme.Current) DarkBG = int(theme.DarkBg) darkBG := C.short(DarkBG) C.init_pair(ColPrompt, C.short(theme.Prompt), bg) C.init_pair(ColMatch, C.short(theme.Match), bg) C.init_pair(ColCurrent, C.short(theme.Current), darkBG) C.init_pair(ColCurrentMatch, C.short(theme.CurrentMatch), darkBG) C.init_pair(ColSpinner, C.short(theme.Spinner), bg) C.init_pair(ColInfo, C.short(theme.Info), bg) C.init_pair(ColCursor, C.short(theme.Cursor), darkBG) C.init_pair(ColSelected, C.short(theme.Selected), darkBG) C.init_pair(ColHeader, C.short(theme.Header), bg) }
func initPairs(baseTheme *ColorTheme, theme *ColorTheme, black bool) { fg := override(baseTheme.Fg, theme.Fg) bg := override(baseTheme.Bg, theme.Bg) if black { bg = C.COLOR_BLACK } else if theme.UseDefault { fg = colDefault bg = colDefault C.use_default_colors() } if theme.UseDefault { FG = colDefault BG = colDefault } else { FG = int(fg) BG = int(bg) C.assume_default_colors(C.int(override(baseTheme.Fg, theme.Fg)), C.int(bg)) } currentFG := override(baseTheme.Current, theme.Current) darkBG := override(baseTheme.DarkBg, theme.DarkBg) CurrentFG = int(currentFG) DarkBG = int(darkBG) C.init_pair(ColPrompt, override(baseTheme.Prompt, theme.Prompt), bg) C.init_pair(ColMatch, override(baseTheme.Match, theme.Match), bg) C.init_pair(ColCurrent, currentFG, darkBG) C.init_pair(ColCurrentMatch, override(baseTheme.CurrentMatch, theme.CurrentMatch), darkBG) C.init_pair(ColSpinner, override(baseTheme.Spinner, theme.Spinner), bg) C.init_pair(ColInfo, override(baseTheme.Info, theme.Info), bg) C.init_pair(ColCursor, override(baseTheme.Cursor, theme.Cursor), darkBG) C.init_pair(ColSelected, override(baseTheme.Selected, theme.Selected), darkBG) C.init_pair(ColHeader, override(baseTheme.Header, theme.Header), bg) C.init_pair(ColBorder, override(baseTheme.Border, theme.Border), bg) }
func Init(color bool, color256 bool, black bool, mouse bool) { { in, err := os.OpenFile("/dev/tty", syscall.O_RDONLY, 0) if err != nil { panic("Failed to open /dev/tty") } _in = in // Break STDIN // syscall.Dup2(int(in.Fd()), int(os.Stdin.Fd())) } C.swapOutput() C.setlocale(C.LC_ALL, C.CString("")) C.initscr() if mouse { C.mousemask(C.ALL_MOUSE_EVENTS, nil) } C.cbreak() C.noecho() C.raw() // stty dsusp undef intChan := make(chan os.Signal, 1) signal.Notify(intChan, os.Interrupt, os.Kill) go func() { <-intChan Close() os.Exit(1) }() if color { 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) } _color = attrColored } else { _color = attrMono } }
// UseDefaultColors tells the curses library to assign the terminal's default // foreground and background colors to color number -1. This will allow you to // call InitPair(x, -1, -1) to set both the foreground and backgroun colours // of pair x to the terminal's default. This function can fail if the terminal // does not support certain ncurses features like orig_pair or initialize_pair. func UseDefaultColors() error { if C.use_default_colors() == C.ERR { return errors.New("Failed to assume default colours.") } return nil }
func Use_default_colors() os.Error { if C.use_default_colors() == C.ERR { return CursesError{"Use_default_colors failed"} } return nil }