# [[ RYUDO ]] ## the minimalist floatiling window manager that flows -- Derek Stevens 2019 -- [![micro centered](./screenshots/micro_centered.png.thumb.png)](./screenshots/micro_centered.png) [![floating porn](./screenshots/floating.png.thumb.png)](./screenshots/floating.png) [![firefox maximized](./screenshots/firefox_maximized.png.thumb.png)](./screenshots/firefox_maximized.png) [![pseudotiling](./screenshots/pseudotiling.png.thumb.png)](./screenshots/pseudotiling.png) ### About `ryudo` is a fork of Russ Cox's `rio`, itself a fork of David Hogan's `9wm`. The primary additions I've made are: - Explicit list of eligible terminal programs in `config.h` - `urxvt` is the default terminal emulator (still tries `9term` and then `xterm` if no dice) - Window spawning behavior has been made more natural -- windows shouldn't spawn partially offscreen like with `rio` - Customizable colors, borders, fonts, gaps, and keybinds in `config.h` - Multimonitor support via `Xrandr` - Default keybindings: + New Terminal: Super+Slash + Switch Windows: Alt-Tab + Switch to Window on the next monitor: Alt-Shift-Tab + Destroy: Super+D + Iconify: Super+I + Uniconify: Super+U + Maximize: Super+M + moVe: Super+V + Reshape: Super+R + wrAngle: Super+A + Stick: Super+S + Snap Left: Super+H + Snap Right: Super+L + Snap Top: Super+K + Snap Bottom: Super+J + Snap Top-Left: Super+Q + Snap Bottom-Left: Super+W + Snap Bottom-Right: Super+O + Snap Top-Right: Super+P + Snap Big Center: Super+C + Snap Floating Center: Super+Shift+C + Virtual Desk++: Super+Right + Virtual Desk—: Super+Left - Other new features customizable by `config.h`: + Show/hide 'Stick' Button3 menuitem + `AUTOSTICK` list of windows to spawn sticky by default and not focus (pseudo-panel/dock windows) + `TRANSPARENTLIST` of window classes to be rendered with partial transparency (and corresponding OPACITY setting) + Optionally notify with `notify-send` which desktop is switched to (I use it with `dunst`) + Gaps for pseudo-tiling + Option to swap the keyboard shortcuts between "Snap Big Center" and "Snap Floating Center" (and the preferred behavior for terminals launched by keyboard) + Focus model for new windows in multimonitor setup (follow mouse or follow active window) The name "Ryudo" is a nod to "Rio" and a Japanese word for "flow." Using `ryudo` should feel very natural -- you can do things with keyboard or mouse depending on the situation. Terminal launching can be done with mouse using the popup menu, or using the keyboard, which will spawn a terminal window centered (its exact geometry is configurable via `config.h`). ### Dependencies, Building, Installation Running and building require the following: * a full `plan9port` installation * `libX11` and development headers * `libXT` and development headers * `libXrandr` and development headers If virtual desktop switching notification is enabled, it requires * `libnotify` and development headers Build with `build.sh` (calls `mk` and does some other magic), and install with `install.sh` (will install to a local folder if run as a normal user, or to your `$PLAN9/bin/` plus session wrapper in `/usr/bin` and `.desktop` file in `/usr/share/xsessions/` if run as root). If you have trouble building, you might need to edit the `mkfile` at line 2 to point to the proper location of your plan9port's `mkwsysrules.sh`, or edit the compiler flags (`CFLAGS`) linker flags (`LDFLAGS`) to point to your libraries' real location. ### Bugs and Caveats Of the bugs and caveats not already mentioned in `rio`'s README: - No per-pixel alpha support beyond `XShape` extension. - Switching back and forth between virtual desktops very quickly can cause some windows to glitch out, lose their parent (border), and become unfocusable. - Some applications that render fullscreen or dedicated OSD windows (Virtualbox, Zoom, etc) will need to be manually maximized to fix their alignment (in the former case) or otherwise misbehave. - Probably more! ### Legacy The original README from `rio`, (which contains the original README from 9wm) is in this repository. See [README.rio](./readme.rio)