a mess
This commit is contained in:
commit
8881383350
|
@ -0,0 +1,5 @@
|
||||||
|
WINDOWSIZE=1024:768
|
||||||
|
|
||||||
|
|
||||||
|
xephyr:
|
||||||
|
Xephyr -br ac -noreset ${WINDOWSIZE} :1
|
|
@ -0,0 +1,57 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "tuxpa.in/t/wm/src/cmd"
|
||||||
|
|
||||||
|
type Api struct {
|
||||||
|
Node Node `name:"node" cmd:"node"`
|
||||||
|
Desktop Desktop `name:"desktop" cmd:"desktop"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type NodeSel string
|
||||||
|
type Node struct {
|
||||||
|
NODE_SEL NodeSel `name:"NODE_SEL" arg:"" default:"focused" optional:"" help:"default is focused"`
|
||||||
|
Focus NodeFocus `name:"focus" cmd:"focus"`
|
||||||
|
// Activate NodeSel `name:"activate" cmd:"activate"`
|
||||||
|
// ToDesktop NodeSel `name:"to-desktop" cmd:"to-desktop"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type NodeFocus struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NodeFocus) Run(ctx *cmd.Context) error {
|
||||||
|
panic("not implemented") // TODO: Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Node) Run(ctx *cmd.Context) error {
|
||||||
|
panic("not implemented") // TODO: Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
type Desktop struct {
|
||||||
|
DESKTOP_SEL string `name:"DESKTOP_SEL"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Desktop) Run(ctx *cmd.Context) error {
|
||||||
|
panic("not implemented") // TODO: Implement
|
||||||
|
}
|
||||||
|
|
||||||
|
type Monitor struct {
|
||||||
|
MONITOR_SEL string `name:"MONITOR_SEL"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Query struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Wm struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Rule struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Subscribe struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Quit struct {
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"tuxpa.in/t/wm/src/sock"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
s, err := sock.Default()
|
||||||
|
errExit(err)
|
||||||
|
resp, err := s.Send(os.Args[1:]...)
|
||||||
|
errExit(err)
|
||||||
|
fmt.Print(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func errExit(err error) {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf(err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
module tuxpa.in/t/wm
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require github.com/alecthomas/kong v0.7.1
|
||||||
|
|
||||||
|
require github.com/jezek/xgb v1.1.0 // indirect
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.16 // indirect
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
|
||||||
|
modernc.org/libc v1.21.2 // indirect
|
||||||
|
modernc.org/mathutil v1.5.0 // indirect
|
||||||
|
modernc.org/memory v1.4.0 // indirect
|
||||||
|
modernc.org/xau v1.0.13 // indirect
|
||||||
|
modernc.org/xcb v1.0.13
|
||||||
|
modernc.org/xdmcp v1.0.14 // indirect
|
||||||
|
)
|
|
@ -0,0 +1,27 @@
|
||||||
|
github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0=
|
||||||
|
github.com/alecthomas/kong v0.7.1 h1:azoTh0IOfwlAX3qN9sHWTxACE2oV8Bg2gAwBsMwDQY4=
|
||||||
|
github.com/alecthomas/kong v0.7.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
|
||||||
|
github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||||
|
github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk=
|
||||||
|
github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
|
||||||
|
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
modernc.org/libc v1.21.2 h1:V053DgNSpAY+IPrO3XlWqrFKUiQqHyPqG4dsx42Ulck=
|
||||||
|
modernc.org/libc v1.21.2/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI=
|
||||||
|
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
|
||||||
|
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||||
|
modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk=
|
||||||
|
modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||||
|
modernc.org/xau v1.0.13 h1:AEYsSsJFSmkfhSwV6/dx6GoHt02BnZLmMcRT1O8EUOo=
|
||||||
|
modernc.org/xau v1.0.13/go.mod h1:5ORRqBKlhiUXwoVdM0+ZPy8plvcq0OPOdEgTWyeokhk=
|
||||||
|
modernc.org/xcb v1.0.13 h1:SIMh1yKsKjkfT/qAxcxSv/W+mRe4RnPzp+XewnD4rS4=
|
||||||
|
modernc.org/xcb v1.0.13/go.mod h1:M5m1dSVaHvBUf5XUg5Y/b1DZdJs6NK7pYLqsQ+d0swU=
|
||||||
|
modernc.org/xdmcp v1.0.14 h1:hRCxbYfl75rvOdCmVCPLBRCedClOPjpHiq+tOBzGS3Q=
|
||||||
|
modernc.org/xdmcp v1.0.14/go.mod h1:TDsH3iMey1HJ3tMCePfTy4dIX6hL/MIVnGREX97nCrE=
|
|
@ -0,0 +1,17 @@
|
||||||
|
package bspc
|
||||||
|
|
||||||
|
import "tuxpa.in/t/wm/src/sock"
|
||||||
|
|
||||||
|
type NODE_SEL string
|
||||||
|
|
||||||
|
type Node struct {
|
||||||
|
Sel NODE_SEL
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Node) Focus(node NODE_SEL) error {
|
||||||
|
s, err := sock.Default()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return s.Send("node", "-l")
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
type Context struct {
|
||||||
|
Debug bool
|
||||||
|
context.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
type Cmd interface {
|
||||||
|
Run(ctx *Context) error
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package sock
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/jezek/xgb"
|
||||||
|
)
|
||||||
|
|
||||||
|
const SOCKET_PATH_TPL = "/tmp/bspwm%s_%d_%d-socket"
|
||||||
|
|
||||||
|
type Sock struct {
|
||||||
|
C net.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Sock) Send(args ...string) (string, error) {
|
||||||
|
if len(args) == 0 {
|
||||||
|
return "", s.C.Close()
|
||||||
|
}
|
||||||
|
for _, msg := range args {
|
||||||
|
_, err := s.C.Write([]byte(msg))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
_, err = s.C.Write([]byte{0})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bts, err := io.ReadAll(s.C)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if len(bts) > 0 {
|
||||||
|
if bts[0] == 7 {
|
||||||
|
return "", fmt.Errorf(string(bts[1:]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string(bts), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Default() (*Sock, error) {
|
||||||
|
return New(os.Getenv("BSPWM_SOCKET"))
|
||||||
|
}
|
||||||
|
func New(path string) (*Sock, error) {
|
||||||
|
xc, err := xgb.NewConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer xc.Close()
|
||||||
|
if path == "" {
|
||||||
|
path = fmt.Sprintf(SOCKET_PATH_TPL, "", xc.DisplayNumber, xc.DefaultScreen)
|
||||||
|
}
|
||||||
|
conn, err := net.Dial("unix", path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Sock{C: conn}, nil
|
||||||
|
}
|
Loading…
Reference in New Issue