diff options
| author | hhvn <dev@hhvn.uk> | 2023-08-08 10:46:53 +0100 |
|---|---|---|
| committer | hhvn <dev@hhvn.uk> | 2023-08-08 10:49:30 +0100 |
| commit | 0543020038edb5de1162863e7401ea36f8a8584c (patch) | |
| tree | 713f77ec14b560a341863fed05502c62e062a593 /main.go | |
| parent | 2e3b351c355bd241de4aa4f2bdafd633ccef6eac (diff) | |
Channel-based bspwm communication
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 72 |
1 files changed, 59 insertions, 13 deletions
@@ -1,7 +1,7 @@ package main import ( - "fmt" + "strings" "hhvn.uk/hbspbar/common" "hhvn.uk/hbspbar/bspc" @@ -13,32 +13,78 @@ import ( */ ) +var reloadEvents = []string{ + "monitor_rename", + "monitor_swap", + "monitor_focus", + "desktop_add", + "desktop_rename", + "desktop_remove", + "desktop_swap", + "desktop_transfer", + "desktop_focus", + "desktop_activate", + "desktop_layout", + "node_add", + "node_remove", + "node_swap", + "node_transfer" } + +func reloadState(current *bspc.State) (*bspc.State, error) { + state, err := bspc.LoadState() + + if err != nil { + return current, err + } else { + return state, nil + } +} + +func handleEvent(events *bspc.Subscriber) (bool) { + var event *bspc.Event + + select { + case event = <-events.Event: + break + default: + return false + } + + if event.Err != nil { + common.Error("Couldn't read event: %s\n", event.Err) + return false + } + + for i := 0; i < len(reloadEvents); i++ { + if event.Name == reloadEvents[i] { + return true + } + } + + return false +} + func main() { state, err := bspc.LoadState() if (err != nil) { - common.Error("Couldn't load bspwm state: %s", err) + common.Error("Couldn't load bspwm state: %s\n", err) return } events, err := bspc.Subscribe() if (err != nil) { - common.Error("Couldn't subscribe to bspwm: %s", err) + common.Error("Couldn't subscribe to bspwm: %s\n", err) return } defer events.Close() - fmt.Println(state.Monitors[0].ID) for { - event, err := events.Get() - - if err != nil { - common.Error("Couldn't read event: %s", err) - return - } - - if event != nil { - fmt.Printf("Event: %v %v\n", event.Name, event.Tokens) + if reload := handleEvent(events); reload { + state, err = reloadState(state) + if err != nil { + common.Error("Couldn't reload bspwm state: %s\n", err) + } } } } |