From 0543020038edb5de1162863e7401ea36f8a8584c Mon Sep 17 00:00:00 2001 From: hhvn Date: Tue, 8 Aug 2023 10:46:53 +0100 Subject: Channel-based bspwm communication --- main.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 13 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 36dba0e..a9e23c2 100644 --- a/main.go +++ b/main.go @@ -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) + } } } } -- cgit v1.2.3