diff --git a/doc/guide_en.tex b/doc/guide_en.tex new file mode 100644 index 00000000..5c98d523 --- /dev/null +++ b/doc/guide_en.tex @@ -0,0 +1,535 @@ +%guide to wmii-3 +%Copyright (C) 2005, 2006 by Steffen Liebergeld + +%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} +\usepackage[latin1]{inputenc} +\usepackage[left=3cm,top=2cm,right=2cm,bottom=3cm]{geometry} +\usepackage[a4paper,dvipdfm]{hyperref} +%\usepackage{ngerman} +\usepackage{times} +\newenvironment{itemize*} + {\begin{itemize} + \setlength{\itemsep}{0pt} + \setlength{\parskip}{0pt}} + {\end{itemize}} +\date{\today} +\author{Steffen Liebergeld} +\title{A Guide to wmii-3} +%\email{stepardo@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-3. People who have used wmi, wmii-2.5 or even ion will get + to know what is new and different in wmii-3, 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-3 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 goal is to not to exceed 10000 lines of + code. + + Wmii tries to be very portable and to give the user as many + freedom as possible. + + Wmii-3 is the third mayor release of the second generation of the + window manager improved \footnote{The ii is actually a roman + letter for the number 2}. Wmii first introduced a new paradigm in + version 2.5, namely the dynamic window management. + + \subsection{Target audience} + + I presume the reader already has some experiences with Unix, knows + all the basic terminology like files or editors. It is helpful if + you know what a socket and a network protocol is. + + The best audience is always the audience that is open minded + against new ideas, and is willing to spend some time learning it. + +\section{Configuration and 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 free of charge + \footnote{Please have a look at http://wmii.de/repos/wmii/LICENSE + for details} . + + You may download it from http://wmii.de/ + + \subsection{Configuration and Installation} + + Unpack it: + + \begin{verbatim} + tar xzf wmii-3.tar.gz + cd wmii-3 + \end{verbatim} + + Edit the configuration: + + \begin{verbatim} + vim config.mk + \end{verbatim} + + The most important variable to set is the PREFIX, which states, + where you want wmii-3 to be installed to. + + Run make and make install: + + \begin{verbatim} + make && make install + \end{verbatim} + + Now you have to tell 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} + + Make sure that the \emph{~/.xinitrc} is executable: + + \begin{verbatim} + chmod a+x ~/.xinitrc + \end{verbatim} + + And you are finished. Please note that we do not use the autoconf + tools for various reasons, you may read about it here + \footnote{ + http://www.ohse.de/uwe/articles/aal.html \linebreak[4] + http://lists.cse.psu.edu/archives/9fans/2003-November/029714.html + } . Please don't ask us to use autoconf, we won't do it. + +\section{Terminology} + + Before you actually start doing your first steps in wmii, we have to + make sure we are both talking about the same things. So here is some + terminology. + + \subsection{Clients} + + A client is a program, that draws a window to the + screen + \footnote{Actually it is the program that requests the xserver + to draw the window. But never mind;-)} + . For example your browser or your xterm is a client. + + \subsection{Focus} + + In X11, exactly one client gets the users input. If you write some + command in your xterm, this xterm has the focus, whereas all the + other windows do not react on the input you give + \footnote{Actually + this is not precise at all, because some programs catch input + before it is sent to the focussed client. But you do not need to + know about this..} + We will say from now on, that the xterm has the + focus. + + \subsection{Events} + + Events are generated by your input. For example when you click + into a window, that is an event. Events are used for example to + interact with the window manager. You will see how this works + later on. + + \subsection{Tags} + + Tags are names you can give for clients. That allows you to group + clients. In wmii, there are no workspaces anymore. Instead, we + simply show only one tag at one time. Thus, if you name a client + "web-browser" and request the wm to only show the tag + "web-browser", you will only see that one client. If you tag a + xterm with the same tag, it will also be shown, when your first + client with the tag "web-browser" is visible. It is also possible + to give clients multiple tags, but more on this later. + + \subsection{View} + + When you request the window manager to only show windows with one + particular tag, you may call this a view. You might imagine, that + this somewhat resembles the "workspace" of other window managers. + + You might have different views with only one of them visible at a + particular time. + + Views are defined by the tags only, so if you don't have a tag of + a particular name, you don't have a view of that name. Similarly, + if you destroy the last client with one tag, the view with the + same name also gets destroyed. + + \subsection{Column} + + In wmii, you are able to divide each view into different columns, + which are distinct parts of the screen, divided by an invisible + line between each other. 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 will be destroyed. + + Please be aware, that every view has at least one column. + + \subsection{Layout} + + You may order clients in a column in three different ways. The + first, which is also the default, is to give each window equally + much vertical space in a column. The second is to have each client + maximised in the column, showing only one of them at a time, while + hiding the others. And last but not least you may have the clients + stacked, which means have to one client use as much space as + possible and to show only the title-bars of the other windows. + +\section{Getting started} + + It is now time to start diving into the wmii user experience. I + suggest you to try the things I describe yourself immediately + instead of first reading it, forgetting half of it and then trying + to start. It is very helpful if you have this document printed out + or have it on a different machine, since you won't be able to view + it during your first steps in wmii. + + On a special note, the \emph{MOD} key I am referring to may resemble + different keys on different platforms. It is what X knows as the + \emph{Meta} or \emph{Alt} key. Most probably, this is the \emph{Alt} + key left of the space-bar on your keyboard. + + The notation \emph{MOD+Key} means to press \emph{MOD}, hold it and + to press \emph{Key}. + + All key combinations may be freely configured, but for the sake of + simplicity I'll stick with the default bindings for this + introduction. You may find out how to alter the bindings in the + ``Scripting wmii''-Chapter. + + \subsection{First steps} + + You may now start your X session. Since it is the first time you + start wmii, a window with some tutorial messages will occur. You + are free to read it, but you may also follow the beginners guide + :-) + + First of all, press \emph{MOD+t} to start an xterm. It will take + half of the vertical space, so you now have two equally big + windows. If you press \emph{MOD+t} again, you have three windows + that are equally big. + + To switch between the three windows, you may now press + \emph{MOD+Tab}, which cycles the focus between the three windows. + + You may also press \emph{MOD+k} to switch to the window above or + \emph{MOD+j} to switch to the window below the current. + + Now have a look at the title-bars of those windows. They show some + important information: the first term is the name of the tag of + the window. Then, after the vertical line (the pipe symbol) wmii + shows the title of the window. + + The same information is also shown on the menu-bar. The first + things are names of the different tags you gave to your windows, + with the current view highlighted. Then it shows the title of the + focused window. On the right side it shows some system status + information like the load and the current time. + + \subsection{Using Columns} + + As you know wmii uses columns to align your windows. Even now, + that you didn't really see it your view already consists of one + maximised column. The next step is to create a new column. + + In wmii columns are defined by its clients. Thus you need a client + to create a new column. That is why you may now focus a client of + your choice and press \emph{MOD+n}. As you see, wmii created a new + column by dividing the view horizontally in two equally big + spaces. The last focused client has been put into the new column. + + If you close the last window of a column, the column will vanish + immediately. And when the last column is gone, the view will be + removed accordingly. + + It should be clear, that you really need at least two clients to + have two columns. + + If you press \emph{MOD+Tab} to change focus, you will see that + wmii actually cycles the focus in the current column only. That is + why you need commands to change the current column. + + In wmii you may use \emph{MOD+l} to change to the column on the + right and \emph{MOD+h} to change to the column on the left. + + It is also possible to make a client swap columns. To move a + client to the column on the left, press \emph{MOD+Enter} and to + move it to the right column, press \emph{MOD+Shift+Enter}. + + \subsection{What about layouts} + + Layouts are different methods of how to align windows in a + column. They apply only to one column each. Thus it is possible to + have different columns in one view, each having another layout. + + The default layout is to give each client in the column equally + much vertical space. You may enable this layout with \emph{MOD+e} + (where the ``e'' stands for equal). + + Another layout is the stacked layout. You enable stacking by + \emph{MOD+s}. As you see now, there in only one client using as + much space as possible, whereas you only see the title-bars of the + other clients in the column. You may still switch between the + clients in the column using \emph{MOD+Tab}. + + The third layout is the max-layout, which maximises all the + clients to use all the space in the column each. Only the focused + client is visible and the other are hidden behind. You may still + switch between those clients with \emph{MOD+Tab}. + + \subsection{Float pages} + + You may have asked yourself how classical clients, consisting of + multiple windows fit into the picture. + + Well, they don't. But wmii has a solution to make the usable + nevertheless. For clients like the Gimp or xmms there is a special + mode, which has completely different semantics. + + While wmii is a dynamic window manager, which really takes all the + work of positioning and aligning clients from you, those old + fashioned programs rely on the old window managing concept, where + all the clients fly around on the desktop and the user has to tell + them where to stay. We have the term floating windows for this + pragma. + + To come to the point: wmii also allows you to use floating + clients. You may enable floating mode for a window by focusing it + and pressing \emph{MOD+Space}. You may bring it back into a column + (the column it came from) by pressing \emph{MOD+Shift+Space}. + + As a side note, this floating mode is actually the zeroth column + internally. You will see later on why this was implemented this + way. + + \subsection{Tags} + + Up to now all your clients had the tag ``1'', and you only had + this one view. It is obvious that having only one view might + become a problem if there are too many clients cluttering it and + making it a pure mess. Also you might want to have a view with + your editor and your programming tools and another with your + browser and a third with your music jukebox. + + The good news is, that with the concept of tags and views this is + actually possible. + + You may give the focused client another tag by pressing + \emph{MOD+Shift+Number}, number being one of the numbers 1 to 9. + + You can then switch views by pressing \emph{MOD+Number}. + + Whenever a new client is created, it automatically gets the tag of + the current view. + + %% TODO: better tag handling (this is about to change in wmii till + %%version 3) + + For the moment I just tell you, that there are further + possibilities with tags, but they are mostly accessible with + advanced techniques, you will learn in the next chapter. You will + then be able to assign multiple tags to one client and to use + proper strings as tags. + +\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 the decisions about where to place a new + client itself, thus taking all the extra work from the user and + letting him concentrate on his work. + + \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, we were able to + split the task into two smaller binaries, each with a distinct + job. + + \subsection{The glue that puts it all together - 9p} + + Programs in Unix have several different possibilities to exchange + information, the most powerful being sockets. + + To create a lightweight but powerful communication protocol, we + looked closely at the design of Plan9 and chose the 9P2000 + protocol. + + The basic ideas for configuring and running wmii were taken from + Plan9 too. Like in Plan9, everything configurable in wmii is a + file. Thus, if you want to interact with a running wmii, you may + alter those files either using the shipped tool \emph{wmiir} or - + if you use fuse - you may also mount the virtual file-system of + wmii into your global name-space. + + \subsection{wmiir} + + \emph{wmiir} is a little tool we use to alter the files in the + virtual file-system of wmii. It basically has four tasks: + + \begin{itemize*} + \item read + \item write + \item remove + \item create + \end{itemize*} + + Wmiir needs to know the socket file of the file-system to work + on. Usually this is already defined in the environment variable + \begin{verbatim} + WMIIR_SOCKET + \end{verbatim}. If it isn't, or you want to work on another + file-system, you may specify it manually with the switch -s + socket-file. + + A sample invocation would look like the following: + + \begin{verbatim} + wmiir read / + \end{verbatim} + + This command actually prints the root of the virtual file-system + of wmii. + + \subsection{wmiimenu} + + \emph{wmiimenu} is a generic X11 menu. It is highly customisable, + efficient and supports user-defined contents. You may want to + learn more about it by reading the man-page. + + \subsection{wmiiwarp} + + \emph{wmiiwarp} is a little tool to position the mouse pointer to + different places. It only takes two coordinates as arguments. + + \subsection{wmiiwm} + + \emph{wmiiwm} is the main window manager binary. You may interact + with its virtual file-system only. + + \subsection{wmiipsel} + + \emph{wmiipsel} prints the contents of the X clipboard to + STDOUT. This is useful for scripts. + + \subsection{Conclusion} + + By having the virtual file-system and a lightweight protocol to + fit our tools together, we are now able to fully script our window + manager. You will see some examples in the chapter ``Scripting + wmii''. + +\section{Scripting wmii} + + In this chapter you will see how to script wmii. I will give you a + good starting point and give you some examples so you can start your + own examples. + + \subsection{Language} + + You may script wmii in any programming language you want. However, + for the sake of simplicity, I'll use ``sh'' for the examples. I + chose ``sh'' because the standard startup scripts of wmii are + written in ``sh'' too. + + When you start your own experiments, just use the language you are + most comfortable with. + + \subsection{wmiirc} + + \emph{wmiirc} is a ``sh''-script, which is run on startup of + wmii. It first sets up the initial file-system, writes some values + to certain files and then starts the event loop to react on + certain events like key-presses or mouse clicks. For the basic + configuration of wmii this is probably the place to look at. + + You may edit this file on the fly, which means you don't need to + stop wmii before editing. After you finished editing, you may + simply run wmiirc and the changes will take effect. + + To run the altered wmiirc just go to the actions menu + \emph{MOD+Control+a} and choose \emph{wmiirc}. + + \subsection{actions} + + In wmii you may group certain tasks into \emph{actions}. Actions + are nothing more than simple executables which are located either + in your local or in your global wmii configuration directory. + +% \footbote{This is normally either ~/.wmii-3/ or +% /usr/local/etc/wmii-3} + + As you see, even \emph{wmiirc} is an \emph{action}. You might want + to add your own actions by writing shell scripts and putting them + into the right directory. + + \subsection{Practical execises} + + \subsubsection{Assigning new tags} + + As I told you before, you can do much more things with tags than + what you can do 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 seperate the tags with a ``+''. + + \begin{verbatim} + echo -n foo+bar | wmiir write /view/sel/sel/tags + \end{verbatim} + + This command would give the current focused client the tags + ``foo'' and ``bar''. + + You may now go to the new view foo by executing the following: + + \begin{verbatim} + echo -n select foo | wmiir write /ctl + \end{verbatim} + + \subsubsection{Filling the status-bar} + + + +\section{Copyright notice} + +\end{document}