3.14. TWM

Twm er en meget gammel og klassisk windowmanager, der stadig lever hist og her som et "alternativ der altid virker", og det kan derfor være godt at have et vist kendskab til den.

I nogle distributioner kan man være nødt til selv at oversætte den, hvis man vil prøve den. Det nærmeste man kommer på en hjemmeside med screenshots er http://www.plig.org/xwinman/vtwm.html.

TWM er en del af X11 projektet og vedligeholdes derfor. I XFree86 distributionen kan man endvidere finde nogle forslag til TWM-opsætning af Keith Packard, som er en af de mest kompetente X11 programmører. Sammen med de klassiske X11 programmer viser TWM hvordan et ægte modulært grafisk interface kan opbygges. Den kan samarbejde med xdm(1) og xsm(1) og dermed udbygges til et komplet system. Det er forfriskende at se et design, der i den grad overlader farver og fonte til brugeren, som kan bruge dekorationer, der ikke er firkantede og som ikke ligner noget andet kendt system.

Bruger man Red Hat, Gentoo eller Debian (og sikkert mange flere) er denne undervurderede windowsmanager klar til brug.

Den anvendes endvidere som reserve GUI for fail-safe operation i mange Linux/BDS distributioner, og også i kommercielle produkter (SUN fx.)

For dem, som er hooked på TWM er der varianter med virtuelle skriveborde og 3D-dekorationer. En kendt anke ved TWM er at den bruger Athena widgets, et 2D-widget-set, der oprindeligt blot var ment som en midlertidig hurtig løsning. CTWM og VTWM bruger 3D rammer og ligner derfor mere de andre windows-managere. Man kan finde nogle screenshots på nettet, men få af dem bruger TWM's mulighed for at man kan indsætte sine egne klikbare knapper i vinduesbjælkerne.

3.14.1. Opstart af twm

Følgende .xsession-fil vil starte TWM og sørge for at du som minimum har en xterm at arbejde i:


xterm &
twm


3.14.1.1. Opsætning af TWM

TWM's opsætning styres enten af den enkelte bruger i dennes .twmrc-fil eller for alle brugere på systemet i /usr/X11R6/lib/X11/twm/system.twmrc . Da en tom .twmrc vil give en TWM uden menuer eller noget som helst (den eneste måde den kan afsluttes på er med kill) må det anbefales at man tager udgangspunkt i en eksisterende .twmrc.

Med Red Hat følger der en enkel system.twmrc, det er den samme, som følger med kildeteksten til X11 (d.v.s. X11 default konfigurationen). Debian har en kraftigt modificeret meget interessant system.twmrc. Man kan læse i twm(1) (d.v.s. brugsanvisningen til TWM) om hvordan man yderligere kan tilføje funktionalitet til TWM.

3.14.1.2. Brug af TWM

3.14.1.2.1. Udseende

Figur 3-23. TWM

3.14.1.2.2. Fokusopførsel

I TWM følger fokus normalt musen, sådan at hvis musen ikke er i et vindue har det vindue ikke fokus. Fokus kan låses fast på et vindue med en funktion i baggrundsmenuen (default X11-opsætning).

Når man klikker på baggrunden og vælger menupunktet fokus, får man en lille kugle som musemarkør. Den kan man nu flytte hen på det vindue, som skal have fast fokus, klikke - og så er fokus låst her indtil man bruger den samme funktion igen.

Man kan konfigurere TWM, så at den har en museklik-funktion, som hæver et vindue og holder dets fokus, og en anden, som gør det muligt at få et eller andet til at ske, når man klikker på rammen. I .twmrc filen kan fx. definere en funktion, focus-raise, som udføres, når man klikker med shift-Museknap1:


     Function "focus-raise" { f.focus f.raise }
     Button1 = s : window :  f.function "focus-raise"
     Function "focus-raise-or-move" { f.focus f.raise f.deltastop f.move }
     Button1 = : frame : f.function "focus-raise-or-move"
   

Function "navn" { f.<xx> f.<yy> } er en definition af en funktion.

