func main() { err := termui.Init() if err != nil { panic(err) } defer termui.Close() termui.UseTheme("helloworld") header := termui.NewPar("Press q to quit, Press j or k to switch tabs") header.Height = 1 header.Width = 50 header.HasBorder = false header.TextBgColor = termui.ColorBlue tab1 := extra.NewTab("pierwszy") par2 := termui.NewPar("Press q to quit\nPress j or k to switch tabs\n") par2.Height = 5 par2.Width = 37 par2.Y = 0 par2.Border.Label = "Keys" par2.Border.FgColor = termui.ColorYellow tab1.AddBlocks(par2) tab2 := extra.NewTab("drugi") bc := termui.NewBarChart() data := []int{3, 2, 5, 3, 9, 5, 3, 2, 5, 8, 3, 2, 4, 5, 3, 2, 5, 7, 5, 3, 2, 6, 7, 4, 6, 3, 6, 7, 8, 3, 6, 4, 5, 3, 2, 4, 6, 4, 8, 5, 9, 4, 3, 6, 5, 3, 6} bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} bc.Border.Label = "Bar Chart" bc.Data = data bc.Width = 26 bc.Height = 10 bc.DataLabels = bclabels bc.TextColor = termui.ColorGreen bc.BarColor = termui.ColorRed bc.NumColor = termui.ColorYellow tab2.AddBlocks(bc) tab3 := extra.NewTab("trzeci") tab4 := extra.NewTab("żółw") tab5 := extra.NewTab("four") tab6 := extra.NewTab("five") tabpane := extra.NewTabpane() tabpane.Y = 1 tabpane.Width = 30 tabpane.HasBorder = true tabpane.SetTabs(*tab1, *tab2, *tab3, *tab4, *tab5, *tab6) evt := termui.EventCh() termui.Render(header, tabpane) for { select { case e := <-evt: if e.Type == termui.EventKey { switch e.Ch { case 'q': return case 'j': tabpane.SetActiveLeft() termui.Render(header, tabpane) case 'k': tabpane.SetActiveRight() termui.Render(header, tabpane) } } } } }
func main() { if runtime.GOOS != "linux" { panic("Currently works only on Linux") } err := termui.Init() if err != nil { panic(err) } defer termui.Close() termWidth := 70 termui.UseTheme("helloworld") header := termui.NewPar("Press q to quit, Press j or k to switch tabs") header.Height = 1 header.Width = 50 header.HasBorder = false header.TextBgColor = termui.ColorBlue tabCpu := extra.NewTab("CPU") tabMem := extra.NewTab("MEM") tabpane := extra.NewTabpane() tabpane.Y = 1 tabpane.Width = 30 tabpane.HasBorder = false cs, errcs := getCpusStatsMap() cpusStats := NewCpusStats(cs) if errcs != nil { panic("error") } cpuTabElems := NewCpuTabElems(termWidth) Y := 0 cpuKeys := make([]string, 0, len(cs)) for key := range cs { cpuKeys = append(cpuKeys, key) } sort.Strings(cpuKeys) for _, key := range cpuKeys { g := cpuTabElems.AddGauge(key, Y, termWidth) Y += 3 tabCpu.AddBlocks(g) } cpuTabElems.LChart.Y = Y tabCpu.AddBlocks(cpuTabElems.LChart) memTabElems := NewMemTabElems(termWidth) ms, errm := getMemStats() if errm != nil { panic(errm) } memTabElems.Update(ms) tabMem.AddBlocks(memTabElems.Gauge) tabMem.AddBlocks(memTabElems.SLines) tabpane.SetTabs(*tabCpu, *tabMem) termui.Render(header, tabpane) evt := termui.EventCh() for { select { case e := <-evt: if e.Type == termui.EventKey { switch e.Ch { case 'q': return case 'j': tabpane.SetActiveLeft() termui.Render(header, tabpane) case 'k': tabpane.SetActiveRight() termui.Render(header, tabpane) } } case <-time.After(time.Second): cs, errcs := getCpusStatsMap() if errcs != nil { panic(errcs) } cpusStats.tick(cs) cpuTabElems.Update(*cpusStats) ms, errm := getMemStats() if errm != nil { panic(errm) } memTabElems.Update(ms) termui.Render(header, tabpane) } } }