...
1
2
3 package main
4
5 import (
6 "fmt"
7 "log"
8
9 "github.com/jezek/xgb"
10 "github.com/jezek/xgb/xproto"
11 )
12
13 func main() {
14 X, err := xgb.NewConn()
15 if err != nil {
16 log.Fatal(err)
17 }
18
19
20 setup := xproto.Setup(X)
21 root := setup.DefaultScreen(X).Root
22
23
24 aname := "_NET_ACTIVE_WINDOW"
25 activeAtom, err := xproto.InternAtom(X, true, uint16(len(aname)),
26 aname).Reply()
27 if err != nil {
28 log.Fatal(err)
29 }
30
31
32 aname = "_NET_WM_NAME"
33 nameAtom, err := xproto.InternAtom(X, true, uint16(len(aname)),
34 aname).Reply()
35 if err != nil {
36 log.Fatal(err)
37 }
38
39
40
41
42
43
44 reply, err := xproto.GetProperty(X, false, root, activeAtom.Atom,
45 xproto.GetPropertyTypeAny, 0, (1<<32)-1).Reply()
46 if err != nil {
47 log.Fatal(err)
48 }
49 windowId := xproto.Window(xgb.Get32(reply.Value))
50 fmt.Printf("Active window id: %X\n", windowId)
51
52
53
54
55 reply, err = xproto.GetProperty(X, false, windowId, nameAtom.Atom,
56 xproto.GetPropertyTypeAny, 0, (1<<32)-1).Reply()
57 if err != nil {
58 log.Fatal(err)
59 }
60 fmt.Printf("Active window name: %s\n", string(reply.Value))
61 }
62
View as plain text