2 Commits

Author SHA1 Message Date
9a77a7bbc3 added WindowLayout to Window structure introduced in Niri version 25.08 2025-09-03 12:49:02 +02:00
16d2e8e8fd recycle json decoder 2025-08-23 12:36:36 +02:00
4 changed files with 29 additions and 10 deletions

2
go.mod
View File

@ -1,6 +1,6 @@
module git.tordarus.net/niri-tools/niri
go 1.24.4
go 1.25
require (
git.tordarus.net/tordarus/channel v0.1.20

View File

@ -5,14 +5,15 @@ import "encoding/json"
type WindowID int
type Window struct {
ID WindowID `json:"id"`
Title string `json:"title"`
AppID string `json:"app_id"`
PID int `json:"pid"`
WorkspaceID WorkspaceID `json:"workspace_id"`
Urgent bool `json:"is_urgent"`
Floating bool `json:"is_floating"`
Focused bool `json:"is_focused"`
ID WindowID `json:"id"`
Title string `json:"title"`
AppID string `json:"app_id"`
PID int `json:"pid"`
WorkspaceID WorkspaceID `json:"workspace_id"`
Urgent bool `json:"is_urgent"`
Floating bool `json:"is_floating"`
Focused bool `json:"is_focused"`
Layout WindowLayout `json:"layout"`
}
func (m Window) String() string {

16
model_window_layout.go Normal file
View File

@ -0,0 +1,16 @@
package niri
import "encoding/json"
type WindowLayout struct {
PosInScrollingLayout Option[[2]int] `json:"pos_in_scrolling_layout"`
TileSize [2]float64 `json:"tile_size"`
WindowSize [2]int `json:"window_size"`
TilePosInWorkspaceView Option[[2]float64] `json:"tile_pos_in_workspace_view"`
WindowOffsetInTile [2]float64 `json:"window_offset_in_tile"`
}
func (m WindowLayout) String() string {
data, _ := json.MarshalIndent(m, "", "\t")
return string(data)
}

View File

@ -77,9 +77,11 @@ func readSocketGeneric[T any](ctx context.Context, socket string, body io.Reader
defer close(out)
defer r.Close()
dec := json.NewDecoder(r)
for ctx.Err() == nil {
value := new(T)
if err := json.NewDecoder(r).Decode(value); err != nil {
if err := dec.Decode(value); err != nil {
if errors.Is(err, io.EOF) {
return
} else {