Nearly A Compliant Window Manager
This is just my daily-drive Window Manager
In its core it’s a port of dwm to Odin with a few changes in how things are done, more and less
|
Note
|
This is pretty much a personal repo made public in case someone finds it some use. There will be sporadic commits and no releases. Also, my config is here rather than sensible defaults |
|
Note
|
This repo includes Odin’s vendor:x11/xlib package with some modifications given some bindings were incorrect (and thus unusable) and I wanted this to compile with whatever odin version different distros may come with
|
odin build nacwmThen just exec it in your .xinitrc or whatever your Display Manager wants you to do
-
A bunch of features were omitted due to me not needing/caring about them
-
A bunch of features were added due to me needing/caring about them
-
Restart
-
Just a simple
execvp()
-
-
Preserve on restart
-
On restart, saves client data on a property which is loaded after
-
-
Resize corners
-
Similar to resizecorners but without warping the cursor because why would you
-
-
Any click type ( clkanywhere patch )
-
Resize anchors
-
Ensure a floating window doesn’t move from an anchored corner when it asks to be resized (doesn’t affect user resize)
-
There’s currently no visual indicator for them so just rember
-
-
IPC
-
May be controlled by setting the
_NACWM_COMMANDproperty on the root window. Checknacwm/ipc.odinfor details
-
-
NOTIFICATION_CLASS-
Windows won’t be raised over the window defined as
NOTIFICATION_CLASS
-
-
Keybind to center floating window
-
Keybind to unkindly kill windows (they sometimes misbehave)
-
Restricting/Associating certain tags to a monitor
-
Sizehints on tiled resizals (Not planned; who uses this?)
-
Urgency hint (Very likely adding soon)
-
Ratio-preserving resizals (Kinda planned, I don’t care too much about it)
-
Increment resizals (I don’t care about this for now)
-
Bar showing window title (I don’t really need it)
-
A bunch of click types (Won’t be using for now)
-
NMaster (I only ever use one)
-
Selecting previous set of tags (I don’t use this)
-
Rather than zooming a client to master, you swap it with another given an offset
-
Moving between monitors is absolute rather than relative
-
Assumes windows send absolute coordinates rather than relative to monitor (most windows sent absolute from what I observed;
dwmhid this by centering the window, which happened often) -
When moving a client to another
Monitor, it’s notzoom'd (more of an implementation detail than a conscious change)
-
Prefers
[dynamic]Tinstead of linked lists -
Clients are identified with an index into a global array of clients (g_clients) -
Clients have amonitorfield rather thanMonitors having a list ofclients -
Split into multiple files (without much logic, really, since I
grepthe entire thing anyways) -
Stacking is much more minimalistic (windows are raised on click when floating, buried below the bar on tile)
-
There’s only one focused
Client, rather than a focusedClientperMonitor;focus/unfocuslogic was also changed quite a bit -
The bar is drawn with cairo and pango which introduces huge dependencies but it’s just simpler code
-
dwm: For being the base of this project
-
dwm-commented: For helping me decipher what was going on