Button1 = s betyder: "Når man trykker shift + museknap-1" idet s, c, l, m, og m1, m2 etc. er identifiers for tastaturets modifier knapper, shift, control, lock, alternate (eller meta) meta2 etc. Kolon er delimiter, window er det område, som skal dækkes af den pågældende funktionalitet, og sidst på linjen kan der stå en funktion. Hvis man vil have sammensat funktionalitet, må man selv definere en funktion.

Man kan nu shift-klikke hvilket som helst sted i vinduet (også titlebar og ramme) og få vinduet op og i fokus. Da funktionen blokerer for andre funktioner, skal man nok ikke bruge museknap1 uden shift! De to sidste linjer sørger for, at hvis man klikker på rammen får vinduet fokus og kommer i forgrunden, og endvidere kan man flytte det. f.deltastop svarer til en if-sætning: Hvis man ikke flytter mere end deltastop pixels skal TWM ikke udføre resten at linjen. Man bør i øvrigt definere en lidt bredere ramme, hvis man bruger den funktion.

Som standard hæves et vindue ikke (dvs. det bliver bagved andre vinduer) selv om det får fokus. Dette kan ændres for udvalgte vinduer, ved at indsætte følgende linje i sin .twmrc:


AutoRaise { "XTerm" "emacs" }
vil alle vinduer der hedder "XTerm" (eller er af klassen "XTerm" - herunder alle der hedder "xterm") blive hævet når de får fokus. Samme for Emacs. Der er ingen måde at gøre dette til standardopførslen for alle vinduer. Og der er desværre heller ikke nogen måde at forbyde programmerne at forlange et forgrundsvindue, fx. OpenOffice smækker et vindue op i synet på den arbejdende programmør uden at man kan beskytte sig, og derved kan der ryge nogle tasteslag ind i et forkert vindue.

Man kan interaktivt give denne egenskab til enkelte vinduer med funktionen f.autoraise der er beskrevet nærmere i brugsanvisningen. De fleste TWM-brugere opfatter ikke dette som ønskeligt og det er ikke med i Red Hats standardopsætning af TWM.

3.14.1.2.3. Tastaturbindinger

Som standard er der ingen tastaturbindinger i TWM. Man kan sætte TWM til at kunne styres fra tastaturet uden at det hindrer at man stadig kan bruge musen.

Der er forslag til hvordan man kan gøre det i brugsanvisningen.

3.14.1.2.4. Menuers opførsel

Almindeligvis vil man sætte sin TWM op så der kommer en menu frem når man trykker på en museknap ude på baggrunden. Sådan en menu bliver kun på skærmen så længe man holder den pågældende museknap nede. Det vil sige at man trykker museknappen ned, trækker sig frem til det menupunkt man er interesseret i og slipper museknappen der.

3.14.1.2.5. Vinduer

Man flytter et vindue ved at trække i titelbjælken (som man kender det fra de fleste andre windowmanagere). Man ændrer størrelsen på et vindue ved at pege med musen på ikonet øverst til højre, trykke venstre museknap ned og trække musen udover den (eller de) kanter man vil flytte.

3.14.1.2.6. Placering af vinduer

Hvis man ikke giver et -geometry-argument til et program der åbner et vindue, vil TWM præsentere dig for en ramme i den størrelse vinduet vil få som du så skal placere. Når du har flyttet rammen det rigtige sted hen, kan man enten placere vinduet der ved at trykke på venstre museknap. Alternativet er at man kan justere dets størrelse ved at trykke midterste museknap nede og trække udover de kanter man gerne vil flytte, når man så slipper museknappen placeres vinduet. Hvis man gerne vil være fri for at skulle placere alle vinduer manuelt, kan man sætte TWM til at placere alle nye vinduer tilfældigt med følgende linje i sin .twmrc:


RandomPlacement


3.14.1.2.7. Hvad er det fede ved TWM?

Twm er gennemført minimalistisk. Den er tænkt til at samarbejde med X-session manager, xsm(1), der kan registrere, hvad der er af vinduer, når man logger ud, og med xdm, xsm og TWM kan man såmænd få en udmærket flad klient til X11. Det fedeste ved TWM er, at den ikke belaster grafik/CPU og giver god performance med remote X11.