NAME¶
wmii - Window Manager Improved²
SYNOPSIS¶
wmii [
-a <address>] [
-r <wmiirc>]
wmii -v
DESCRIPTION¶
Overview¶
wmii is a dynamic window manager for X11. In contrast to static window
management the user rarely has to think about how to organize windows, no
matter what he is doing or how many applications are used at the same time.
The window manager adapts to the current environment and fits to the needs of
the user, rather than forcing him to use a preset, fixed layout and trying to
shoehorn all windows and applications into it.
wmii supports classic and tiled window management with extended keyboard
and mouse control. Classic window management arranges windows in a floating
layer in which tyen can be moved and resized freely. Tiled window management
arranges windows in vertical columns. Each column holds an arbitrary number
arbitrary windows and arranges them vertically in a non-overlapping manner.
They can then be moved and resized, among and within columns, at will.
wmii provides a virtual filesystem which represents the internal state
similar to the procfs of Unix operating systems. Modifying this virtual
filesystem results in changing the state of the window manager. The virtual
filesystem service can be accessed through 9P-capable client programs, like
wmiir(1). This allows simple and powerful remote control of the core window
manager.
Command Line Arguments¶
- -a <address>
- Specifies the address on which wmii should listen for connections.
The address takes the form
<protocol>!<address>. The default is of
the form:
unix!/tmp/ns. $USER.${DISPLAY%.0}/wmii
which opens a unix socket per Plan 9 Port conventions. To open a TCP socket,
listening at port 4332 on the loopback interface, use:
tcp!localhost!4332
$WMII_NAMESPACE is automatically set to this value.
- -r <wmiirc>
- Specifies which rc script to run. If <wmiirc> consists of a
single argument, $WMII_CONFPATH is searched before $PATH.
Otherwise, it is passed to the shell for evaluation. The environment
variables $WMII_ADDRESS and $WMII_CONFPATH are preset for
the script.
Terminology¶
- Display
- A running X server instance consisting of input devices and screens.
- Screen
- A physical or virtual (Xinerama or Xnest(1)) screen of an X display.
- Window
- A (rectangular) drawable X object which is displayed on a screen, usually
an application window.
- Client
- An application window surrounded by a frame window containing a border and
a titlebar.
- Floating layer
- A screen layer of wmii on top of all other layers, where clients
are arranged in a classic (floating) manner. They can be resized or moved
freely.
- Managed layer
- A screen layer of wmii underneath the floating layer, where clients
are arranged in a non-overlapping (managed) manner. Here, the window
manager dynamically assigns each client a size and position. The managed
layer consists of columns.
- Tag
- Alphanumeric strings which can be assigned to a client. This provides a
mechanism to group clients with similar properties. Clients can have one
tag, e.g. work, or several tags, e.g. work+mail. Tags are
separated with the + character.
- View
- A set of clients containing a specific tag, quite similar to a workspace
in other window managers. It consists of the floating and managed
layers.
- Column
- A column is a screen area which arranges clients vertically in a
non-overlapping way. Clients can be moved and resized between and within
columns freely.
- Bar
- The bar at the bottom of the screen displays a label for each view and
allows the creation of arbitrary user-defined labels.
- Event
- An event is a message which can be read from a special file in the
filesystem of wmii, such as a mouse button press, a key press, or a
message written by a different 9P-client.
Basic window management¶
Running a raw
wmii process without a wmiirc(1) script provides basic
window management capabilities. However, to use it effectively, remote control
through its filesystem interface is necessary. Without such a script, it is
only possible to move and resize clients with the mouse, but not to change
their tags or to switch views. Other interactions, such as customizing the
style, killing or retagging clients, and grabbing keys, cannot be achieved
without accessing the filesystem.
The filesystem can be accessed by connecting to the
address of
wmii with any 9P-capable client, such as
wmiir(1)
Actions¶
The default configuration provides for a special menu of actions. These consist
of either shell scripts in
$WMII_CONFPATH or action definitions
included in wmiirc.
Here is a list of the default actions:
exec |
Replace the window manager with another program |
quit |
Leave the window manager nicely |
rehash |
Refresh the program list |
showkeys |
Display a list of key bindings recognized by wmii |
status |
Periodically print date and load average to the bar |
welcome |
Display a welcome message that contains the wmii tutorial |
Default Key Bindings¶
All of the provided
wmiirc scripts accept at least the following key
bindings. They should also provide a
showkeys action to open a key
binding quick-reference.
Moving Around¶
Key |
Action |
Mod-h |
Move to a window to the left of the one currently focused |
Mod-l |
Move to a window to the right of the one currently focused |
Mod-j |
Move to the window below the one currently focused |
Mod-k |
Move to a window above the one currently focused |
Mod-space |
Toggle between the managed and floating layers |
Mod-t <tag> |
Move to the view of the given <tag> |
Mod-n |
Move to the next view |
Mod-b |
Move to the previous view |
Mod-[0-9] |
Move to the view with the given number |
Moving Things Around¶
Key |
Action |
Mod-Shift-h |
Move the current window window to a column on the
left |
Mod-Shift-l |
Move the current window to a column on the right |
Mod-Shift-j |
Move the current window below the window beneath it. |
Mod-Shift-k |
Move the current window above the window above it. |
Mod-Shift-space |
Toggle the current window between the managed and floating layer |
Mod-Shift-t <tag> |
Move the current window to the view of the given <tag> |
Mod-Shift-[0-9] |
Move the current window to the view with the given number |
Miscellaneous¶
Key |
Action |
Mod-m |
Switch the current column to max mode |
Mod-s |
Switch the current column to stack mode |
Mod-d |
Switch the current column to default mode |
Mod-Shift-c |
Kill the selected client |
Mod-p <program> |
Execute <program> |
Mod-a <action> |
Execute the named <action |
Mod-Enter |
Execute an x-terminal-emulator |
Configuration¶
If you feel the need to change the default configuration, then customize (as
described above) the
wmiirc action. This action is executed at the end
of the
wmii script and does all the work of setting up the window
manager, the key bindings, the bar labels, etc.
Filesystem¶
Most aspects of
wmii are controlled via the filesystem. It is usually
accessed via the
wmiir(1) command, but it can be accessed by any 9P, including
plan9port's 9P[
1], and can be mounted natively on Linux via v9fs[
1], and on Inferno (which man run on top of Linux). All data in the
filesystem, including filenames, is UTF-8 encoded. However, when accessed via
wmiir(1), text is automatically translated to and from your locale encoding.
The filesystem is, as are many other 9P filesystems, entirely synthetic. The
files exist only in memory, and are not written to disk. They are generally
initiated on wmii startup via a script such as wmiirc. Several files are used
to issue commands, others simply act as if they were ordinary files (their
contents are updated and returned exactly as written), though writing them has
side-effects (such as changing key bindings). A description of the filesystem
layout and control commands follows.
Hierarchy¶
- /
- Global control files
- /client/*/
- Client control files
- /tag/*/
- View control files
- /lbar/, /rbar/
- Files representing the contents of the bottom bar
The / Hierarchy¶
- colrules
- The colrules file contains a list of rules which affect the width
of newly created columns. Rules have the form:
/ <regex>/ -> <width>[+<width>]*
Where,
<width> := <percent of screen> | <pixels>px
When a new column, <n>, is created on a view whose name matches
<regex>, it is given the <n>th supplied
<width>. If there is no <n>th width, it is given
1/ <ncol>th of the screen.
- rules
- PROVISIONAL
The rules file contains a list of rules that may be used to
automatically set properties of new clients. Rules are specified as:
/ <regex>/ <key>=<value> ...
where each <key> represents a command in the clients ctl
file, and each <value> represents the value to assign to it.
The rules are applied when the client is first started and the contents of
the props file match the regular expression <regex>.
Additionally, the following keys are accepted and have special meaning:
- continue
- Normally, when a matching rule is encountered, rule matching stops. When
the continue key is provided (with any value), matching continues at the
next rule.
- force-tags=<tags>
- Like tags, but overrides any settings obtained obtained from the
client's group or from the _WMII_TAGS window property.
- keys
- The keys file contains a list of keys which wmii will grab.
Whenever these key combinations are pressed, the string which represents
them are written to '/event' as: Key <string>
- event
- The event file never returns EOF while wmii is running. It
stays open and reports events as they occur. Included among them are:
- [Not]Urgent <client> [Manager|Client]
- <client>'s urgent hint has been set or unset. The second arg
is [ Client] if it's been set by the client, and [ Manager]
if it's been set by wmii via a control message.
- [Not]UrgentTag <tag> [Manager|Client]
- A client on <tag> has had its urgent hint set, or the last
urgent client has had its urgent hint unset.
- Client<Click|MouseDown> <client>
<button>
- A client's titlebar has either been clicked or has a button pressed over
it.
- [Left|Right]Bar[Click|MouseDown] <button>
<bar>
- A left or right bar has been clicked or has a button pressed over it.
For a more comprehensive list of available events, see
wmii.pdf[
2]
- ctl
- The ctl file takes a number of messages to change global settings
such as color and font, which can be viewed by reading it. It also takes
the following commands:
- quit
- Quit wmii
- exec <prog>
- Replace wmii with <prog>
- spawn <prog>
- Spawn a new program, as if by the -r flag.
The /client/ Hierarchy¶
Each directory under '/client/' represents an X11 client. Each directory is
named for the X window id of the window the client represents, in the form
that most X utilities recognize. The one exception is the special 'sel'
directory, which represents the currently selected client.
- ctl
- When read, the 'ctl' file returns the X window id of the client. The
following commands may be written to it:
- allow <flags>
- The set of unusual actions the client is allowed to perform, in the same
format as the tag set.
- activate
- The client is allowed to activate itself – that is, focus its
window and, as the case may require, uncollapse it and select a tag it
resides on. This flag must be set on a client if you wish it able to
activate itself from the system tray.
- floating <on | off | always | never>
- Defines whether this client is likely to float when attached to a new
view. Ordinarilly, the value changes automatically whenever the window is
moved between the floating and managed layers. However, setting a value of
always or never overrides this behavior. Additionally,
dialogs, menus, docks, and splash screens will always float unless this
value is set to never.
- fullscreen <on | off | toggle>
- Sets the client's fullscreen state.
- group <group id>
- The client's group ID, or 0 if not part of a group. Clients tend to open
with the same tags and in the same columns as the last active member of
their group. Setting this property is only useful when done via the rules
file.
- kill
- Close the client's window.
- pid
- Read-only value of the PID of the program that owns the window, if the
value is available and the process is on the same machine as wmii.
- slay
- Forcibly kill the client's connection to the X server, closing all of its
windows. Kill the parent process if the client's PID is available.
- tags <tags>
- The client's tags. The same as the tags file.
- urgent <on | off | toggle>
- Set or unset the client's urgent hint.
- label
- Set or read a client's label (title).
- props
- Returns a clients class and label as:
<instance>:<class>: <label>.
- tags
- Set or read a client's tags. Tags are separated by +, -, or
^. Tags beginning with + are added, while those beginning
with - are removed and those beginning with ^ are toggled.
If the tag string written begins with +, ^, or -, the
written tags are added to or removed from the client's set, otherwise the
set is overwritten.
The /tag/ Hierarchy¶
Each directory under '/tag/' represents a view, containing all of the clients
with the given tag applied. The special 'sel' directory represents the
currently selected tag.
- ctl
- The 'ctl' file can be read to retrieve the name of the tag the directory
represents, or written with the following commands:
- select
- Select a client: select [ left|right|up|down]
select [
<row number>|sel] [
<frame
number>]
select client
<client>
- send
- Send a client somewhere:
- send [<client>|sel] [up|down|left|right]
- send [<client>|sel] <area>
- Send <client> to the nth <area>
- send [<client>|sel] toggle
- Toggle <client> between the floating and managed layer.
- swap
- Swap a client with another. Same syntax as send.
- grow
- Grow or shrink a client.
grow <frame> <direction> [<amount>]
- nudge
- Nudge a client in a given direction.
grow <frame> <direction> [<amount>]
Where the arguments are defined as follows:
- area
- Selects a column or the floating area.
area ::= <area_spec> | <screen_spec>:<area_spec>
When <screen_spec> is omitted and <area_spec> is
not "sel", 0 is assumed. "sel" by itself represents
the selected client no matter which screen it is on.
area_spec ::= "~" | <number> | "sel"
Where "~" represents the floating area and <number>
represents a column index, starting at one.
screen_spec ::= <number>
Where <number> representes the 0-based Xinerama screen number.
- frame
- Selects a client window.
frame ::= <area> <index> | <area> sel | client <window-id>
Where <index> represents the nth frame of <area>
or <window-id> is the X11 window id of the given client.
- amount
- The amount to grow or nudge something.
amount ::= <number> | <number>px
If "px" is given, <number> is interperated as an
exact pixel count. Otherwise, it's interperated as a
"reasonable" amount, which is usually either the height of a
window's title bar, or its sizing increment (as defined by X11) in a given
direction.
- index
- Read for a description of the contents of a tag.
The /rbar/, /lbar/ Hierarchy¶
The files under '/rbar/' and '/lbar/' represent the items of the bar at the
bottom of the screen. Files under '/lbar/' appear on the left side of the bar,
while those under '/rbar/' appear on the right, with the leftmost item
occupying all extra available space. The items are sorted lexicographically.
The files may be read or written to obtain or alter the colors and text of the
bars. The format is similar to the various
ctl files and should be self
explanitory.
FILES¶
- /tmp/ns.$USER.${DISPLAY%.0}/wmii
- The wmii socket file which provides a 9P service.
- /etc/X11/wmii
- Global action directory.
- ~/.wmii
- User-specific action directory. Actions are first searched here.
ENVIRONMENT¶
- $HOME, $DISPLAY
- See the section FILES above.
The following variables are set and exported within
wmii and thus can be
used in actions:
- $WMII_ADDRESS
- The address on which wmii is listening.
- $WMII_CONFPATH
- The path that wmii searches for its configuration scripts and
actions.
- $NAMESPACE
- The namespace directory to use if no address is provided.
SEE ALSO¶
wimenu(1),
wmii9menu(1),
witray(1),
wmiir(1),
wihack(1)
/usr/share/doc/wmii/wmii.pdf /usr/share/doc/wmii/FAQ
[
1]
http://www.suckless.org/wiki/wmii/tips/9p_tips
[
2] /usr/share/doc/wmii/wmii.pdf