mirror of https://github.com/0intro/wmii
167 lines
7.4 KiB
TeX
167 lines
7.4 KiB
TeX
|
\chapter{Introduction}
|
|||
|
|
|||
|
\wmii\ is a simple but powerful window manager for the X Window
|
|||
|
System. It provides both the classic (“floating”) and tiling
|
|||
|
(“managed”) window management paradigms, which is to say, it does
|
|||
|
the job of managing your windows, so you don't have to. It also
|
|||
|
provides programability by means of a simple file-like
|
|||
|
interface, which allows the user to program in virtually any
|
|||
|
language he chooses. These basic features have become
|
|||
|
indispensable to the many users of \wmii\ and other similar
|
|||
|
window managers, but they come at a cost. Though our penchant
|
|||
|
for simplicity makes \wmii's learning curve significantly
|
|||
|
shorter than most of its competitors, there's still a lot to
|
|||
|
learn. The rest of this guide will be devoted to familiarizing
|
|||
|
new users with \wmii's novel features and eccentricities, as
|
|||
|
well as provide advanced users with an in-depth look at our
|
|||
|
customization facilities.
|
|||
|
|
|||
|
\section{Concepts}
|
|||
|
|
|||
|
As noted, \wmii\ provides two management styles:
|
|||
|
|
|||
|
\begin{description}
|
|||
|
\item[Managed] This is the primary style of window management
|
|||
|
in \wmii. Windows managed in this style are automatically
|
|||
|
arranged by \wmii\ into columns. Columns are created and
|
|||
|
destroyed on demand. Individual windows in the column may be
|
|||
|
moved or resized, and are often collapsed or hidden
|
|||
|
entirely. Ad-hoc stacks of collapsed and uncollapsed windows
|
|||
|
allow the user to efficiently manage their tasks. When
|
|||
|
switching from an active to a collapsed window, the active
|
|||
|
window collapses and the collapsed one effectively takes
|
|||
|
its place.
|
|||
|
|
|||
|
Managed windows have an unadorned titlebar:
|
|||
|
|
|||
|
\titlebar{managed}
|
|||
|
|
|||
|
\item[Floating] Since some programs aren't designed in ways
|
|||
|
conducive to the managed work flow, \wmii\ also provides the
|
|||
|
classic “floating” window management model. Windows managed
|
|||
|
in this model float above the managed windows and may be moved
|
|||
|
freely about. Other than automatic placement of new windows
|
|||
|
and snapping of edges, \wmii\ doesn't manage floating
|
|||
|
windows at all.
|
|||
|
|
|||
|
Floating windows are indicated by a decorated titlebar:
|
|||
|
|
|||
|
\titlebar{floating}
|
|||
|
|
|||
|
\item[Fullscreen] Fullscreen mode is actually a subset of the
|
|||
|
floating style. Windows may be toggled to and from
|
|||
|
fullscreen mode at will. When fullscreen, windows reside in
|
|||
|
the floating layer, above the managed windows. They have no
|
|||
|
borders or titlebars, and occupy the full area of the
|
|||
|
screen. Other than that, however, they're not special in any
|
|||
|
way. Other floating windows may appear above them and the
|
|||
|
user can still select, open, and close other windows at
|
|||
|
will.
|
|||
|
\end{description}
|
|||
|
|
|||
|
\subsection{The Filesystem}
|
|||
|
|
|||
|
All of \wmii's customization is done via a virtual filesystem.
|
|||
|
Since the filesystem is implemented in the standardized \ninep\
|
|||
|
protocol, it can be accessed in many ways. \wmii\ provides a
|
|||
|
simple command-line client, \wmiir, but many alternatives exist,
|
|||
|
including libraries for Python, Perl, Ruby, PHP, and C. It can
|
|||
|
even be mounted, either by Linux's 9p.ko kernel module or
|
|||
|
indirectly via FUSE.
|
|||
|
|
|||
|
The filesystem that \wmii\ provides is “virtual”, which is to
|
|||
|
say that it doesn't reside on disk anywhere. In a sense, it's a
|
|||
|
figment of \wmii's imagination. Files, when read, represent
|
|||
|
\wmii's current configuration or state. When written, they
|
|||
|
perform actions, update the UI, etc. For instance, the directory
|
|||
|
|/client/| contains a directory for each window that \wmii\
|
|||
|
is currently managing. Each of those directories, in turn,
|
|||
|
contains files describing the client's properties (its title,
|
|||
|
its views\footnote{Views in \wmii\ are akin to workspaces or
|
|||
|
virtual desktops in other window managers, but with some subtle
|
|||
|
differences.}, its state). Most files can be written to update
|
|||
|
the state they describe. For instance,
|
|||
|
|/client/sel/ctl| describes the state of the selected
|
|||
|
client. If a client is fullscreen, it contains the line:
|
|||
|
|
|||
|
\begin{code}
|
|||
|
fullscreen on
|
|||
|
\end{code}
|
|||
|
|
|||
|
\noindent To change this, you'd update the file with the line
|
|||
|
% XXX: Line broken at /ctl cmd.
|
|||
|
|fullscreen off| or even |fullscreen| |toggle| to toggle
|
|||
|
the client's fullscreen state.
|
|||
|
|
|||
|
The concept of controlling a program via a filesystem derives
|
|||
|
from \plannine, where such interfaces are extensive and well
|
|||
|
proven\footnote{The concept has also taken hold on most Unixes
|
|||
|
in the form of \texttt{/proc} and \texttt{/sys} virtual
|
|||
|
filesystems, but tends to be very kernel-centric. On \plannine,
|
|||
|
where the model is more pervasive, there are more virtual
|
|||
|
filesystems for user-level applications than for the kernel.}.
|
|||
|
The metaphor has shown itself to be quite intuitive to Unix
|
|||
|
users, once the shock of a “virtual” filesystem wears off. The
|
|||
|
flexibility of being able to control \wmii\ from myriad
|
|||
|
programming languages, including the standard Unix shell and
|
|||
|
even from the command line, is well worth the shock.
|
|||
|
|
|||
|
\subsection{Views and Tags}
|
|||
|
|
|||
|
Like most X11 window managers, \wmii\ provides virtual
|
|||
|
workspaces. Unlike other window managers though, \wmii's
|
|||
|
workspaces are created and destroyed on demand. Instead of being
|
|||
|
sent to a workspace, windows in \wmii\ are tagged with any
|
|||
|
number of names. Views are created dynamically from these tags,
|
|||
|
and automatically if the user tries to access them. For
|
|||
|
instance, if a window is given the tags ‘foo’ and ‘bar’, the two
|
|||
|
views ‘foo’ and ‘bar’ are created, if they don't already exist.
|
|||
|
The window is now visible on both of them. Moreover, tags can be
|
|||
|
specified as regular expressions. So, a client tagged with {\tt
|
|||
|
\verb+/^foo/+} will appear on any view named ‘foo’, ‘foo:bar’,
|
|||
|
and so forth. Any time a client is tagged with a matching tag,
|
|||
|
or the user opens a matching view, the window is automatically
|
|||
|
added to it.
|
|||
|
|
|||
|
\subsection{The Bar}
|
|||
|
|
|||
|
\wmii\ provides a general purpose information bar at the top or
|
|||
|
bottom of the screen. The bar is divided into a left and a right
|
|||
|
section. Each section is made up of buttons, with a single
|
|||
|
button spanning the gap between the two sides. Buttons can be
|
|||
|
individually styled and can hold any text content the user
|
|||
|
wishes. By convention, the buttons to the left show view names,
|
|||
|
and those to the right display status information.
|
|||
|
|
|||
|
\subsection{The Menus}
|
|||
|
|
|||
|
\wmii\ includes two simple, external menu programs. The first,
|
|||
|
\wimenu, is keyboard-based, and is used to launch programs and
|
|||
|
generally prompt the user for input. It provides a list of
|
|||
|
completions which are automatically filtered as you type. The
|
|||
|
second, \wiIXmenu, is mouse-based, and is generally used to
|
|||
|
provide context menus for titlebars and view buttons. Both menus
|
|||
|
can be easily launched from shell scripts or the command line,
|
|||
|
as well as from more complex scripting languages.
|
|||
|
|
|||
|
\subsection{The Keyboard}
|
|||
|
|
|||
|
\wmii\ is a very keyboard friendly window manager. Most actions
|
|||
|
can be performed without touching the mouse, including
|
|||
|
launching, closing, moving, resizing, and selecting programs.
|
|||
|
New keybindings of any complexity can easily be added to handle
|
|||
|
any missing functionality, or to simplify any repetitive tasks.
|
|||
|
|
|||
|
\subsection{The Mouse}
|
|||
|
|
|||
|
Despite being highly keyboard-accessible, \wmii\ strives to be
|
|||
|
highly mouse accessible as well. Windows can be moved or resized
|
|||
|
by dragging their window borders. When combined with a key
|
|||
|
press, they can be moved, resized, or raised by dragging any
|
|||
|
visible portion of the window. Mouse menus are accessed with a
|
|||
|
single click and drag. View buttons in the bar and client
|
|||
|
titlebars respond to the mouse wheel; view buttons can be
|
|||
|
activated by dragging any draggable object (e.g., a file from a
|
|||
|
file manager) over them.
|
|||
|
|