diff options
| author | crecher <crecher@crecher.net> | 2026-09-17 19:13:38 +0200 |
|---|---|---|
| committer | crecher <crecher@crecher.net> | 2026-09-17 19:13:38 +0200 |
| commit | 1c631b6c718e572cb4a38b4aa0f30e198818a67a (patch) | |
| tree | ff67b615b25abca4be04bfa63cc2cb937b6a9791 /main.go | |
| parent | fc376af69e9eb034f76fad5a7b91304410ed004e (diff) | |
| parent | 829b3b3de104c9aea3a16258a08a5337111d5efb (diff) | |
| download | wm-1c631b6c718e572cb4a38b4aa0f30e198818a67a.tar.gz wm-1c631b6c718e572cb4a38b4aa0f30e198818a67a.zip | |
Merge pull request 'Updated tags!' (#1) from tags into main
Reviewed-on: https://codeberg.org/crecher/wm/pulls/1
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 205 |
1 files changed, 32 insertions, 173 deletions
@@ -3,14 +3,10 @@ package main import ( "fmt" "log" - "os" "os/exec" "github.com/BurntSushi/xgb" "github.com/BurntSushi/xgb/xproto" - - "github.com/crecheer/wm/config" - "github.com/crecheer/wm/keysym" ) // types @@ -23,34 +19,34 @@ type Key struct { Fn func(*xgb.Conn) } +// TODO rewrite tagging system type Client struct { - Win xproto.Window - X int16 - Y int16 - Width uint16 - Height uint16 - Floating bool - Tags BitMask + Win xproto.Window + X int16 + Y int16 + Width uint16 + Height uint16 + Floating bool + Tags BitMask + Next *Client + Previous *Client + MasterTags BitMask } var ( - keys []Key - clients = make(map[xproto.Window]*Client) - focused xproto.Window + clients = make(map[xproto.Window]*Client) + clientList []*Client + focused xproto.Window ) // bar var ( barWindow xproto.Window barGC xproto.Gcontext - barHeight uint16 = config.BarHeight ) // layout -var ( - layout string = "tileWithMaster" - gapSize = config.GapSize -) +var layout string = "tileWithMaster" // tags var ( @@ -119,12 +115,12 @@ func setup(conn *xgb.Conn) { log.Fatal(err) } - setupKeys(conn) + grabKeys(conn) if barHeight != 0 { createBar(conn) } - for _, cmd := range config.Startup { + for _, cmd := range startup { exec.Command(cmd) log.Println("Running startup command: " + cmd) } @@ -180,160 +176,12 @@ func killActiveWindow(conn *xgb.Conn, win xproto.Window) { xproto.DestroyWindow(conn, win) } + removeClient(win) delete(clients, win) focused = 0 updateWindows(conn) } -func setupKeys(conn *xgb.Conn) { - mod := uint16(xproto.ModMask1) - - // keybinds - keys = []Key{ - { - Mod: mod, - Sym: keysym.XK_Return, - Fn: func(conn *xgb.Conn) { - spawn("st", "-Z", "32") - }, - }, - { - Mod: mod | xproto.ModMaskShift, - Sym: keysym.XK_q, - Fn: func(conn *xgb.Conn) { - os.Exit(0) - }, - }, - { - Mod: mod, - Sym: keysym.XK_q, - Fn: func(conn *xgb.Conn) { - killActiveWindow(conn, focused) - }, - }, - { - Mod: mod, - Sym: keysym.XK_d, - Fn: func(conn *xgb.Conn) { - spawn("dmenu_run") - }, - }, - { - Mod: mod, - Sym: keysym.XK_l, - Fn: func(conn *xgb.Conn) { - layout = "tileHorizontal" - updateWindows(conn) - }, - }, - { - Mod: mod | xproto.ModMaskShift, - Sym: keysym.XK_l, - Fn: func(conn *xgb.Conn) { - layout = "tileVertical" - updateWindows(conn) - }, - }, - { - Mod: mod, - Sym: keysym.XK_m, - Fn: func(conn *xgb.Conn) { - layout = "tileWithMaster" - updateWindows(conn) - }, - }, - { - Mod: mod, - Sym: keysym.XK_0, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 2 ^ 32 - 1 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_1, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 1 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_2, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 2 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_3, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 4 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_4, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 8 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_5, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 16 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_6, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 32 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_7, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 64 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_8, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 128 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_9, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 256 - switchTags(conn, tags) - }, - }, - { - Mod: mod, - Sym: keysym.XK_0, - Fn: func(conn *xgb.Conn) { - var tags BitMask = 511 - switchTags(conn, tags) - }, - }, - } - grabKeys(conn) -} - func grabKeys(conn *xgb.Conn) { root := xproto.Setup(conn).DefaultScreen(conn).Root @@ -434,6 +282,7 @@ func manageWindow(conn *xgb.Conn, win xproto.Window) { } clients[win] = client + clientList = append([]*Client{client}, clientList...) log.Println("managing window:", win) // listen for events on this window @@ -457,9 +306,19 @@ func manageWindow(conn *xgb.Conn, win xproto.Window) { updateWindows(conn) } +func removeClient(win xproto.Window) { + for i, c := range clientList { + if c.Win == win { + clientList = append(clientList[:i], clientList[i+1:]...) + return + } + } +} + func unmanageWindow(conn *xgb.Conn, win xproto.Window) { if _, ok := clients[win]; ok { log.Println("unmanaging window:", win) + removeClient(win) delete(clients, win) updateWindows(conn) } @@ -469,6 +328,7 @@ func switchTags(conn *xgb.Conn, tags BitMask) { GlobalTags = tags // unmap everything + for _, client := range clients { xproto.UnmapWindow(conn, client.Win) } @@ -624,10 +484,9 @@ func createBar(conn *xgb.Conn) { root := screen.Root // create the window - // TODO: make this actually black and not green for some reason :D cw := []uint32{ + barColor, // should be black background xproto.EventMaskExposure, // redraw on expose - uint32(0x00000000), // "black" background (its green) } barWindow, _ = xproto.NewWindowId(conn) @@ -704,7 +563,7 @@ func getWindowTitle(conn *xgb.Conn, win xproto.Window) string { func updateWindows(conn *xgb.Conn) { ActiveClients = ActiveClients[:0] - for _, client := range clients { + for _, client := range clientList { log.Println(client.Tags & GlobalTags) if (client.Tags & GlobalTags) >= 1 { xproto.MapWindow(conn, client.Win) |