\setupoutput[pdftex]
\startmode[screen]
  \input ../pre-elug.tex
\stopmode
\useencoding[win]
\mainlanguage[de]

%\runMPgraphicsfalse

\appendtoks \let\handlecompoundcharacter\string \to \everyMPgraphic

\defineoverlay[larswmtiled][\useMPgraphic{twotracks}]

\starttext

\startuseMPgraphic{machmit}
path kopf, rumpf, kabel, maus, eimer;

u := 0.1*\overlayheight;

kopf  := unitcircle scaled 1.2u;
rumpf := (1.5u,0u)--(2u,4u)--(2.5u,0u)--(3u,4.5u)--(2.5u,7u)--
         (6u,7u)--(2u,8u)--(1u,4.5u)--cycle;
eimer := (0u,4u)--(1u,0u)--(4u,0u)--(5u,4u);

kabel := (-0.2u, -3u)--(-0.2u,-0.5u)..(0u,0u)..(0.5u,-0.5u)--(0.5u,-2u);
maus := (-0.5u, -1u)--(-0.5u,-0.5u)..(0u,0u)..(0.5u,-0.5u)--(0.5u,-1u)--cycle;

fill kopf shifted (2u,8u) withcolor black;
fill rumpf withcolor black;
draw eimer shifted (4u,0u) withcolor black;
draw kabel shifted (6u,7u) withcolor black;
fill maus shifted (5.8u,4u) withcolor black; 
\stopuseMPgraphic

\defineoverlay[MachMit][\useMPgraphic{machmit}]

\startstandardmakeup
\hbox{\hbox{%
  \framed[width=0.64\textwidth, height=\textheight]
          {\tfb larswm.\\
                Der Fenstermanager\\
                für das Wesentliche.}}
   \hfill
   \hbox{\vbox to \textheight{\hbox{%
     \framed[width=0.34\textwidth, height=0.32\textheight]
             {\tfa Johannes Hüsing}
     }\vfill\hbox{%
     \framed[width=0.34\textwidth,height=0.32\textheight]
             {\tfa ELUG\\11.12.2001}
     }\vfill\hbox{%
     \framed[width=0.34\textwidth,
             height=0.32\textheight,
             background=MachMit]
      {mach mit}}}}}
\stopstandardmakeup

%\Title{larswm. Der Fenstermanager für das Wesentliche}

%\setupbackgrounds[text][text][background=larswmtiled]

\subject{Grafische Benutzeroberflächen}

\subsubject{Geschichte}

\startitemize

\item Alan Kay, Xerox PARC, 1970er Jahre: Verknüpfung von grafischem
Display, Fenster-, Maus- und Menüsteuerung, objektorientierter
Programmierung

\item Reimplimentationen: Apple Lisa/Macintosh, OS/2, MS Windows,
NeXTStep, Aqua

\item Unix/Linux: Traditionelle Differenzierung von grafischem
Display, Fenstersteuerung und objektorientierten Frameworks

\startitemize[n]

\item Grafisches Display (X Window System, Framebuffer, Berlin) 

\item Window Manager (fvwm, Window Maker, Blackbox, Sawfish, larswm) 

\item Objektorientiertes Framework (Qt+KDE, GTK+Gnome)

\stopitemize
\stopitemize

\subsubject{Vor- und Nachteile des klassischen Designs}

\startitemize
\head Vorteile: 

        \startitemize
        \item Übersichtlichkeit (vs. virtuelle Konsolen/GNU screen)
        \item Grafische Oberfläche möglich, wo sinnvoll (Bsp.: Gimp)
        \stopitemize

\head Nachteile:

        \startitemize
        \item Ressourcenverbrauch des X-Servers und eventueller Desktop-Software
        \item Manuelles Fenstermanagement, Hantieren mit der Maus
        \item Verschwendung von Anzeigefläche durch Menüs, Werkzeugleisten, Icons
        \stopitemize
\stopitemize

$\Rightarrow$ Vorteile behalten, Überflüssiges streichen!

\subsubject{Anderer Ansatz}

Auf was kann man eher verzichten?

\startitemize
  \item Icons: werden überdeckt 
  \item Desktopmenus: Rootfenster überdeckt 
  \item Fensterleisten: Zum Anfassen und für den Fenstertitel, nicht
  unbedingt wichtig
  \item Maus: Sinnvoll zum Reinfinden, aber man muss loslassen können
\stopitemize

Wo ist Intuition wichtig? Wir nehmen

\startitemize
\item vi oder Emacs für Texte
\item mutt für Mail
\stopitemize

$\Rightarrow$ heftig benutzte Anwendungen wenig intuitiv und
tastaturorientiert, aber schnell. Warum dann nicht beim
Fenstermanager?

\subject{Die Fensterverwaltung}

\subsubject{Idee}

\startitemize
\item Aufgabe des Fenstermanagers
\item Und nicht des Mausschubsers
\stopitemize

