wmii/doc/guide_en.tex
2006-05-19 17:38:45 +02:00

1006 lines
40 KiB
TeX

%TODO: please mention the /def/rules mechanism!
%guide to wmii-4
%Copyright (C) 2005, 2006 by Steffen Liebergeld, Salva Peir\'o
%This program is free software; you can redistribute it and/or
%modify it under the terms of the GNU General Public License
%as published by the Free Software Foundation, version 2
%This program is distributed in the hope that it will be useful,
%but WITHOUT ANY WARRANTY; without even the implied warranty of
%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%GNU General Public License for more details.
%You should have received a copy of the GNU General Public License
%along with this program; if not, write to the Free Software
%Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%02110-1301, USA.
\documentclass[12pt,a4paper]{article} %options given to article are inherited to all packages
\usepackage[latin1]{inputenc}
\usepackage[left=3cm,top=2cm,right=2cm,bottom=3cm]{geometry}
\usepackage{times}
\usepackage{hyperref} % option [dvipdfm] disables clickable refs
\hypersetup{pdftex, colorlinks=true, linkcolor=blue, filecolor=blue,
pagecolor=blue, urlcolor=blue, pdfauthor={Steffen Liebergeld, Salva Pei\'ro},
pdftitle={A Guide to wmii-4}}
\usepackage{indentfirst,moreverb}
% remove this if you want, it's just a matter of imposed imperialist cultures
% so if I'm given the chance to choose I choose to indent the first paragraph
% (I learn this way in the school, and don't want to relearn the British way)
%% welcome to the dirty tricks section
\newcommand{\hrefx}[1]{\href{#1}{#1}} % explicit \href
% un'% below so latex2html can handle refs correctly (until a better solution is found)
%\usepackage{html} % gives clickable refs to latex2html
%\renewcommand{\href}[2]{\htmladdnormallink{#2}{#1}}
%\renewcommand{\hrefx}[1]{\htmladdnormallink{#1}{#1}}
%\renewcommand{\verbatiminput}[1]{\input{#1}}
\renewcommand{\familydefault}{\sfdefault}
\newcommand{\wmii}{\emph{wmii}}
\newenvironment{itemize*}
{\begin{itemize}
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}}
{\end{itemize}}
\date{\today}
\author{
Steffen\\Liebergeld \\\\
\small{with help from}\\
Salvador\\Peir\'o
}
\title{A Guide to wmii-4%
\thanks{Thanks to the wmii community, in particular all the
people mentioned at \href{http://wmii.de/index.php/WMII/People}{WMII/people}.}
}
%\email{stepardo@gmail.com \and saoret.one@gmail.com}
\begin{document}
\maketitle
\tableofcontents
\newpage
\section{Abstract}
\subsection{The purpose of this document}
This document tries to be a good starting point for people new to
\wmii-4. People who have used wmi, \wmii-2.5 or even ion will get
to know what is new and different in \wmii-4, and people who have
never used a tiling window manager before will fall in love with
the new concept.
\subsection{wmii---the second generation of window manager improved}
\wmii-4 is a new kind of window manager. It is designed to have a
small memory footprint, be extremely modularised and have as
little code as possible, thus ensuring as few bugs as possible. In
fact, one of our official goals is to not exceed $10 k$ lines of
code~\footnote{ benefit of the $10 k$ SLOC restriction is that
it's easier to read/understand, thus it's easier to use and get
used to it}.
\wmii{} tries to be very portable and to give the user as much
freedom as possible.
\wmii-4 is the third major release of the second generation of the
window manager improved~\footnote{ the ii is actually the roman
numeral for 2.}. \wmii{} first introduced a new paradigm in version
2.5, namely dynamic window management, that overcomes the
limitations imposed by the WIMP paradigm (see also the companion
\emph{wmii.tex}).
\subsection{Target audience}
I presume the reader already has experience with Unix, knows all
the basic terminology and concepts like files and editors.
I hope you are open minded towards new ideas, and willing to spend some
time learning \wmii-4~\footnote{remember the refrain: ``nobody
can teach you what you don't want to know''.}.
If you only want to know how to operate \wmii-4 and are not
interested in the inner workings or in scripting, you may read
sections \ref{sec:conf&install}, \ref{sec:terms} and subsection
\ref{subsec:firststeps} and skip the rest.
However, to get the most out of \wmii-4 you should probably read
the whole document ``sequentially'', i.e. from beginning to end.
Another possibility is to read/consume the guide ``on demand'' as
you notice you need more information or details to understand
better some concept. We recommend you to read the introductory
chapters first, use some time to get settled in the \wmii-world
and read the scripting chapters later on.
\section{Configuration and install}
\label{sec:conf&install}
\subsection{Obtaining wmii}
\wmii{} is licensed under the MIT/X Consortium License, which
basically means it is free software, and you are free to download
it from \hrefx{http://wmii.de} free of charge~\footnote{ please have
a look at \hrefx{http://wmii.de/repos/wmii/LICENSE} for
details}.
\subsection{Configuration and installation}
First of all, have a look if there are binary packages of \wmii{} in
your distribution. Debian, Ubuntu and Gentoo should already have
good packages. If you found a trustworthy package, you may now safely
skip this section.
For all those who are still reading this, let me tell you that you are
on the good side because if you grab the sources and compile them yourself
you'll benefit from having everything in it's original place, which will
ease your use of \wmii.
\begin{enumerate}
\item Uninstalling a previous version:
\begin{verbatim}
cd /path/to/wmii-previous
make uninstall && make clean
\end{verbatim}
In case you're installing a newer version of \wmii, this is the
first thing you should do otherwise you'll end up mixing
binaries, configuration files and manual-pages of different and
potentially incompatible versions.
\item Unpack it:
\begin{verbatim}
tar xzf wmii-4.tar.gz
cd wmii-4
\end{verbatim}
\item Edit the configuration:
\begin{verbatim}
vim config.mk
\end{verbatim}
The most important variable to set is the \verb+PREFIX+, which
states, where you want \wmii-4 to be installed to. If you are unsure, keep the
default, it won't break your system.
\item Run make and make install:
\begin{verbatim}
make && make install
\end{verbatim}
\item Setup the X-server to start \wmii{} as your default window
manager. You may do that by editing the file \emph{\~{}/.xinitrc}.
\begin{verbatim}
#!/bin/sh
exec wmii
\end{verbatim}
% Not necessary, .xinitrc is sourced by xinit anyways
%
% Make sure that the \emph{\~{}/.xinitrc} is executable:
%
% \begin{verbatim}
% chmod u+x ~/.xinitrc
% \end{verbatim}
\end{enumerate}
Now you are finished. Please note that autoconf tools are not used
for various reasons~\footnote{ read
\hrefx{http://www.ohse.de/uwe/articles/aal.html} and
\hrefx{http://lists.cse.psu.edu/archives/9fans/2003-November/029714.html}
for further details}. Please don't ask the \wmii{} developers to use autoconf,
they won't listen to you.
\section{Terminology}
\label{sec:terms}
Before you actually start doing your first steps in \wmii, first the
terminology has to be clarified.
\subsection{Clients}
A client is a program, that provides you a graphical user interface for
a special purpose, e.g. a web browser, or a terminal.
\subsection{Focus}
The (input) focus is the client, which currently receives your input.
In X11 exactly one client can get your input at a time. If you input
some command into your terminal, the terminal window has the input focus,
whereas all the other windows do not receive the input you enter.
\subsection{Events}
An event is a message generated by X server to notify X clients about
states. For instance, X generates a button press event, if you click
into a window.
\subsection{Tags}
A tag is an alphanumeric string you can associate to clients,
which allows you to group clients in a natural way.
In \wmii, there are no workspaces anymore. Instead, all clients matching a
particular tag are displayed at a time. For instance, if you tag your
browser and a terminal window with the tag ``web-browser'', and you request
to view all clients matching this tag, \wmii{} will display your browser
and the terminal on the screen.
It is also possible to give clients multiple tags, which is described later.
\subsection{View}
A view is the set of displayed clients, which match a specific single tag.
A view is pretty similar to the ``workspace'' metaphor in other window
managers, though more powerful.
Only one view can be visible at a time.
Views are related to the tags, which are currently in use. You have exactly
one view for each single tag, thus you can only view sets of clients which
match an existing tag.
If you destroy the last client with a tag, the view of this tag is
destroyed.
\subsection{Column}
A column is a distinct part of a view, where clients are arranged
automatically in a vertical direction.
In \wmii, you are able to divide each view into different columns.
You should be aware, that every column holds at least one client.
As soon as you close the last client of a column, the column is
destroyed automatically.
% no, a view might contain floating clients only as well
% Please be aware, that every view has at least one column or a floating window.
\subsection{Layout}
A layout is the arrangement of clients in a column.
There are three different ways to arrange clients in a column.
\paragraph{default} This layout arranges each client with
equally vertical space fitting into the column's height.
\paragraph{maximum} This layout arranges all clients with
the same geometry as the column, showing only one of them at a time.
\paragraph{stacking} This layout arranges all clients
like a stack, where only the focused client is completely
visible, and all other clients can be accessed through its title-bars.
This is an alternative approach to \emph{tabbing}.
\section{Getting started}
Now it is time to start diving into the \wmii{} user experience. I suggest you
to try everything described by yourself immediately, instead of first reading
it, to avoid "memory leakage". It is very helpful, if you print this
document on paper or have it available on a different screen, because you might not
be able to view it during your first steps in \wmii.
Note, that the \emph{MOD} key I am referring to, may resemble
different keys on different systems. By default it is the
\emph{Mod1} or \emph{Alt} key in X11. Normally this is the key labelled with
\emph{Alt} on your keyboard.
The notation \emph{MOD}-\emph{Key} means to press \emph{MOD} and
\emph{Key} both at the same time.
All key combinations can be freely configured, but for the sake of
simplicity I'll stick with the default key combinations for this
guide. You will learn how to alter the bindings in the
section \ref{sec:scripting}.
The default key combinations heavily use the home row navigation keys
\emph{h} (left), \emph{j} (down), \emph{k} (up), and \emph{l} (right),
which are associated with the specific direction.
\subsection{First steps}
\label{subsec:firststeps}
Start your X session now. Since it is the first time you
start \wmii, a window with a little tutorial will show up. You are
free to read it, but you may also follow this guide :-)
First of all, press \emph{MOD-Enter} to start an xterm. It will
take half of the vertical space, so you have two equally arranged
windows. If you press \emph{MOD-Enter} again, you have three
windows that are arranged equally.
To switch between the three windows, press
\emph{MOD-j}, which cycles the focus between the three windows.
You can also press \emph{MOD-k} to switch to the window above or
\emph{MOD-j} to switch to the window below the current.
Now look at the title-bars of those windows. They display
important information: the first label contains the tag of
the window. The second label displays the window's title.
Similar information is displayed in the status-bar at the bottom. The
first labels display the tags currently in use and highlight the currently
selected view. On the right side some status information is displayed, by
default the system load and the current time (see
subsection~\ref{subsec:status} for details).
\subsection{Using columns}
As described earlier, \wmii{} uses columns to arrange your windows.
Your view already consists of a single column.
Next, you will create a new column.
In \wmii{} columns always consists of at least a single client,
thus to create a new column, you need at least two clients at hand.
Now focus a client of your choice and press \emph{MOD-Shift-l},
which moves the client rightwards. As you see, \wmii{} creates
a new column by dividing the view horizontally in two equally big
areas. The focused client has been moved into the new column.
If you close the last client of a column, the column is destroyed
immediately. If the last client of the current view is closed,
the view will be removed accordingly as well.
If you press \emph{MOD-j} to change focus, you will see that \wmii
actually cycles the focus in the current column only.
To change the focus to a different column, you can press \emph{MOD-l}
(right) and \emph{MOD-h} (left) respectively.
It is also possible to swap adjacent clients among columns. To swap
clients leftwards, press \emph{MOD-Control-h}. To swap clients
rightwards, press \emph{MOD-Control-l}.
\subsection{What about layouts?}
Layouts arrange clients in a column. They are related to a single
column. Thus it is possible to have different columns in one view, each
using another layout.
The default layout arranges each client of the column with equally
vertical space. You can enable this layout with \emph{MOD-d}
(where the ``d'' stands for default) explicitly.
The stacking layout can be enabled with \emph{MOD-s}. As you see now,
there is only one client using as much space as possible, and only
title-bars of the other clients displayed in the column. You can
switch between the clients in the column using \emph{MOD-j}.
The max-layout maximises all clients to the same geometry as the column.
Only the focused client is displayed at a time, all other clients
are behind it. You can switch between the clients with \emph{MOD-j}.
\subsection{Floating layer}
To handle clients in the classical way, like in conventional window
managers, the so-called ``floating layer'' is used. Actually there are a
bunch of clients which don't fit well into the tiled world, because they
have been designed with the conventional window management in mind,
for instance clients like the Gimp or xmms.
While \wmii{} is a dynamic window manager, which does the window arrangement
for you automatically, those old fashioned programs rely on the
conventional window managing concept, where all the clients fly around on
your desktop and you are forced to constantly order the mess.
To attach such broken clients to the floating layer, you can toggle the
focus between floating and managed layer through pressing \emph{MOD-Space}.
The \emph{MOD-Shift-Space} shortcut toggles the focused window between
floating and managed layer.
Note, the floating layer is addressed as the zeroth-column internally.
\subsection{Tags}
Up to now all your clients were tagged with ``1'', and you only had
this single view. But a single view does not scale well, once
too many clients appear which are used for different unrelated tasks.
Thus you might want to have a view per task, e.g. a view
with your editor and your programming tools, another view
with your browser, and a third view with your music jukebox.
The good news is, that the tagging concept provides a very dynamic way to
achieve such kinds of grouping.
You can give the focused client another tag by pressing
\emph{MOD-Shift-Number}, number being one of the numbers 0 to 9.
You can then switch views through pressing \emph{MOD-Number}.
Normally, whenever a new client appears, it automatically inherits the tag
of the currently selected view.
%% TODO: better tag handling (this is about to change in \wmii{} till
%%version 3)
Note, there are more powerful uses of tags you will learn about in the next
chapter. You will then be able to assign multiple tags to one client and to
use proper strings as tags.
\subsection{How do I close a window?}
Most X-clients have a menu option or button to be closed. For the rare
cases they don't provide a mouse-driven way, like in most terminals,
you can press \emph{MOD-Shift-c} to close a window.
\subsection{How do I start programs?}
You may start programs from a terminal. But \wmii{} contains a special
keyboard-driven program menu, which is accessible through pressing
\emph{MOD-p}. Please note, that the content of this menu is provided by a
simple shell-script.
You will see a list of programs. If you start typing, the
menu will cut the list and only display items which match
the input you entered so far (in that order). Whenever there is
only one item left, the menu highlights it and you can start it
by pressing \emph{Enter}. You are free to cancel any action by
pressing \emph{ESC}.
Thus, if you want to start firefox, just type ``fire'' and press
enter~\footnote{On my system it is sufficient to type ``efo'' to
start firefox ;-)}.
\subsection{How do I quit wmii?}
You can quit \wmii, by using the action's menu (\emph{MOD-a})
and selecting the action ``quit''. That's all.
\section{Looking under the hood}
In this chapter you will learn how \wmii{} was designed, which ideas
the \wmii{} developers followed and how it was implemented.
\subsection{Dynamic window management}
\wmii{} was designed around the new idea of dynamic window management.
Dynamic window management means, that the window manager should make all
decisions about window arrangement, thus taking most extra work away
from the user and letting him concentrate on his work. This can also be
seen as tacit window management.
\subsection{Modularity---using distinct tools for distinct tasks}
The developers of \wmii{} know about the most powerful ideas of
Unix. One of them is the idea to use distinct tools for distinct
tasks. By carefully designing the window manager, they were able to
split the task into several smaller binaries, each with a distinct
job.
\subsection{The glue that puts it all together---9P}
Programs in the Unix world usually communicate via buffers which are
addressed by (file) descriptors, one of them are sockets.
To create a lightweight but powerful communication protocol, the \wmii
developers closely looked at the design of Plan9 and chose the 9P
protocol.
The basic ideas for configuring and running \wmii{} were taken from
the Acme user interface for programmers of Plan9. Similar to Acme,
\wmii{} provides a filesystem-interface, which can be accessed by
9P clients. This allows to interact with any different kind of
application through a file system interface, which might be implemented
in any programming language of choice. This also avoids to force
client programmers to a specific programming language or paradigm.
The interface of \wmii{} can be compared to the \emph{procfs} file
system of the Linux kernel.
If you want to interact with a running \wmii{} process, you can access its 9P
file-system service through either using the bundled tool \emph{wmiir} or
the 9P2000 kernel module of a Linux kernel later than 2.4.16+. Using the
kernel module has the advantage to mount the filesystem of \wmii{} into your
file system hierarchy directly, though it has the drawback that this need
\emph{root} privileges.
\subsection{Tools}
This section provides a basic overview about the tools which are bundled
with \wmii. But for a more detailed description, you should read the associated
man page of the specific tool.
\begin{description}
\item
\emph{wmiir} is a small tool we is used to access the
virtual file-system service of \wmii{} remotely. It basically supports four
operations:
\begin{itemize*}
\item read
\item write
\item remove
\item create
\end{itemize*}
wmiir needs to know the address of the file-system service to work
with. On startup, \wmii{} exports the \verb+WMII_ADDRESS+ environment variable,
which points to the address of the file-system service of \wmii.
This address can be:
\begin{itemize*}
\item a local unix socket address like \verb+unix!/path/to/socket+
\item a tcp-capable socket address like \verb+tcp!hostname:port+
\end{itemize*}
If you want to work on a different filesystem, you may specify it
manually with the \emph{-a address} command line option.
A sample invocation looks like:
\begin{verbatim}
wmiir read /
\end{verbatim}
This command actually prints the contents of the root directory of the
virtual file-system of \wmii.
\item
\emph{wmiimenu} is a generic keyboard-driven menu, which matches items
through providing patterns. You may want to learn more about it by reading
the man-page.
\item
\emph{wmiiwarp} is a tiny tool to warp the mouse pointer at specific
coordinates on your screen.
\item
\emph{wmiiwm} is the main window manager binary. You may interact
with its virtual file-system only.
\item
\emph{wmiipsel} prints the contents of the current X selection to
STDOUT. This is useful for scripts.
\end{description}
\subsection{Conclusion}
The virtual file-system service of \wmii{} and the tools presented enable
you to fully control the window manager from scripts.
You will see some examples in the next section
\ref{sec:scripting}.
\section{Scripting wmii}
\label{sec:scripting}
In this chapter you will see how to control \wmii{} through scripts. I will
give you some pointers, that you can start scripting on your own.
\subsection{Language}
As mentioned earlier, the only requirement for interacting with \wmii{} is to
access its file-system service. The easiest way to do this, is by using
the wmiir tool. Thus shell scripts are the easiest way of adapting \wmii
too fit your needs.
Hence, you can control \wmii{} in any programming language you want. However,
\wmii's default scripts are written in a subset of ``sh'' that is POSIX
compliant, to keep \wmii{} as \emph{portable} as possible.
To keep simplicity, the following examples will stick to ``sh'' as well,
and don't depend on python, tcl, ruby, \dots
% - who doesn't have a shell?, extra! we're giving them for free this week
\subsection{Actions}
In \wmii{} you may group certain tasks into \emph{actions}. Actions
are nothing more than simple scripts which are located either in
your local or in the default \wmii{} configuration
directory~\footnote{ \texttt{\$CONFPREFIX} is set in
\emph{config.mk} which points to \texttt{/usr/local/etc}
or \texttt{\$HOME/.wmii-4} by default}.
Through pressing \emph{MOD-a} you can open the actions menu. It works
similar to the program menu, but only displays actions.
You might want to add your own actions through writing shell scripts in the
default \wmii{} configuration directory or in the \texttt{\$HOME/.wmii-4}.
This works, because in the \wmii{} controlling script exports the variable
\verb+$PATH+ as\\ \verb+$PATH=~/.wmii-4:$CONFPREFIX/wmii:$PATH+ before
launching the wmiiwm, this way local user actions under
\verb+~/.wmii-4+ take precedence over the defaults from
\verb+$CONFPREFIX/wmii+ of the default actions.
You may edit this file on the fly, which means you don't need to
stop \wmii{} before editing. After you've finished editing, you may
simply run wmiirc and the changes will take effect immediately.
To do so, just open the actions menu (with pressing \emph{MOD-a}) and
choose the \emph{wmiirc} action. It's also possible to launch \wmii{} actions
directly from a terminal, which is a neat side effect that results from
exporting \verb+$PATH+ in the \wmii{} startup script.
\subsection{wmiirc}
\emph{wmiirc} is a special ``sh''-script which is launched on startup
of \wmii{} to take care of configuring and controlling \wmii.
It does so through writing data to several files of the virtual \wmii
file-system, and through reading events reported by \wmii{} during runtime.
Events are mostly shortcut presses, mouse clicks or user-defined.
The events are processed in a loop in the script.
Thus, for the basic configuration of \wmii, like changing the default
modifier key \emph{MOD=Mod1} or the navigation keys this script is
the place to look at.
The name \emph{wmiirc} means \wmii{} \emph{run command}, because ``rc'' is an
old Unix abbreviation for ``run command''.
\subsection{Changing the style}
The style of \wmii-4 is defined through font and colour values, which are
unobtrusively exported with the following \emph{environment variables}.
\begin{verbatim}
WMII_SELCOLORS='#000000 #eaffff #8888cc'
WMII_NORMCOLORS='#000000 #ffffea #bdb76b'
WMII_FONT=static
\end{verbatim}
\verb+WMII_SELCOLORS+ defines the colours of the selected client's window
title and border, whereas \verb+WMII_NORMCOLORS+ defines the colours of all
unselected clients. The numbers are hexadecimal rgb tuple-values, which you
might know from HTML. You can grab them with the Gimps colour-chooser for instance.
The first colour defines the text colour of strings in bars and menus.
The second colour defines the background colour of bars and clients, and
the third colour defines the 1px borders surrounding bars and clients.
\verb+WMII_FONT+ defines the font which should be used for drawing text.
in title-bars, the status-bar, and the wmiimenu.
You can query for different fonts using \emph{xfontsel} for instance.
\subsection{Filling the status-bar}
\label{subsec:status}
The status bar of \wmii{} has it's own \verb+/bar+ directory with
a subdirectory for each of the labels created. So while editing
this document my status-bar looked like:
\begin{verbatim}
$ wmiir read /bar
d-r-x------ salva salva 0 Mon Apr 17 14:19:51 2006 1
d-r-x------ salva salva 0 Mon Apr 17 14:19:51 2006 2
d-r-x------ salva salva 0 Mon Apr 17 14:19:51 2006 status
\end{verbatim}
At the same time each of the subdirectories contains two files,
\begin{verbatim}
$ wmiir read /bar/status
--rw------- salva salva 23 Mon Apr 17 14:22:14 2006 colors
--rw------- salva salva 23 Mon Apr 17 14:22:14 2006 data
\end{verbatim}
The first file contains the colour definitions that control how the
bar will be drawn, while the second contains the data
which is displayed.
Now you can start your own experiments by creating a new label, and
exploring and modifying it by reading \& writing values to it's
\verb+colors+ \& \verb+data+ files. A nice feature of the bar
(and clients) is that they generate events corresponding to mouse
clicks on them. You can open a terminal and run
\verb+wmiir read /event+ to see how the events are generated
when you click onto the status-bar. This is a mechanism that allows
controlling applications directly from the bar. If you've
finished and you want to get rid of your label,
a \verb+wmiir remove /bar/foo+ command.
If you want to learn more, take a look at the status script and
visit \hrefx{http://wmii.de} for good examples, like the following:
\begin{itemize*}
\item \emph{status}: monitoring remaining battery, temperature, \dots on laptops
\item \emph{status-mpd}: controlling the running mpd
\item \emph{status-load}: show the machine load
\item \emph{status-net}: monitoring wireless network signal
\end{itemize*}
Now open the default status script and try to understand yourself,
how it works \verbatiminput{../rc/status}. The first line is a handy
\verb+xwrite+ function declaration, to prevent you from several verbosity
when issuing a write to some file. The following 3 lines take care of
creating and setting up the \verb+status+ label. The last section is a
\verb+while+ loop
that \emph{tries} to write the system load and date information
to the bar.\\
The tricky bit is, that it \emph{tries}. So what could make the write
fail? If \verb+xwrite+ tried to write to a non existent (removed)
label, then it would fail, thus the condition of the loop would be
false, and the status script exits cleanly, which makes sense
because nobody wants a program that updates a nonexistent label.\\
Now go back to the first lines of the script, and note
that there is a \verb+sleep delay+ between the removal of the
label and it's creation.
This ensures that the \verb+status+ label will not exist, hence all
the writes made from any previously running \verb+status+ script
will fail, thus they will finish. This way we make sure that
we only run one status script at each time. And thus we keep the
one-to-one correspondence between label and status script.
\subsection{Assigning new tags}
As mentioned before, you can achieve more powerful things with tags, than
with the standard key-bindings. You might use any string as a tag. You may
even use more than one tag per client. To do so, you have to separate the
tags with a ``+''.
\begin{verbatim}
echo -n web+code | wmiir write /view/sel/sel/tags
\end{verbatim}
This command would give the current focused client the tags
``web'' and ``code''.
You can now view the ``web'' tag by executing the following:
\begin{verbatim}
echo -n view web | wmiir write /ctl
\end{verbatim}
As the development of \wmii-4 progressed, it became clear that this
action is so common, that it got its own keybinding. By default
\emph{MOD-t} brings up a menu to choose a view and
\emph{MOD-Shift-t} brings up a menu enabling you to assign new
tags to the focused client.
% TODO:
% I would also like to put/see a recommended readings or bibliography
% section this will be of course biased by my use of plumber and acme
% from p9p but i think it's worth mentioning both them here. similar to:
% http://wmii.de/contrib/guide-es/beginnersguide/node10.html
\section{The End}
\label{sec:end}
We hope this helps you getting used to \wmii.
If you've seen something that you think is wrong, confusing or missing in
this document, feel free to drop us a note:
Contact information is to be found here:
\href{http://wmii.de/index.php/BeginnersGuide}{direct mail},
\href{http://wmii.de/index.php/MailingList}{[wmii]} mailing-list,
\href{http://wmii.de/index.php/IRC}{\#wmii} irc channel or even
with smoke signals~\footnote{ but don't ask us for advice, here
you're on your own \texttt{;-P}.}.
Also remember that \wmii{} is written by people with taste, so most
of the decisions made have strong reasons supporting them, so if
you think something doesn't make sense or doesn't fit into the
picture, just try to understand it by yourself first before
asking, probably you'll end up learning a lot and if its really
wrong in the end, you'll provide us with much better feedback to
solve the issue.
\newpage
\section{Appendix}
\label{sec:appendix}
\subsection{filesystem}
\begin{description}
\item [/bar]
\begin{itemize*}
\item the bar namespace
\item to add a label, create /bar/\verb+label+ (this automatically creates the
\verb+colors+ and \verb+data+ files.
\item to delete it, remove /bar/\verb+label+
\end{itemize*}
\item [/bar/label]
\begin{itemize*}
\item each bar has it's own namespace which is named according to it's
label
\item label can be any arbitrary string
\end{itemize*}
\item [/bar/label/data]
\begin{itemize*}
\item the data written to the label \verb+label+
\end{itemize*}
\item [/bar/label/colors]
\begin{itemize*}
\item the colours of the bar
\end{itemize*}
\item [/client]
\begin{itemize*}
\item the clients namespace
\end{itemize*}
\item [/client/n]
\begin{itemize*}
\item every client, including ones not shown in the view has a namespace here
\item \verb+n+ is a non-negative integer and clients are numbered oldest first
\end{itemize*}
\item [/client/n/class]
\begin{itemize*}
\item a file containing the class:instance information for client \verb+n+
\end{itemize*}
\item [/client/n/ctl]
\begin{itemize*}
\item control file for client \verb+n+
\item accepted commands:
\begin{itemize*}
\item kill (removes client)
\item sendto \verb+area|prev|next|new+
\item swap \verb+up|down|prev|next+
\end{itemize*}
\end{itemize*}
\item [/client/n/geom]
\begin{itemize*}
\item the window geometry of client \verb+n+
\item displayed as four blank separated integers (x y width height?)
\end{itemize*}
\item [/client/n/index] contains the client's index in the /client namespace, in this case n
\item [/client/n/name]
\begin{itemize*}
\item the name of client \verb+n+ as it's seen by \wmii{} (displayed in the tagbar)
\end{itemize*}
\item [/client/n/tags]
\begin{itemize*}
\item a plus(+)-separated list of tags to which client \verb+n+ is related
\end{itemize*}
\item [/ctl]
\begin{itemize*}
\item the \wmii{} control file and command interface
\item accepted commands:
\begin{itemize*}
\item quit
\item retag
\item view \verb+tag+
\end{itemize*}
\end{itemize*}
\item [/def]
\item [/def/border] width of the border around clients
\item [/def/font] the font used by \wmii{} (an xlib font name)
\item [/def/keys] a newline separated list of the keys to be grabbed by \wmii
\item [/def/rules]
\begin{itemize*}
\item a newline separated list of rules to specify how to automatically tag clients
\item matches against the class.instance values of a client
\item syntax: \verb+/$regex/ -> $tag+ (tag might be \~{} to indicate floating mode
\end{itemize*}
\item [/def/colwidth] with of newly created columns (in px)
\item [/def/colmode] mode of newly created columns
\item [/view]
\begin{itemize*}
\item a manifestation of the collection of clients associated with a specific
tag
\end{itemize*}
\item [/view/area]
\begin{itemize*}
\item each area has its own namespace in the current view
\item the areas are numbered starting with 0
\item 0 is always the floating area, the others are columns
\end{itemize*}
\item [/view/area/ctl]
\begin{itemize*}
\item accepted commands:
\begin{itemize*}
\item select \verb+client|prev|next+
\item client refers to the client number relative to the number and
age of the clients in \verb+area+
\end{itemize*}
\end{itemize*}
\item [/view/area/mode] the current layout for the area, equal, stack or max
\item [/view/area/sel] the selected client of the area
\item [/view/area/client] the namespace for each client in \verb+area+
\item [/view/ctl] accepted commands: select \verb+area|prev|next|toggle+
\item [/view/sel] the selected area in workspace
\item [/view/tag] the tag which is common to all clients in the workspace
\end{description}
\newpage
\subsection{keybindings}
Here are the default keybindings. \verb+$MODKEY+ is a placeholder, which is
usually mapped to Mod1 or Alt.
\begin{table}[h]
\begin{tabular}{|l|l|}
\hline % Puts in a horizontal line
Keybinding &Action \\ %Table Headers , columns separated by &,
%rows ended by \\
\hline
\hline
Moving Focus&\\
\verb+$MODKEY+-h&move focus to prev column \\
\verb+$MODKEY+-l&move focus to next column \\
\verb+$MODKEY+-j&move focus to next client in column \\
\verb+$MODKEY+-k&move focus to prev client in column \\
\verb+$MODKEY+-space&toggle to/from floating column 0 \\
\verb+$MODKEY+-[0-9]&select tag/view [0-9] \\
Moving Clients&\\
\verb+$MODKEY+-Control-h&swap client with last client of prev column \\
\verb+$MODKEY+-Control-l&swap client with last client of next column \\
\verb+$MODKEY+-Control-j&swap client down in the column \\
\verb+$MODKEY+-Control-k&swap client up in the column \\
\verb+$MODKEY+-Shift-h&send client to prev column \\
\verb+$MODKEY+-Shift-l&send client to next column \\
\verb+$MODKEY+-Shift-space&send client to/from floating column 0 \\
\verb+$MODKEY+-Shift-[0-9]&send client to tag/view [0-9] \\
Layouts&\\
\verb+$MODKEY+-d&select default layout \\
\verb+$MODKEY+-s&select stacked layout \\
\verb+$MODKEY+-m&select max layout \\
Menu Bar Functions&\\
\verb+$MODKEY+-a&choose action from menu bar \\
\verb+$MODKEY+-p&choose program from menu bar \\
\verb+$MODKEY+-t&choose view from menu bar \\
\verb+$MODKEY+-Shift-t&assign tag(s) to client from menu bar \\
Clients and Applications&\\
\verb+$MODKEY+-Return&open terminal client \\
\verb+$MODKEY+-Shift-c&kill client \\
\hline
\end{tabular}
\caption{Default keybindings of \wmii}
\end{table}
\newpage
\section{Credits}
\label{sec:credits}
\begin{description}
\item [Author] Steffen Liebergeld
\item [Main critic and inquisitor] Salvador Peir\'o
\item [Helpers]
Anselm Garbe \\
Denis Grelich \\
Ross Mohn \\
Neptun Florin \\
Jochen Schwartz \\
Adrian Ratnapala \\
\end{description}
\section{Copyright notice}
guide to wmii-4\\
Copyright (C) 2005, 2006 by Steffen Liebergeld, Salva Peir\'o
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 2
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
\end{document}