TWM: Tab Window Manager

2 December 2008 da Marco

Le interfacce grafiche straripanti di effetti grafici abbondano, e tra Windows Vista e Beryl i cicli macchina ormai si sprecano come il cibo. Fortunatamente c'è ancora gente che dopo aver esclamato “wow” si rende conto che il sistema è sì più attraente ma l'usabilità e la velocità sono dimezzate.
In questo articolo parlerò del noto – anche se non sono sicuro che sia poi così noto - window manager TWM (Tab Window Manager), in cui nutro parecchia simpatia.
Ancora ai tempi in cui Xfree86 era a codice aperto questo window manager veniva distribuito assieme ad esso, ed ora che c'è X.Org la situazione non è cambiata. Lo trovate praticamente in tutte le distribuzioni linux che supportano X11, e probabilmente è il wm più veloce e leggero per sistemi unix. È molto semplice da configurare e può diventare estremamente produttivo facendo solo un po' di pratica.

TWM - xterm ed emacs

TWM - xterm ed emacs

Vediamo innanzitutto come avviarlo. Ovviamente do per scontato che abbiate già configurato il server X e vi funzioni tutto alla perfezione. Prendete il vostro file .xinitrc e modificatelo aggiungendo in una nuova riga:

twm

verificate che non siano segnati altri window manager onde evitare conflitti, quindi salvate il file.Prima di avviare la grafica è opportuno copiare il file di configurazione di TWM nella vostra home, così da avere una personalizzazione solo per il vostro utente. Il file si trova solitamente in /etc/X11/system.twmrc. Dovete copiarlo nella vostra home rinominandolo semplicemente .twmrc. È anche possibile rinominarlo .twmrc.<nome_display> per avere un file di configurazione diverso per ogni display X.

Prima di avviarlo, tuttavia, è meglio verificare che nel menù di TWM ci sia un collegamento quantomeno ad un terminale, come xterm, altrimenti non potreste farci nulla:

menu "main"
{
"Main Menu"		f.title
""			f.nop
"XTerm"    f.exec  "xterm &amp;amp;amp;amp;"
"Show Icon Manager"	f.showiconmgr
"Hide Icon Manager"	f.hideiconmgr
""			f.nop
"Exit"		f.menu "Quit-Verify"
}

Come vedete si tratta di aggiungere un collegamento al terminale, ma questo solo nel caso che il file di configurazione non sia già stato modificato dalla vostra distribuzione. Molte versioni di linux, infatti, lo configurano in automatico, inserendo numerosi programmi nei sotto menù; tra poco vedremo comunque come aggiungere delle voci manualmente. Fatti gli opportuni cambiamenti al file di configurazione non vi resta che lanciare x:

$ startx

