package main // import "hhvn.uk/hbspbar" import ( "os" "os/signal" "strings" "syscall" "hhvn.uk/hbspbar/bar" "hhvn.uk/hbspbar/bspc" "hhvn.uk/hbspbar/common" "hhvn.uk/hbspbar/drw" ) func main() { signals := make(chan os.Signal, 1) signal.Notify(signals, syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM) defer bar.Cleanup() if drw.InitErr != nil { common.Error("Couldn't initialize X: %s\n", drw.InitErr) return } if bspc.InitErr != nil { common.Error("Couldn't subscribe to bspwm: %s\n", bspc.InitErr) return } defer bspc.Cleanup() state := <- bspc.NewState bar.NewState <- state for _, m := range state.Monitors { bar.Create <- m.ID } for { select { case s := <-signals: common.Error("%s\n", s) return case err := <-bar.Err: common.Error("%s\n", err) return case err := <-bspc.EvErr: common.Error("Couldn't read event: %s\n", err) return case event := <-bspc.Event: if strings.HasPrefix(event.Name, "monitor_") { id, err := common.Intify(event.Tokens[0]) if err == nil { switch event.Name { case "monitor_add": case "monitor_geometry": bar.Create <- id case "monitor_remove": bar.Destroy <- id } } } case err := <-bspc.StErr: common.Error("Couldn't load bspwm state: %s\n", err) return case s := <-bspc.NewState: bar.NewState <- s } } }