package swayipc import ( "encoding/json" "fmt" ) // GetWorkspaces returns a list of Nodes of type NodeTypeWorkspace func (ipc *SwayIPC) GetWorkspaces() ([]*Node, error) { payload, err := ipc.get(MsgGetWorkspaces) if err != nil { return nil, err } nodes := []*Node{} if err := json.Unmarshal(payload.Payload, &nodes); err != nil { return nil, fmt.Errorf("failed to unmarshal json: %w", err) } return nodes, nil } // GetMarks returns a list of marks func (ipc *SwayIPC) GetMarks() ([]string, error) { payload, err := ipc.get(MsgGetMarks) if err != nil { return nil, err } marks := []string{} if err := json.Unmarshal(payload.Payload, &marks); err != nil { return nil, fmt.Errorf("failed to unmarshal json: %w", err) } return marks, nil } // GetBindingModes returns a list of binding modes func (ipc *SwayIPC) GetBindingModes() ([]string, error) { payload, err := ipc.get(MsgGetBindingModes) if err != nil { return nil, err } modes := []string{} if err := json.Unmarshal(payload.Payload, &modes); err != nil { return nil, fmt.Errorf("failed to unmarshal json: %w", err) } return modes, nil } // GetBindingState returns a list of binding states func (ipc *SwayIPC) GetBindingState() (*State, error) { payload, err := ipc.get(MsgGetBindingState) if err != nil { return nil, err } state := &State{} if err := json.Unmarshal(payload.Payload, &state); err != nil { return nil, fmt.Errorf("failed to unmarshal json: %w", err) } return state, nil } // GetConfig return user wm config func (ipc *SwayIPC) GetConfig() (string, error) { payload, err := ipc.get(MsgGetConfig) if err != nil { return "", err } config := &Config{} if err := json.Unmarshal(payload.Payload, &config); err != nil { return "", fmt.Errorf("failed to unmarshal json: %w", err) } return config.Config, nil } // SendTick sends a tick func (ipc *SwayIPC) SendTick(payload string) error { err := ipc.sendHeader(MsgSendTick, uint32(len(payload))) if err != nil { return err } err = ipc.sendPayload([]byte(payload)) if err != nil { return err } return nil }