package main // import "hhvn.uk/hbspbar" import ( "os" "strings" "syscall" "os/signal" "hhvn.uk/hbspbar/common" "hhvn.uk/hbspbar/drw" "hhvn.uk/hbspbar/bar" "hhvn.uk/hbspbar/bspc" ) 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() bar.Handle.NewState <- bspc.Handle.State for _, m := range bspc.Handle.State.Monitors { bar.Handle.Create <- m.ID } for { select { case s := <- signals: common.Error("%s\n", s) return case err := <- bar.Handle.Err: common.Error("%s\n", err) return case err := <- bspc.Handle.EvErr: common.Error("Couldn't read event: %s\n", err) return case event := <- bspc.Handle.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.Handle.Create <- id case "monitor_remove": bar.Handle.Destroy <- id } } } case err := <- bspc.Handle.StErr: common.Error("Couldn't load bspwm state: %s\n", err) return case <- bspc.Handle.StateUpdate: bar.Handle.NewState <- bspc.Handle.State } } }