Skip to content


Subversion checkout URL

You can clone with
Download ZIP
prog minimalist stacking window manager
Branch: master
Failed to load latest commit information.
UNLICENSE I was asked what license nobox is under
nobox.c Removed scrot since I have imagemagick installed
readme Win8


Reductio ad absurdum of *box minimalism. It might be the illegible terseness of the code, the lack of rendering causing the startup screen to be void, or the lack of any other library besides libc and xcb. Whatever it is, it's not

conf nobox uses keycodes, not keysyms. This is the assumed mapping; verify with xev
LeftAlt64. nobox grabs 64, thus Alt's unavailable to clients. Also grabs Win
Win8. nb stealing Alt from the clients is for AltTab's release; Win isn't stolen, only existing combinations
Lclick1Alt drag, brings to top. Win maximizes. Mclick2 Input focus without bring to top. Rclick3Alt resize, bring to top. Win close
Tab23/~49 While holding Alt, repeated clicks will cycle windows. ~ cycles backwards
q24urxvtc w25thunderbird r27scrot o32killnobox p33shutdown a38firefox s39scite d40gimp j44maximize l46close c54clock
nb resolution is hardcoded for maximizing. Change di on main's first line

nobox's headers: stdlib's system, sys/wait's sigchld, and xcb/xcb

grab_key mess sets receiving Alt releases and mod grabbing

tx can be understood by reading case 23:case 49:. x and y are used mainly for window shuffling. This is underlined by stack's ABI. mz carries a flag to cover for when the user issues a command. mx and my are used by mvsz (move/resize). stack happens to have subsections, and is designed so jumping to its tail functions (hocus puts x on top, without the shuffle, while pocus input focuses for Mclick)

tx was added since AltTab requires constant book keeping. The hassle is that it has to bring the possible window on top, all while maintaining the general order (when choosing the next window, put the current one back) So tx is a nullable pointer to the window under consideration

MOTION_NOTIFY then BUTTON_RELEASE occur after mvsz. This is messy; it's assumed that stack and such won't get called between those events (After finding that that assumption only partially holds, I added mZ to keep a copy of mz's state. Overall, I went with worse is better and let oddities occur if one decides to Alt tab while resizing a window) Anywhere else, mx and my can be used as temporary variables or parameters (Like my for commands' key)

urxvtd -q -f -o
exec s/nobox/nobox

Something went wrong with that request. Please try again.