summaryrefslogtreecommitdiff
path: root/doDumpX.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-08-28 04:26:32 -0500
committerJeff Carr <[email protected]>2025-08-28 04:26:32 -0500
commit75c89281ebac49ae21a69024758879f9caee141a (patch)
tree6702bbbceed00610a48719e89f1d517cc2192f8e /doDumpX.go
parent6dd0052dcf530af22a43ca02a8e0b6cebcc383e0 (diff)
try to make --restore workv0.0.7
Diffstat (limited to 'doDumpX.go')
-rw-r--r--doDumpX.go121
1 files changed, 121 insertions, 0 deletions
diff --git a/doDumpX.go b/doDumpX.go
new file mode 100644
index 0000000..3925c7d
--- /dev/null
+++ b/doDumpX.go
@@ -0,0 +1,121 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "reflect"
+
+ "github.com/BurntSushi/xgb"
+ "github.com/BurntSushi/xgb/xproto"
+)
+
+func doDumpX() {
+ conn, err := xgb.NewConn()
+ if err != nil {
+ fmt.Println("Failed to connect to X server:", err)
+ os.Exit(1)
+ }
+ defer conn.Close()
+
+ /*
+ // Start the terminal (replace with your app)
+ go func() {
+ if err := exec.Command("mate-terminal", "--title", "Workspace1-Terminal").Start(); err != nil {
+ fmt.Println("Error starting terminal:", err)
+ }
+ }()
+
+ // Wait for the window to appear
+ time.Sleep(2 * time.Second)
+ */
+
+ // Get the root window
+ setup := xproto.Setup(conn)
+ root := setup.DefaultScreen(conn).Root
+
+ // List children windows
+ reply, err := xproto.QueryTree(conn, root).Reply()
+ if err != nil {
+ fmt.Println("Failed to query windows:", err)
+ os.Exit(1)
+ }
+
+ // Find the window with the specified title
+ var target xproto.Window
+ for _, child := range reply.Children {
+ // fmt.Printf("child: %+v\n", child)
+ /*
+ // Get the atom for _NET_WM_NAME
+ atomReply, err := xproto.InternAtom(conn, true, uint16(len("_NET_WM_NAME")), "_NET_WM_NAME").Reply()
+ if err != nil {
+ log.Fatalf("Failed to intern atom _NET_WM_NAME: %v", err)
+ }
+ netWmNameAtom := atomReply.Atom // Correct field to use
+ */
+
+ /*
+ // Get the property for _NET_WM_NAME
+ nameReply, err := xproto.GetProperty(conn, false, child, netWmNameAtom, xproto.AtomString, 0, (1<<32)-1).Reply()
+ if err != nil {
+ log.Printf("Failed to get property _NET_WM_NAME: %v", err)
+ } else if len(nameReply.Value) > 0 {
+ fmt.Printf("Window name: %s\n", string(nameReply.Value))
+ }
+ */
+
+ /*
+ // Get the atom for _NET_WM_NAME
+ atomReply, err := xproto.InternAtom(conn, true, uint16(len("_NET_WM_NAME")), "_NET_WM_NAME").Reply()
+ if err != nil {
+ log.Fatalf("Failed to intern atom _NET_WM_NAME: %v", err)
+ } else {
+ fmt.Printf("found atomic name: %s\n", string(atomReply.Value))
+ }
+ netWmNameAtom := atomReply.Atom
+ */
+
+ /*
+ // Get the property for _NET_WM_NAME
+ nameReply, err := xproto.GetProperty(conn, false, child, netWmNameAtom, xproto.AtomString, 0, (1<<32)-1).Reply()
+ if err != nil {
+ log.Printf("Failed to get property _NET_WM_NAME: %v", err)
+ } else if len(nameReply.Value) > 0 {
+ fmt.Printf("Window name: %s\n", string(nameReply.Value))
+ }
+ */
+
+ geomReply, err := xproto.GetGeometry(conn, xproto.Drawable(child)).Reply()
+ if err != nil {
+ fmt.Printf("err: %+v\n", err)
+ // fmt.Printf("child geomReply: %+v\n", geomReply)
+ } else {
+ fmt.Printf("child geomReply: %+v\n", geomReply)
+ }
+
+ nameReply, err := xproto.GetProperty(conn, false, child, xproto.AtomWmName, xproto.AtomString, 0, (1<<32)-1).Reply()
+ if err != nil {
+ // fmt.Printf("child err: %+v\n", err)
+ } else {
+ fmt.Printf("child %+v nameReply: %+v %s\n", reflect.TypeOf(child), nameReply, string(nameReply.Value))
+ }
+ if err != nil || len(nameReply.Value) == 0 {
+ continue
+ }
+
+ name := string(nameReply.Value)
+ if name == "Terminal" {
+ target = child
+ break
+ }
+ }
+
+ if target == 0 {
+ fmt.Println("Window not found.")
+ os.Exit(1)
+ }
+
+ // Move the window to workspace 1 and set its geometry
+ xproto.ConfigureWindow(conn, target, xproto.ConfigWindowX|xproto.ConfigWindowY|xproto.ConfigWindowWidth|xproto.ConfigWindowHeight,
+ []uint32{100, 100, 800, 600})
+ fmt.Println("Window moved and resized.")
+}