func Close() { C.endwin() C.swapOutput() }
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 } }