okg
This commit is contained in:
parent
99f43d3408
commit
e5f827aed4
|
@ -7,6 +7,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/jezek/xgbutil"
|
"github.com/jezek/xgbutil"
|
||||||
|
@ -18,18 +19,19 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
err := _main()
|
c, err := _main()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
os.Exit(c)
|
||||||
|
|
||||||
}
|
}
|
||||||
func _main() error {
|
func _main() (code int, err error) {
|
||||||
// connect to the x server
|
// connect to the x server
|
||||||
log.Printf("connecting to xorg")
|
log.Printf("connecting to xorg")
|
||||||
x11, err := xgbutil.NewConn()
|
x11, err := xgbutil.NewConn()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return 1, err
|
||||||
}
|
}
|
||||||
defer x11.Conn().Close()
|
defer x11.Conn().Close()
|
||||||
|
|
||||||
|
@ -38,7 +40,7 @@ func _main() error {
|
||||||
log.Printf("starting bspwm")
|
log.Printf("starting bspwm")
|
||||||
ln, err := sock.Server(addr)
|
ln, err := sock.Server(addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return 1, err
|
||||||
}
|
}
|
||||||
defer ln.Close()
|
defer ln.Close()
|
||||||
|
|
||||||
|
@ -67,18 +69,41 @@ func _main() error {
|
||||||
handler.AddDomain[domains.Todo](h, "rule")
|
handler.AddDomain[domains.Todo](h, "rule")
|
||||||
handler.AddDomain[domains.Config](h, "config")
|
handler.AddDomain[domains.Config](h, "config")
|
||||||
handler.AddDomain[domains.Todo](h, "subscribe")
|
handler.AddDomain[domains.Todo](h, "subscribe")
|
||||||
handler.AddDomain[domains.Todo](h, "quit")
|
|
||||||
handler.AddDomain[domains.Query](h, "query")
|
handler.AddDomain[domains.Query](h, "query")
|
||||||
handler.AddDomain[domains.Echo](h, "echo")
|
handler.AddDomain[domains.Echo](h, "echo")
|
||||||
|
|
||||||
|
codeCh := make(chan int, 1)
|
||||||
|
|
||||||
|
handler.AddDomain[domains.Todo](h, "quit")
|
||||||
|
h.AddDomainFunc("quit", func() handler.Domain {
|
||||||
|
d := &domains.Lambda{
|
||||||
|
Fn: func(x *bsp.XWM, msg *sock.Msg) ([]byte, error) {
|
||||||
|
if !msg.HasNext() {
|
||||||
|
codeCh <- 0
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
str := msg.Next()
|
||||||
|
cd, err := strconv.Atoi(str)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
codeCh <- cd
|
||||||
|
return nil, nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
})
|
||||||
|
|
||||||
// message listen loop
|
// message listen loop
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case m := <-ln.Msg():
|
case m := <-ln.Msg():
|
||||||
h.Run(m)
|
h.Run(m)
|
||||||
|
case cint := <-codeCh:
|
||||||
|
stop()
|
||||||
|
return cint, nil
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
log.Println("bspwm shutting down...")
|
return 0, nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,6 +114,27 @@ func (m *Modifier[T]) setup() {
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%v", fv.Elem()), nil
|
return fmt.Sprintf("%v", fv.Elem()), nil
|
||||||
}
|
}
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
m.setters[k] = func(v string) (err error) {
|
||||||
|
var val float64
|
||||||
|
if v != "" {
|
||||||
|
val, err = strconv.ParseFloat(v, 10)
|
||||||
|
if err != nil {
|
||||||
|
return copies.NewInvalidValueErr(k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if fv.IsNil() {
|
||||||
|
fv.Set(reflect.New(ft.Type.Elem()))
|
||||||
|
}
|
||||||
|
fv.Elem().SetFloat(val)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
m.getters[k] = func() (string, error) {
|
||||||
|
if fv.IsNil() {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%v", fv.Elem()), nil
|
||||||
|
}
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
m.setters[k] = func(v string) error {
|
m.setters[k] = func(v string) error {
|
||||||
var b bool
|
var b bool
|
||||||
|
|
|
@ -71,7 +71,7 @@ func (w *WM) AddDesktop(name string, monitorName string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if monitor == nil {
|
if monitor == nil {
|
||||||
return fmt.Errorf("invalid descriptor found in '%s'", monitor)
|
return fmt.Errorf("invalid descriptor found in '%s'", monitorName)
|
||||||
}
|
}
|
||||||
w.Desktops = append(w.Desktops, &Desktop{
|
w.Desktops = append(w.Desktops, &Desktop{
|
||||||
Name: name,
|
Name: name,
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package domains
|
||||||
|
|
||||||
|
import (
|
||||||
|
"tuxpa.in/t/wm/src/bsp"
|
||||||
|
"tuxpa.in/t/wm/src/sock"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Lambda struct {
|
||||||
|
Fn func(x *bsp.XWM, msg *sock.Msg) ([]byte, error)
|
||||||
|
|
||||||
|
inject
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Lambda) Run(msg *sock.Msg) ([]byte, error) {
|
||||||
|
return n.Fn(n.XWM, msg)
|
||||||
|
}
|
|
@ -28,6 +28,17 @@ func AddDomain[T any, PT interface {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handler) AddDomainFunc(name string, fn func() Domain) {
|
||||||
|
if h.domains == nil {
|
||||||
|
h.domains = map[string]func() Domain{}
|
||||||
|
}
|
||||||
|
h.domains[name] = func() Domain {
|
||||||
|
d := fn()
|
||||||
|
d.SetXWM(h.XWM)
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (h *Handler) Run(msg *sock.Msg) {
|
func (h *Handler) Run(msg *sock.Msg) {
|
||||||
resp, err := h.run(msg)
|
resp, err := h.run(msg)
|
||||||
if msg.Err(err) {
|
if msg.Err(err) {
|
||||||
|
|
Loading…
Reference in New Issue