270 lines
11 KiB
Markdown
Executable file
270 lines
11 KiB
Markdown
Executable file
# [[ RYUDO ]]
|
|
## the minimalist floatiling window manager that flows
|
|
-- Derek Stevens <nilix@nilfm.cc> 2019 --
|
|
|
|
![micro centered](./screenshots/micro_centered.png)
|
|
![floating porn](./screenshots/floating.png)
|
|
![firefox maximized](./screenshots/firefox_maximized.png)
|
|
![pseudotiling](./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:
|
|
|
|
- `urxvt`, `konsole`, and `Alacritty` are detected as proper terminal programs for sweeping out new windows
|
|
- `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`
|
|
- Default keybindings:
|
|
+ New Terminal: Super+Slash
|
|
+ Destroy: Super+D
|
|
+ Iconify: Super+I
|
|
+ Uniconify: Super+U
|
|
+ Maximize: Super+M
|
|
+ moVe: Super+V
|
|
+ Reshape: Super+R
|
|
+ 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)
|
|
+ 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)
|
|
|
|
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
|
|
Being forked from Rio, Ryudo requires `plan9port`, `Xlib`, and `Xt`.
|
|
If you enable notifications, they need `libnotify`.
|
|
(With the exception of `plan9port`, you need the development headers for all the dependencies in addition to the libraries themselves in order to compile).
|
|
|
|
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`.
|
|
|
|
### Bugs and Caveats
|
|
Of the bugs and caveats not already mentioned in Rio's readme:
|
|
- Rendering of windows with RGBA surfaces is bound to RGB space (xshove and transset can be leveraged to get transparent terminals if you want it)
|
|
- Multimonitor setups are treated like one giant monitor. This is on the short list.
|
|
- 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
|
|
This is David Hogan's 9wm updated to behave more like
|
|
Plan 9's rio. Since I cannot get approval for the changes
|
|
and I'd prefer not to resort to patches, I have renamed it "rio".
|
|
|
|
Current incompatibilities that would be nice to fix:
|
|
|
|
- The command-line options should be made more like Plan 9.
|
|
|
|
- Should work out a protocol between 9term and rio so that:
|
|
* 9term can tell rio to blue its border during hold mode
|
|
|
|
- Should change window focus on b2/b3 clicks and then
|
|
pass along the click event to the now-focused window.
|
|
|
|
- Should change 9term to redirect b3 clicks to rio so that rio
|
|
can put up the usual b3 menu.
|
|
|
|
Axel Belinfante contributed the code to handle border grabbing
|
|
for resize and various other improvements.
|
|
|
|
The original README is below.
|
|
|
|
- russ cox
|
|
rsc@swtch.com
|
|
30 march 2004
|
|
|
|
|
|
9wm Version 1.2
|
|
Copyright 1994-1996 David Hogan.
|
|
|
|
What is 9wm?
|
|
============
|
|
|
|
9wm is an X window manager which attempts to emulate the Plan 9 window
|
|
manager 8-1/2 as far as possible within the constraints imposed by X.
|
|
It provides a simple yet comfortable user interface, without garish
|
|
decorations or title-bars. Or icons. And it's click-to-type. This
|
|
will not appeal to everybody, but if you're not put off yet then read
|
|
on. (And don't knock it until you've tried it.)
|
|
|
|
One major difference between 9wm and 8-1/2 is that the latter provides
|
|
windows of text with a typescript interface, and doesn't need to run a
|
|
separate program to emulate a terminal. 9wm, as an X window manager,
|
|
does require a separate program. For better 8-1/2 emulation, you should
|
|
obtain Matthew Farrow's "9term" program (ftp://ftp.cs.su.oz.au/matty/unicode),
|
|
version 1.6 or later (earlier versions don't cooperate with 9wm in
|
|
implementing "hold mode"). Of course, you can run xterm under 9wm as well.
|
|
|
|
What is 9wm not?
|
|
================
|
|
|
|
9wm is not a virtual window manager. It is not customisable to any
|
|
great extent. It is not large and unwieldy, and doesn't use the X
|
|
toolkit. Requests to make it any of these things will be silently
|
|
ignored (or flamed if I have had a bad day :-) If you want tvtwm
|
|
or mwm, you know where to get them...
|
|
|
|
Where do I get it?
|
|
==================
|
|
|
|
The latest version of 9wm is held at ftp://ftp.cs.su.oz.au/dhog/9wm
|
|
|
|
Author
|
|
======
|
|
|
|
9wm was written by David Hogan (dhog@cs.su.oz.au), a postgraduate
|
|
student at the Basser Department of Computer Science, University
|
|
of Sydney (http://www.cs.su.oz.au/~dhog/).
|
|
|
|
Licence
|
|
=======
|
|
|
|
9wm is free software, and is Copyright (c) 1994-1996 by David Hogan.
|
|
Permission is granted to all sentient beings to use this software,
|
|
to make copies of it, and to distribute those copies, provided
|
|
that:
|
|
|
|
(1) the copyright and licence notices are left intact
|
|
(2) the recipients are aware that it is free software
|
|
(3) any unapproved changes in functionality are either
|
|
(i) only distributed as patches
|
|
or (ii) distributed as a new program which is not called 9wm
|
|
and whose documentation gives credit where it is due
|
|
(4) the author is not held responsible for any defects
|
|
or shortcomings in the software, or damages caused by it.
|
|
|
|
There is no warranty for this software. Have a nice day.
|
|
|
|
How do I compile/install it?
|
|
============================
|
|
|
|
Assuming your system is correctly configured, you should only need to
|
|
run xmkmf to generate the Makefile, and then run make or make install.
|
|
make install.man should copy the manpage (9wm.man) to the appropriate
|
|
directory.
|
|
|
|
If the make fails, complaining that the function _XShapeQueryExtension
|
|
does not exist, try removing the "-DSHAPE" from the Imakefile, and
|
|
run xmkmf and make again.
|
|
|
|
If you don't have imake, or it is misconfigured, or you would prefer
|
|
not to use it, try copying the file "Makefile.no-imake" to "Makefile",
|
|
then edit the definitions in this Makefile to suit your system. This
|
|
may require defining suitable compilation flags for your system
|
|
(normally imake does this for you). For instance, on AIX you must
|
|
include "-DBSD_INCLUDES" in CFLAGS.
|
|
|
|
How do I use it?
|
|
================
|
|
|
|
See the manual page for details. You should probably read the
|
|
man page for 9term as well.
|
|
|
|
What if I find a bug?
|
|
=====================
|
|
|
|
Please mail all bug reports to 9wm-bugs@plan9.cs.su.oz.au, so
|
|
that I can incorporate fixes into the next release. If you can
|
|
tell me how to fix it, all the better.
|
|
|
|
Known Problems/Bugs
|
|
===================
|
|
|
|
9wm tries hard to emulate 8-1/2, but isn't 100% compatible. If
|
|
you are an experienced 8-1/2 user, please be patient with it.
|
|
|
|
One intentional difference between 9wm and 8-1/2 is in the behaviour
|
|
of the menu when the last hidden item is unhidden. Under 8-1/2, when
|
|
the menu is next used, it pops up with "New" selected. Under 9wm,
|
|
the (new) last menu item will be selected. This is a feature. It
|
|
may be confusing if you frequently switch between 9wm and 8-1/2.
|
|
If you don't like this feature, email me for the one line fix.
|
|
|
|
There have been some problems encountered when resizing 9term on
|
|
some platforms. This turns out to be a problem in 9term (actually
|
|
in libXg, to be precise). Newer versions of 9term should be
|
|
immune to this, see matty@cs.su.oz.au if your 9term needs fixing.
|
|
|
|
Some client programs do weird things. One of these is Frame Maker.
|
|
It appears that if it has a modal dialog on the screen, then if any
|
|
of its windows are current, all keypresses are redirected to the
|
|
modal dialog. This is not 9wm's fault -- Frame Maker is doing this.
|
|
|
|
Programs like Netscape Navigator like to put riddiculously long
|
|
icon name properties on their windows, of the form "Netscape: blah blah".
|
|
There is no way that I know of to stop netscape from doing this. For this
|
|
reason, 9wm truncates labels at the first colon it finds. This keeps the
|
|
button 3 menu from becoming excessively wide. Note that with same
|
|
applications, you can use an iconName resource to set the label; this
|
|
works well for "xman", whose default icon name of "Manual Browser"
|
|
is a tad too long.
|
|
|
|
See Also
|
|
========
|
|
|
|
http://www.cs.su.oz.au/~dhog/
|
|
The 9wm Home Page
|
|
|
|
ftp://ftp.cs.su.oz.au/matty/unicode/
|
|
for source to 9term (get README first)
|
|
|
|
ftp://plan9.att.com/plan9/unixsrc/sam/
|
|
for source && info on Rob Pike's editor "sam"
|
|
|
|
ftp://rtfm.mit.edu/pub/usenet/news.answers/unix-faq/shell/rc
|
|
for information on a publically available implementation
|
|
of the Plan 9 shell "rc" for unix (or look in comp.unix.shell).
|
|
|
|
ftp://viz.tamu.edu/pub/rc
|
|
for source to the abovementioned implementation of rc.
|
|
|
|
http://plan9.att.com/plan9/
|
|
http://plan9.att.com/magic/man2html/1/8%c2%bd
|
|
for information on Plan 9 (including the 8-1/2 manual entry)
|
|
|
|
Acknowledgements
|
|
================
|
|
|
|
Thanks to Rob Pike for writing the original 8-1/2 program (and
|
|
before that, mux) which inspired the writing of 9wm.
|
|
|
|
Thanks to John Mackin, whose gwm "wool code" for emulating mux
|
|
was also an inspiration: I used it (and hacked it) until I got
|
|
too frustrated with gwm's large memory requirements and lack of
|
|
speed (sorry Colas!), and decided to write a dedicated program.
|
|
|
|
Thanks to Matthew Farrow for writing 9term.
|
|
|
|
A big thanks to Dave Edmondson for adding support for
|
|
multi-screen displays.
|
|
|
|
The following people helped beta test 9wm:
|
|
|
|
John Mackin
|
|
Noel Hunt
|
|
Fred Curtis
|
|
James Matthew Farrow
|
|
Danny Yee
|
|
Arnold Robbins
|
|
Byron Rakitzis
|
|
micro@cooper.edu
|