il caricamento è pressoché immediato, e vi ritroverete davanti ad uno schermo completamente vuoto (sempre che non abbiate deciso di avviare dei programmi tramite .xinitrc. Per far apparire il menù basta cliccare in un punto qualsiasi con il tasto sinistro del mouse.
Passiamo ora ad analizzare il file di configurazione. Sempre da TWM, usando il terminale, aprite il file .twmrc con un qualsiasi editor di testo. Potrete salvare i cambiamenti quando vorrete, e vi basterà riavviare TWM per vederli applicati in pochi secondi.

NoGrabServer
RestartPreviousState
DecorateTransients
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
ResizeFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
MenuFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
IconFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"
IconManagerFont "-adobe-helvetica-bold-r-normal--*-100-*-*-*"
#ClientBorderWidth

Color
{
BorderColor "slategrey"
DefaultBackground "rgb:2/a/9"
DefaultForeground "gray85"
TitleBackground "rgb:2/a/9"
TitleForeground "white"
MenuBackground "rgb:2/a/9"
MenuForeground "gray85"
MenuBorderColor "slategrey"
MenuTitleBackground "gray70"
MenuTitleForeground "rgb:2/a/9"
IconBackground "rgb:2/a/9"
IconForeground "gray85"
IconBorderColor "gray85"
IconManagerBackground "azure"
IconManagerForeground "gray70"
}

In questa prima parte si definiscono i vari font utilizzati dal wm, oltre che i colori delle varie parti. Per quest'ultimo punto i colori vanno scritti in RGB con notazione esadecimale, ciò significa che se avete un valore di blu pari a 162 dovrete scrivere a2. Da notare che è possibile personalizzare i colori per le diverse finestre:

BorderColor  "red" { "XTerm" "yellow" }

in questo caso settiamo il bordo delle finestre rosso, ma quello dell'xterm giallo. È possibile fare la stessa cosa con qualsiasi variabile.

#
# Define some useful functions for motion-based actions.
#
MoveDelta 3
Function "move-or-lower" { f.move f.deltastop f.lower }
Function "move-or-raise" { f.move f.deltastop f.raise }
Function "move-or-iconify" { f.move f.deltastop f.iconify }

#
# Set some useful bindings.  Sort of uwm-ish, sort of simple-button-ish
#
Button1 = : root : f.menu "main"
Button2 = : root : f.menu "windowops"

Button1 = m : window|icon : f.function "move-or-lower"
Button2 = m : window|icon : f.iconify
Button3 = m : window|icon : f.function "move-or-raise"

Button1 = : title : f.function "move-or-raise"
Button2 = : title : f.raiselower

Button1 = : icon : f.function "move-or-iconify"
Button2 = : icon : f.iconify

Button1 = : iconmgr : f.iconify
Button2 = : iconmgr : f.iconify

Qui vengono prima definite delle funzioni per effettuare le classiche operazioni sulle finestre (sposta, ridimensiona, iconifica etc). Successivamente queste funzioni vengono associate ai diversi tasti del mouse. Anche qui potete cambiare quello che volete, invertire i pulsanti come più vi aggrada (il parametro “root” identifica la scrivania).

Veniamo ora alla parte forse più pratica ed utile del file di configurazione, ovvero le strutture dei menù.

menu "main"
{
"Main Menu"		f.title
""			f.nop
"Show Icon Manager"	f.showiconmgr
"Hide Icon Manager"	f.hideiconmgr
""			f.nop
"Exit"			f.menu "Quit-Verify"
}

menu "Quit-Verify"
{
"Really quit twm?"	f.title
"No, restart twm"	f.restart
"Yes, really quit"	f.quit
}

menu "windowops"
{
"Window Ops"		f.title
""			f.nop
"Iconify"		f.iconify
"Resize"		f.resize
"Move"			f.move
"Raise"			f.raise
"Lower"			f.lower
""			f.nop
"Focus"			f.focus
"Unfocus"		f.unfocus
""			f.nop
"Delete"		f.delete
"Destroy"		f.destroy
}

Queste righe sono quelle che probabilmente troverete anche nel vostro file .twmrc, e sono quelle standard che non comprendono nessun collegamento a nessuna applicazione, né dei sotto menù. Per creare una categoria nel main vi basta inserire una riga di questo genere:

"Linux"		f.menu "/Linux"

In questo modo avrete un primo livello di menù con etichetta “Linux”, a cui potrete aggiungere quante voci vorrete:

menu "/Linux/Aiuto"
{
"APT HOWTO"    f.exec  "/usr/bin/apt-howto &amp;amp;amp;"
}
menu "/Linux/Applicazioni"
{
...
}

Abbiamo così aggiunto due sotto menù alla voce Linux, precisamente Aiuto ed Applicazioni. Tra le parentesi graffe potete aggiungere qualsiasi tipo di collegamento usando la sintassi della riga 3. In questo modo potete costruirvi una rete anche ampia di categorie con le rispettive applicazioni, ottenendo un menù di tutto rispetto.
Sono presenti molte altre variabili, ma per il loro utilizzo vi consiglio di dare un'occhiata alla pagina man di twm. Vorrei invece concludere descrivendo le opzioni che si possono aggiungere al comando twm:

-display <num_display>

Vi permette di avviare TWM su un display X a vostra scelta tra quelli precedentemente avviati

-f <filename>

Potete specificare il nome del file di configurazione che twm dovrà utilizzare. Normalmente controlla il file .twmrc nella vostra home, oppure quello di sistema syestem.twmrc

-v

Questa è una sorta di “verbose mode”, e farà sì che twm stampi a schermo gli eventuali errori che il server X produce. È utile più che altro per sessioni di debugging.

Spero di avervi descritto sufficientemente bene l'utilizzo di questo window manager da “fanatici”, il quale vi permetterà di immergervi completamente in qualsiasi operazione, privati una volta per tutte da qualsivoglia distrazione frivola.

SE QUESTO ARTICOLO TI E' SEMBRATO INTERESSANTE CONDIVIDILO O DAGLI UN +1, CONTRIBUIRAI A FAR CRESCERE IL BLOG

Pubblicato in Informatica | Commenti (2)

No comments yet

Leave a Reply