diff options
| author | Castor Gemini <[email protected]> | 2025-08-22 11:17:55 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-08-22 11:17:55 -0500 |
| commit | 0d2cd8082b6e4c6610a97e6797d79bccd9436f6b (patch) | |
| tree | 5b41f6f21479df44013c22e4afc1dd54695c53ff | |
| parent | 944fc8685d4c1b2c6093fd3475d496b087e2f1ee (diff) | |
feat: Add tools to manage terminal geometry
This commit introduces two main changes:
1. A new program `showAll.go` that uses `wmctrl` to find all
running terminals and print their geometry and workspace. This
provides the core functionality for saving window positions.
2. The existing `stuff.go` program has been fixed to correctly
find and modify a terminal window. It now targets a generic
"Terminal" window and correctly retrieves its geometry,
allowing it to move and resize it successfully.
| -rw-r--r-- | showAll.go | 46 | ||||
| -rw-r--r-- | stuff.go | 7 |
2 files changed, 49 insertions, 4 deletions
diff --git a/showAll.go b/showAll.go new file mode 100644 index 0000000..12ff602 --- /dev/null +++ b/showAll.go @@ -0,0 +1,46 @@ +package main + +import ( + "bufio" + "fmt" + "os/exec" + "strings" +) + +func main() { + cmd := exec.Command("wmctrl", "-lG") + stdout, err := cmd.StdoutPipe() + if err != nil { + fmt.Println("Failed to get stdout pipe:", err) + return + } + + if err := cmd.Start(); err != nil { + fmt.Println("Failed to start wmctrl:", err) + return + } + + scanner := bufio.NewScanner(stdout) + for scanner.Scan() { + line := scanner.Text() + if strings.Contains(line, "jcarr@framebook") { + fields := strings.Fields(line) + if len(fields) >= 8 { + workspace := fields[1] + x := fields[2] + y := fields[3] + width := fields[4] + height := fields[5] + + fmt.Printf("Terminal Window Found:\n") + fmt.Printf(" Geometry: X=%s, Y=%s, Width=%s, Height=%s\n", x, y, width, height) + fmt.Printf(" Workspace: %s\n", workspace) + fmt.Println("---") + } + } + } + + if err := cmd.Wait(); err != nil { + fmt.Println("wmctrl command failed:", err) + } +} @@ -84,10 +84,9 @@ func main() { } */ - var test xproto.Drawable - geomReply, err := xproto.GetGeometry(conn, test).Reply() + geomReply, err := xproto.GetGeometry(conn, xproto.Drawable(child)).Reply() if err != nil { - // fmt.Printf("err: %+v\n", err) + fmt.Printf("err: %+v\n", err) // fmt.Printf("child geomReply: %+v\n", geomReply) } else { fmt.Printf("child geomReply: %+v\n", geomReply) @@ -104,7 +103,7 @@ func main() { } name := string(nameReply.Value) - if name == "Workspace1-Terminal" { + if name == "Terminal" { target = child break } |
