From 9e34cad0106b09b03d65ecfcb4043a10d290ec10 Mon Sep 17 00:00:00 2001 From: OBrutus <37221337+OBrutus@users.noreply.github.com> Date: Thu, 6 Aug 2026 19:24:28 +0530 Subject: [PATCH] resize_window kitten: Go RC escape-code helper --- kittens/resize_window/rc.go | 28 +++++++++++++++++++++++ kittens/resize_window/rc_test.go | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 kittens/resize_window/rc.go create mode 100644 kittens/resize_window/rc_test.go diff --git a/kittens/resize_window/rc.go b/kittens/resize_window/rc.go new file mode 100644 index 000000000..7a7127e55 --- /dev/null +++ b/kittens/resize_window/rc.go @@ -0,0 +1,28 @@ +// License: GPLv3 Copyright: 2026, Kovid Goyal, + +package resize_window + +import ( + "encoding/json" + + "github.com/kovidgoyal/kitty/tools/cmd/at" + "github.com/kovidgoyal/kitty/tools/utils" +) + +type resize_payload struct { + Increment int `json:"increment"` + Axis string `json:"axis"` + Self bool `json:"self"` +} + +func resize_command_escape_code(increment int, axis string) (string, error) { + rc := utils.RemoteControlCmd{ + Cmd: "resize-window", Version: at.ProtocolVersion, + Payload: resize_payload{Increment: increment, Axis: axis, Self: true}, + } + data, err := json.Marshal(rc) + if err != nil { + return "", err + } + return "\x1bP@kitty-cmd" + string(data) + "\x1b\\", nil +} diff --git a/kittens/resize_window/rc_test.go b/kittens/resize_window/rc_test.go new file mode 100644 index 000000000..aa234235c --- /dev/null +++ b/kittens/resize_window/rc_test.go @@ -0,0 +1,38 @@ +// License: GPLv3 Copyright: 2026, Kovid Goyal, + +package resize_window + +import ( + "encoding/json" + "strings" + "testing" +) + +func TestResizeCommandEscapeCode(t *testing.T) { + ec, err := resize_command_escape_code(-4, "vertical") + if err != nil { + t.Fatal(err) + } + if !strings.HasPrefix(ec, "\x1bP@kitty-cmd") || !strings.HasSuffix(ec, "\x1b\\") { + t.Fatalf("bad framing: %q", ec) + } + var cmd struct { + Cmd string `json:"cmd"` + Version [3]int `json:"version"` + Payload struct { + Increment int `json:"increment"` + Axis string `json:"axis"` + Self bool `json:"self"` + } `json:"payload"` + } + body := strings.TrimSuffix(strings.TrimPrefix(ec, "\x1bP@kitty-cmd"), "\x1b\\") + if err := json.Unmarshal([]byte(body), &cmd); err != nil { + t.Fatal(err) + } + if cmd.Cmd != "resize-window" || cmd.Payload.Increment != -4 || cmd.Payload.Axis != "vertical" || !cmd.Payload.Self { + t.Fatalf("bad command: %+v", cmd) + } + if cmd.Version == [3]int{} { + t.Fatal("version not set") + } +}