diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/config.def.nim | 13 | ||||
-rw-r--r-- | src/layouts.nim | 17 | ||||
-rw-r--r-- | src/objects.nim (renamed from src/keys.nim) | 12 | ||||
-rw-r--r-- | src/windowmanager.nim | 21 |
4 files changed, 40 insertions, 23 deletions
diff --git a/src/config.def.nim b/src/config.def.nim index c72d8e6..d62caf7 100644 --- a/src/config.def.nim +++ b/src/config.def.nim @@ -1,6 +1,6 @@ -import /keys, x11/x +import objects, x11/x -# settings, or something along those lines +# config const # default mod key, run xmodmap to see what the mod keys are on your current keyboard layout # Mod1 is alt and Mod4 is super @@ -12,17 +12,16 @@ const unfocused: "#295eb3", background: "#232323") - init* = @[ - "xsetroot -solid \"" & colours.background & "\""] - # in pixels frameWidth* = 2 + init* = @[ + "xsetroot -solid \"" & colours.background & "\""] + # store keybindings here keybindings*: seq[Key] = @[ # alt + shift + q will close the focused window - initKey( - closeWindow, + initKey( closeWindow, key = "q", mods = modifier or ShiftMask), diff --git a/src/layouts.nim b/src/layouts.nim new file mode 100644 index 0000000..3de5da4 --- /dev/null +++ b/src/layouts.nim @@ -0,0 +1,17 @@ +import objects, x11/xlib + +proc masterStack* (wm: WindowManager, w: cuint, h: cuint, offset: cuint) = + var + n = cuint wm.clients.len + leftoverPixels = h - ((n-1) * (h div (n-1))) + lastEnd: cint = 0 + + for i in 1..n-1: + var height = (h div (n-1)) + if leftoverPixels > 0: + height += 1 + leftoverPixels -= 1 + + discard wm.display.XMoveResizeWindow(wm.clients[i], cint w div 2, lastEnd, (w div 2)-offset, height-offset) + + lastEnd += cint height
\ No newline at end of file diff --git a/src/keys.nim b/src/objects.nim index a56412a..ed83fa8 100644 --- a/src/keys.nim +++ b/src/objects.nim @@ -1,3 +1,5 @@ +import tables, x11/[x, xlib] + type KeyFunc* = enum closeWindow, @@ -11,6 +13,16 @@ type keyfunc*: KeyFunc command*: string + WindowManager* = ref object + display*: PDisplay + screen*: PScreen + colormap*: Colormap + root*: Window + + clients*: seq[Window] + focused*: int + keys*: Table[cuint, objects.Key] + proc initKey* (keyfunc: KeyFunc, mods: cuint, key: string, command = ""): Key = return Key( mods: mods, diff --git a/src/windowmanager.nim b/src/windowmanager.nim index de4640c..2eb947e 100644 --- a/src/windowmanager.nim +++ b/src/windowmanager.nim @@ -1,19 +1,8 @@ import x11/[x, xlib], - config, /keys, - logging, /logger, - tables, os, posix - -type - WindowManager* = ref object - display: PDisplay - screen: PScreen - colormap: Colormap - root: Window - - clients: seq[Window] - focused: int - keys: Table[cuint, keys.Key] + config, objects, + logging, logger, + tables, os, posix # Initialiazation stuff proc initKeybindings (wm: WindowManager) @@ -65,7 +54,7 @@ proc createWindowManager*: WindowManager = clients: @[], focused: 0, - keys: initTable[cuint, keys.Key](1)) + keys: initTable[cuint, objects.Key](1)) # Run window manager proc run* (wm: WindowManager) = @@ -160,7 +149,7 @@ proc λsetMaster (wm: WindowManager) = tileWindows wm lvlDebug.log $wm.focused -proc λspawnCustom (wm: WindowManager, key: keys.Key) = +proc λspawnCustom (wm: WindowManager, key: objects.Key) = if fork() == 0: discard execvp(key.command, nil) quit QuitSuccess |