\subsubject{Typen von Fenstern}

\startitemize

\head gekachelt

Ein Fenster links, von oben nach unten reichend. Alle anderen Fenster
verkleinert und rechts aufgestapelt.

\head frei

Neues Fenster so, wie in {\tt .Xresources} definiert

\stopitemize

\subsubject{Gekachelte Fenster}

\startitemize

\item In der Regel ist das aktive Fenster das linke.

\startuseMPgraphic{klicken}
numeric height, width;
height := 36pt;
width := 48pt;
input twotracks;
pickup pencircle xyscaled 1;
drawarrow (0.5width*(1-tracksize), 0.5height){dir 45}..{dir
315}(width*(1-0.5tracksize), 0.5height) withcolor 0.9red;
drawarrow (width*(1-0.5tracksize), 0.5height){dir 225}..{dir
135}(0.5width*(1-tracksize), 0.5height) withcolor 0.9red;
\stopuseMPgraphic

\item Links klicken auf ein anderes Fenster macht dieses aktiv und
rückt es nach links. \useMPgraphic{klicken}

\startuseMPgraphic{toggleactive}
numeric height, width;
height := 36pt;
width := 48pt;
input twotracks;
pickup pencircle xyscaled 1;
drawarrow (0.5width*(1-tracksize), 0.5height){dir 45}..{dir
315}(width*(1-0.5tracksize), height*(numtiles-0.5)/numtiles) withcolor 0.9red;
drawarrow (width*(1-0.5tracksize), height*(numtiles-0.5)/numtiles){dir 225}..{dir
135}(0.5width*(1-tracksize), 0.5height) withcolor 0.9red;
\stopuseMPgraphic

\item Ctl-Alt-$\uparrow$ tauscht linkes und rechtes oberes. \useMPgraphic{toggleactive}

\startuseMPgraphic{paternoster}
numeric height, width;
height := 36pt;
width := 48pt;
input twotracks;
pickup pencircle xyscaled 1;
drawarrow (0.5width*(1-tracksize), 0.5height){dir 45}..{dir
315}(width*(1-0.5tracksize), height*(numtiles-0.5)/numtiles) withcolor 0.9red;
for i=1 upto numtiles-1:
drawarrow (width*(1-0.5tracksize), height*(i+0.5)/numtiles)--
(width*(1-0.5tracksize), height*(i-0.5)/numtiles) withcolor 0.9red;
endfor;
drawarrow (width*(1-0.5tracksize), height*0.5/numtiles){dir 225}..{dir
135}(0.5width*(1-tracksize), 0.5height) withcolor 0.9red;
\stopuseMPgraphic

\item Ctl-Alt-$\downarrow$ macht den Paternoster im Uhrzeigersinn. Das
Fenster unten rechts kommt nach links und wird aktiv. \useMPgraphic{paternoster}

\stopitemize

\subsubject{freie Fenster}

\startitemize

\item frei positionierbar

\item verschiebbar, streck- und stauchbar: nur mit Tastatur

\item freie und gekachelte Fenster bieten zwei verschiedene Ebenen
eines Desktops: den Subdesktop 

\stopitemize

\subsubject{sonstige Fenstereigenschaften}

\startitemize

\head Werkzeug (Tool)

unverdeckbar, unverrückbar, umflossen von anderen Fenstern. Sollte freies Fenster sein. 

\head klebrig (sticky)

wird auf jeden Desktop mitgenommen. Kann freies oder gekacheltes Fenster
sein. 

\head treibend (floating)

verdeckt alle anderen Fenster

\stopitemize

\subject{Die Aufgabenleiste}

\subsubject{Lage und Ausmaße}

\startitemize
\item Höhe: eine Zeile
\item Breite: Display
\stopitemize

\subsubject{Inhalt}

\startitemize
\item Fenstertitel
\item Menü
\item Desktoptitel
\item Desktopeigenschaften
\stopitemize

\subsubject{Desktopeigenschaften}

\startuniqueMPgraphic{TCRSBH}
label("[TCRSBH]",(0,0)) withcolor .6*white;
currentpicture := currentpicture hsized (.85*\overlayheight);
\stopuniqueMPgraphic

\defineoverlay[Desktopeigenschaften][\uniqueMPgraphic{TCRSBH}]
\setupbackground[background=Desktopeigenschaften]

\startitemize
\sym{T} Aktiver Subdesktop. Gekachelt ist T, frei ist U.
\sym{C} Klick wird an Anwendung weitergegeben (und dient nicht nur der
Aktivierung des Fensters)
\sym{R}
\sym{S} Aktiviertes Fenster wird nach vorne geholt.
\sym{B} Fensterbewegungen um jeweils 5~\% der Bildschirmbreite anstatt
um 1 Pixel.
\sym{H} Dieser Desktop enthält verdeckte Fenster.
\stopitemize

\subsubject{Menü}

Acht Menüpunkte -- fest verdrahtet

