mirror of
https://github.com/0intro/wmii
synced 2024-11-22 22:02:30 +03:00
371 lines
14 KiB
TeX
371 lines
14 KiB
TeX
\begin{Name}{1}{wmii}{Kris Maglione}{}{wmii - window manager improved, improved}
|
|
\Prog{wmii}-VERSION
|
|
\end{Name}
|
|
|
|
\section{SYNOPSIS}
|
|
\Prog{wmii} \oOptArg{-a}{<address>} \oOptArg{-c}{<wmiirc>} \\
|
|
\Prog{wmii} \Opt{-v}
|
|
|
|
\section{DESCRIPTION}
|
|
|
|
\subsection{Overview}
|
|
|
|
\Prog{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.
|
|
|
|
\Prog{wmii} supports classic and tiled window management with
|
|
extended keyboard and mouse control. The classic window
|
|
management arranges windows in a floating layer in which windows
|
|
can be moved and resized freely. The tiled window management is
|
|
based on columns which split up the screen horizontally. Each
|
|
column handles arbitrary windows and arranges them vertically in
|
|
a non\-overlapping way. They can then be moved and resized
|
|
between and within columns at will.
|
|
|
|
\Prog{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
|
|
\Cmd{wmiir}{1}. This allows simple and powerful remote control
|
|
of the core window manager.
|
|
|
|
\Prog{wmii} basically consists of clients, columns, views, and
|
|
the bar, which are described in detail in the
|
|
\textbf{Terminology} section.
|
|
|
|
\subsection{Terminology}
|
|
|
|
\begin{description}
|
|
\item[Display] A running X server instance consisting of input
|
|
devices and screens.
|
|
\item[Screen] A physical or virtual (Xinerama or \Cmd{Xnest}{1})
|
|
screen of an X display. A screen displays a bar window
|
|
and a view at a time.
|
|
\item[Window] A (rectangular) drawable X object which is
|
|
displayed on a screen, usually an application window.
|
|
\item[Client] An application window surrounded by a frame window
|
|
containing a border and a titlebar.
|
|
\item[Floating layer] A screen layer of \Prog{wmii} on top of
|
|
all other layers, where clients are arranged in a
|
|
classic (floating) way. They can be resized or moved
|
|
freely.
|
|
\item[Managed layer] A screen layer of \Prog{wmii} behind the
|
|
floating layer, where clients are arranged in a
|
|
non\-overlapping (managed) way. Here, the window
|
|
manager dynamically assigns each client a size and
|
|
position. The managed layer consists of columns.
|
|
\item[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.
|
|
\emph{work}, or several tags, e.g. \emph{work+mail}.
|
|
Tags are separated with the \emph{+} character.
|
|
\item[View] A set of clients containing a specific tag, quite
|
|
similiar to a workspace in other window managers. It
|
|
consists of the floating and managed layers.
|
|
\item[Column] A column is a screen area which arranges clients
|
|
vertically in a non-overlapping way. Columns provide
|
|
three different modes, which arrange clients with equal
|
|
size, stacked, or maximized respectively. Clients can
|
|
be moved and resized between and within columns freely.
|
|
\item[Bar] The bar at the bottom of the screen displays a label
|
|
for each view and allows the creation of arbitrary
|
|
user\-defined labels.
|
|
\item[Event] An event is a message which can be read from a
|
|
special file in the filesystem of \Prog{wmii}, such as a
|
|
mouse button press, a key press, or a message written by
|
|
a different 9P-client.
|
|
\end{description}
|
|
|
|
\subsection{Basic window management}
|
|
|
|
Running a raw \Prog{wmii} process without a \Cmd{wmiirc}{1}
|
|
script provides basic window management capabilities already.
|
|
However, to use it effectively, remote control through its
|
|
filesystem interface is necessary. By default it is only usable
|
|
with the mouse in conjunction with the \emph{Mod1 (Alt)}
|
|
modifier key. 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
|
|
\emph{address} of \Prog{wmii} with any 9P-capable client, such
|
|
as \Cmd{wmiir}{1}
|
|
|
|
\subsection{Actions}
|
|
|
|
An action is a shell script in the default setup, but it can
|
|
actually be any executable file. It is executed usually by
|
|
selecting it from the actions menu. You can customize an action
|
|
by copying it from the global action directory
|
|
\File{CONFPREFIX/wmii-3.5} to \File{\$HOME/.wmii-3.5} and then
|
|
editing the copy to fit your needs. Of course you can also
|
|
create your own actions there; make sure that they are
|
|
executable.
|
|
|
|
Here is a list of the default actions:
|
|
|
|
\begin{Table}[]{2}
|
|
quit & leave the window manager nicely \\
|
|
status & periodically print date and load average to the bar \\
|
|
welcome & display a welcome message that contains the wmii tutorial \\
|
|
wmiirc & configure wmii \\
|
|
\end{Table}
|
|
|
|
\subsection{Default Key Bindings}
|
|
\subsubsection{Moving Around}
|
|
\begin{Table}[]{2}
|
|
\textbf{Key} & \textbf{Action} \\
|
|
Mod-h & Move to a window to the \emph{left} of the one currently
|
|
focused \\
|
|
Mod-l & Move to a window to the \emph{right} of the one currently
|
|
focused \\
|
|
Mod-j & Move to the window \emph{below} the one currently focused \\
|
|
Mod-k & Move to a window \emph{above} the one currently focused \\
|
|
Mod-space & Toggle between the managed and floating layers \\
|
|
Mod-t \emph{tag} & Move to the view of the given \emph{tag} \\
|
|
Mod-\emph{[0-9]} & Move to the view with the given number \\
|
|
\end{Table}
|
|
|
|
\subsubsection{Moving Things Around}
|
|
\begin{Table}[]{2}
|
|
\textbf{Key} & \textbf{Action} \\
|
|
Mod-Shift-h & Move the current window \emph{window} to a
|
|
column on the \emph{left} \\
|
|
Mod-Shift-l & Move the current window to a column
|
|
on the \emph{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 \emph{tag} & Move the current window to the
|
|
view of the given \emph{tag} \\
|
|
Mod-Shift-\emph{[0-9]} & Move to the current window to the
|
|
view with the given number \\
|
|
\end{Table}
|
|
|
|
\subsubsection{Miscellaneous}
|
|
\begin{Table}[]{2}
|
|
\textbf{Key} & \textbf{Action} \\
|
|
Mod-m & Switch the current column to \emph{max mode} \\
|
|
Mod-s & Switch the current column to \emph{stack mode} \\
|
|
Mod-d & Switch the current column to \emph{default mode} \\
|
|
Mod-Shift-c & \Prog{Kill} the selected client \\
|
|
Mod-p \emph{program} & \Prog{Execute} \emph{program} \\
|
|
Mod-a \emph{action} & \Prog{Execute} the named \emph{action} \\
|
|
Mod-Enter & \Prog{Execute} an \Prog{xterm} \\
|
|
\end{Table}
|
|
|
|
\section{Configuration}
|
|
|
|
If you feel the need to change the default configuration, then
|
|
customize (as described above) the \Prog{wmiirc} action. This
|
|
action is executed at the end of the \Prog{wmii} script and does
|
|
all the work of setting up the window manager, the key bindings,
|
|
the bar labels, etc.
|
|
|
|
\section{Filesystem}
|
|
|
|
Most aspects of \Prog{wmii} are controlled via the filesystem.
|
|
It is usually accessed via the \Cmd{wmiir}{1} command, but it
|
|
can be accessed by any \texttt{9P} client, including plan9port's
|
|
\Cmd{9P}{1}, and can be mounted natively on Linux via v9fs[1],
|
|
and on Inferno (which man run on top of Linux).
|
|
|
|
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 rc.wmii or wmiirc. Several files read 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.
|
|
|
|
\subsubsection{Hierarchy}
|
|
\begin{description}
|
|
\item[/] Global control files
|
|
\item[/client/\emph{*}/] Client control files
|
|
\item[/tag/\emph{*}/] View control files
|
|
\item[/lbar/, /rbar/] Files representing the contents of the
|
|
bottom bar
|
|
\end{description}
|
|
|
|
\subsubsection{The / Hierarchy}
|
|
\begin{description}
|
|
\item[colrules] The \emph{colrules} file contains a list of
|
|
rules which affect the width of newly created columns.
|
|
Rules have the form: \\ \SP % Yuck!
|
|
\MANbr
|
|
\SP\SP /\Arg{regex}/ -> \Arg{width}\oArg{+width...} \\ \SP
|
|
\MANbr
|
|
When a new column, \Arg{n}, is created on a view whose
|
|
name matches \Arg{regex}, the \Arg{n}th given
|
|
\Arg{width} percentage of the screen is given to it. If
|
|
there is no \Arg{n}th width, 1/\emph{ncol}th of the
|
|
screen is given to it.
|
|
\item[tagrules] The \emph{tagrules} file contains a list of
|
|
rules similar to the colrules. These rules specify
|
|
the tags a client is to be given when it is created.
|
|
Rules are specified: \\ \SP
|
|
\MANbr
|
|
\SP\SP /\Arg{regex}/ -> \Arg{tag}\oArg{+tag...} \\ \SP
|
|
\MANbr
|
|
When a client's \Arg{name}:\Arg{class}:\Arg{title}
|
|
matches \Arg{regex}, it is given the tagstring
|
|
\Arg{tag}. There are two special tags. \emph{!}, which
|
|
will be replaced with \emph{sel} in the future,
|
|
represents the current tag. \emph{\Circum} represents the
|
|
floating layer.
|
|
\item[keys] The \emph{keys} file contains a list of keys which
|
|
\Prog{wmii} will grab. Whenever these key combinations
|
|
are pressed, the string which represents them are
|
|
written to \File{/event} as: Key \Arg{string}
|
|
\item[event] The \emph{event} file never returns EOF while
|
|
\Prog{wmii} is running. It stays open and reports events
|
|
as they occur. Included among them are:
|
|
\begin{description}
|
|
\item[\emph{Not}Urgent \Arg{client} \Arg{Manager\Bar Client}]
|
|
\Arg{client}'s urgent hint has been set or
|
|
unset. The second arg is \emph{Client} if it's
|
|
been set by the client, and \emph{Manager} if
|
|
it's been set by \Prog{wmii} via a control
|
|
message.
|
|
\item[\emph{Not}UrgentTag \Arg{tag} \Arg{Manager\Bar Client}]
|
|
A client on \Arg{tag} has had its urgent hint
|
|
set, or the last urgent client has had its
|
|
urgent hint unset.
|
|
\item[ClientClick\Bar ClientMouseDown \Arg{client} \Arg{button}]
|
|
A client's titlebar has either been clicked or
|
|
has a button pressed over it.
|
|
\item[\emph{Left\Bar Right}Bar\emph{Click\Bar MouseDown} \Arg{button} \Arg{bar}]
|
|
A left or right bar has been clicked or has a
|
|
button pressed over it.
|
|
\item[...] To be continued...
|
|
\end{description}
|
|
\item[ctl] The \emph{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:
|
|
\begin{description}
|
|
\item[quit] Quit \Prog{wmii}
|
|
\item[exec \Arg{prog}] Replace \Prog{wmii} with
|
|
\emph{prog}
|
|
\end{description}
|
|
\end{description}
|
|
|
|
\subsubsection{The /client/ Hierarchy}
|
|
|
|
Each directory under \File{/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 \File{sel} directory, which
|
|
represents the currently selected client.
|
|
|
|
\begin{description}
|
|
\item[ctl] When read, the \File{ctl} file returns the X window id
|
|
of the client. The following commands may be written to
|
|
it:
|
|
\begin{description}
|
|
\item[kill] Close the client's window. This command will
|
|
likely kill the X client in the future
|
|
(including its other windows), while the close
|
|
command will replace it.
|
|
\item[\Arg{Not}Urgent] Set or unset the client's urgent
|
|
hint.
|
|
\item[\Arg{Not}Fullscreen]
|
|
|
|
\end{description}
|
|
\item[label] Set or read a client's label (title).
|
|
\item[props] Returns a clients class and label as:
|
|
\emph{name}:\emph{class}:\emph{label}
|
|
\item[tags] Set or read a client's tags. Tags are seperated by
|
|
\emph{+} or \emph{-}. Tags begining with \emph{+} are
|
|
added, while those begining with \emph{-} are removed.
|
|
If the tag string written begins with \emph{+} or
|
|
\emph{-}, the written tags are added to or removed from
|
|
the client's set, otherwise, the set is overwritten.
|
|
\end{description}
|
|
|
|
\subsubsection{The /tag/ Hierarchy}
|
|
|
|
Each directory under \File{/tag/} represents a view, containing
|
|
all of the clients with the given tag applied. The special
|
|
\File{sel} directory represents the currently selected tag.
|
|
|
|
\begin{description}
|
|
\item[ctl] The \File{ctl} file can be read to retrieve the name
|
|
of the tag the directory represents, or written with the
|
|
following commands:
|
|
\begin{description}
|
|
\item[select] Select a client: \\
|
|
\SP\SP select \Arg{left\Bar right\Bar up\Bar down} \\
|
|
\SP\SP select \Arg{row number\Bar sel} \oArg{frame number} \\
|
|
\SP\SP select client \Arg{client}
|
|
\item[send] Send a client somewhere:
|
|
\begin{description}
|
|
\item[send \Arg{client|sel} \Arg{up|down|left|right}]
|
|
\item[send \Arg{client|sel} \Arg{area}] Send
|
|
\Arg{client} to the nth \Arg{area}
|
|
\item[send \Arg{client|sel} toggle] Toggle
|
|
\Arg{client} between the floating and
|
|
managed layer.
|
|
\end{description}
|
|
\item[swap] Swap a client with another. Same syntax as
|
|
send.
|
|
\end{description}
|
|
\item[index] Read for a description of the contents of a tag.
|
|
\end{description}
|
|
|
|
\subsubsection{The /rbar/, /lbar/ Hierarchy}
|
|
|
|
The files under \File{/rbar/} and \File{/lbar/} represent the
|
|
items of the bar at the bottom of the screen. Files under
|
|
\File{/lbar/} appear on the left side of the bar, while those
|
|
under \File{/rbar/} appear on the right, with the leftmost item
|
|
occupying all extra available space. The items are sorted
|
|
lexicographically.
|
|
|
|
The files may be read to obtain the colors and text of the bars.
|
|
The colors are at the begining of the string, represented as a
|
|
tuple of 3 hex color codes for the foreground, background, and
|
|
border, respectively. When writing the bar files, the colors may
|
|
be omitted if the text would not otherwise appear to contain
|
|
them.
|
|
|
|
\section{FILES}
|
|
|
|
\begin{description}
|
|
\item[/tmp/ns.$USER.${DISPLAY\%.0}/wmii] The wmii socket file
|
|
which provides a 9P service.
|
|
\item[CONFPREFIX/wmii-3.5] Global action directory.
|
|
\item[\$HOME/.wmii-3.5] User-specific action directory. Actions
|
|
are first searched here.
|
|
\end{description}
|
|
|
|
\section{ENVIRONMENT}
|
|
|
|
\begin{description}
|
|
\item[HOME, DISPLAY] See the section \textbf{FILES} above.
|
|
\end{description}
|
|
|
|
The following variables are set and exported within \Prog{wmii} and
|
|
thus can be used in actions:
|
|
|
|
\begin{description}
|
|
\item[WMII\_ADDRESS] Socket file of Used by \Cmd{wmiir}{1}.
|
|
\end{description}
|
|
|
|
\section{SEE ALSO}
|
|
\Cmd{dmenu}{1}, \Cmd{wmiir}{1}
|
|
|
|
[1] http://www.suckless.org/wiki/wmii/tips/9p\_tips
|
|
|