\startitemize[n]
\item {\it Pass clicks on to client?}
Mausklick nicht nur um Fokus zu bekommen, sondern auch für die
Anwendung. 

\item {\it Resize window when tiling?}

\item {\it Retile when focus changes?}
Aktiviertes Fenster wird nach vorne geholt.

\item {\it Show class info on status bar?}
In Statuszeile Fensterklasse und Fenstereigenschaften anzeigen.

\item {\it Current window should be floating?}
Aktives Fenster treibend.

\item {\it Current window should be a tool window?}
Aktives Fenster unverdeckbar.

\item {\it Current window should be sticky?}
Aktives Fenster mitwandernd.

\item {\it Current window should be tiled?}
Aktives Fenster stapeln.

\stopitemize

\subject{Konfiguration}

\subsubject{Programme}

\startitemize

\item sind in Konfigurationsdatei durch aufsteigende Zahl
gekennzeichnet, zum Beispiel \type{larswm.application.2: mozilla} 

\item können Eigenschaften zugesprochen bekommen, zum Beispiel
Tastatur- oder Mauskürzel, zum Beispiel 
\type{larswm.application_key.2: m}, \crlf
\type{larswm.application_mod.2: Mod4} ermöglicht Start von Mozilla
mit Windows/Linux-Taste und m.

\stopitemize

\subsubject{Fensterklassen}

\startitemize

\item sind die Fensterklassen, wie sie von X vergeben werden und mit
{\tt xprop} oder {\tt xwininfo} ermittelbar sind, zum Beispiel 
{\tt larswm.dtclass.2: Gimp}

\item können einem Desktop zugeordnet werden, zum Beispiel {\tt
larswm.dtnum.2: 1} legt alle Gimp-Fenster auf den {\it zweiten}
Desktop (fängt bei Null an zu zählen)

\item können Fenstertypen zugeordnet werden, zum Beispiel 
\type{larswm.dotileclass.0: Mozilla-bin} oder \type{larswm.floatclass.0: Gimp~toolbox}

\stopitemize

\subsubject{sonstige Einstellung}

\startitemize
\item Abstand zwischen gekachelten Fenstern in Pixeln:
\type{larswm.tile_pad} 
\item Fensterrahmenbreite in Pixeln: \type{larswm.border}
\item Fensterrahmen- (aktiv) und Statuszeilenfarbe: \type{larswm.foreground}
\item Fensterrahmenfarbe (inaktiv): \type{larswm.background}
\item Font in Statusleiste: \type{larswm.font}
\item Anzahl Desktops (bis zu 16): \type{larswm.desktops}
\stopitemize

\subsubject{nützliche Einstellungen}

\startitemize

\item zeilenorientierte Anwendungen sorgen nicht dafür, dass ein
wieder vergrößertes Fenster den alten Inhalt wieder anzeigt
$\Rightarrow$ die Standardterminaleinstellung sollte 
\type{xterm -e screen bash} lauten, screen merkt sich Terminalinhalt 

\item Neustart des Managers mit \type{larsremote restart}

\item Text auf Statuszeile mit \type{larsremote message} geben

\item für ungestapelte Fenster: in \type{.Xresources} Lage und Größe
eingeben mit \crlf\type{Anwendung*Geometry: 240*120-0-0} (240 Pixel breit,
120 Pixel hoch, rechte untere Ecke)

\item Breite der linken Spur lässt sich desktopabhängig
einstellen. Nützlich zum Beispiel: Browserfenster breiter,
Terminalfenster nicht so breit. 

\stopitemize

\subject{Fazit}

\subsubject{Askese ist nicht immer Käse}

\startitemize

\item Was man gerade braucht, ist schön groß

\item sparsam im Verbrauch (Bildschirmfläche, Hauptspeicher, Rechenzeit)

\item dadurch schnelles Arbeiten möglich (manche legen sich den
Paternoster auf das Mausrad!)

\item Abhängigkeiten: libc, Xlibs

\item Weiterentwicklung, bis auf Bugfixes, ist eingestellt 

\item Bestandteil von Debian GNU/Linux (unstable) und FreeBSD (ports)

\stopitemize

\subsubject{Verbesserungswürdig}

\startitemize

\item nicht alle Tastenbelegungen funktionieren überall so wie vorgesehen

\item einige Belegungen erfordern \type{Ctl} und \type{Alt} -- Vorsicht!

\item Statuszeile lässt sich nicht verbergen

\item Bestimmte Eigenschaften hängen mit der Fensterklasse und nicht
mir dem Namen zusammen

\stopitemize

\subsubject{Weitere Verweise}

\startitemize

\item Homepage: \type{http://www.fnurt.net/larswm}

\item Mailingliste: An \type{majordomo@fnurt.net} eine Nachricht
senden mit der einzigen Zeile \type{subscribe larswm} im Rumpf

\item Fanseite: \type{http://www.math.fu-berlin.de/~guckes/larswm/} 

\stopitemize

\stoptext