All DNS Leads To Me

Nome: $:whoami _ Nato il: $:uptime _ Residenza: $:hostname _ Segni particolari: ‘uname -a’

Metacity va al diavolo

with 4 comments

Io sono il tipo di utente che usa il terminale ogni volta che è possibile. La cosa bella del terminale è che è possibile sempre usarlo con profitto =). Per quanto sia vero che richiede una certa attitudine allo sbattimento, è innegabile che permette di svolgere un certo compito a velocità stratosferiche: provare con hardware obsoleto per credere.

C’è una cosa che non sopporto di GNOME Terminal, la dimensione della finestra; costringe perennemente a ridimensionarla, pena linee di testo continuamente spezzate su due righe. Ed è proprio questo che non reggo. Totalmente antiestetico (essì, anche il terminale c’ha il suo appeal).

Per fortuna ho trovato chi fa il lavoro sporco al posto mio. Devil’s Pie è un tool di Ross Burton che integra le funzionalità del Window Manager (non supporta solo Metacity, ma anche OpenBox che io sappia). Nello specifico, permette di eseguire un discreto numero di operazioni automaticamente all’atto di creazione della finestra. Eh si, indovinato, allarga il terminale e me lo piazza a centro schermo =D.
Per installarlo basta apt-gettare il pacchetto “devilspie”.

Le regole che agiscono sulle finestre si trovano in file dall’estensione .ds contenuti all’interno della directory ~/.devilspie (che bisogna provvedere a creare). Le regole sono espresse mediante S-expression, tipiche dei linguaggi di programmazione funzionali. Non è per niente difficile scriverne di proprie dopo aver visto degli esempi base, sebbene di documentazione “ufficiale” su Devil’s Pie non ce ne sia proprio nessuna: la pagina di manuale è alquanto scarna e più che altro fornisce un elenco delle keyword riconosciute. Su questo wiki si trova una trattazione dettagliata di tutto ciò che serve, usatela con riconoscenza perchè l’autore l’ha costruita dalle viscere del codice sorgente di Devil’s Pie (è la prima volta che vedo in azione il mito del programmatore che rifugge dal documentare..).

(if
(is (window_class) "Gnome-terminal")
(begin
(maximize_horizontally)
(center)
)
)

questa qui sopra è la regola da copiare in un file, chessò, terminal.ds nella cartella .devilspie. Chi è pratico di programmazione si sarà già ben orientato, ad ogni modo quello che la regola fa è controllare se (if) la window_class della finestra creata è “Gnome-terminal”. Se la risposta è affermativa (TRUE), Devil’s Pie eseguirà sulla finestra le operazioni descritte in (begin). Non è necessario usare begin se si vuole eseguire una singola operazione, ma è comunque consigliato perchè poi sarà più semplice aggiungere un’altra operazione all’occorrenza.

Le operazioni che mi servivano erano miseramente due: allargare la finestra a tutta la larghezza (maxime_horizontally) e piazzarla al centro dello schermo (center). Tutto qui, e la mia idiosincrasia da terminale scompare.

Il tutto è ampiamente personalizzabile. L’importante è che si tenga presente questo: una sola regola per ogni file. Altrimenti Devil’s Pie semplicemente ignorerà la successiva. Ecco una breve panoramica delle azioni che è possibile eseguire sulle finestre:

geometry “geo”

Ridimensiona la finestra alla larghezza e all’altezza specificate. Possiamo anche specificare la posizione della finestra, oppure solamente la posizione.
(geometry “400×300+0-22”)
Ridimensiona la finestra a 400×300 px e la sposta alle coordinate (0,-22).
(geometry “640×480”)
Ridimensiona la finestra a 640x480px.
(geometry “+10+10”)
Sposta alle coordinate (10,10).

fullscreen
maximize
maxime_horizontally
mazimize_vertically

Rispettivamente a schermo intero, massimizza, massimizza in orizzontale, massimizza in verticale.

minimize
unminimize
focus
close
shade
unshade

ossia: minimizza (riduci a icona), ripristina, metti in evidenza, chiudi, arrotola, estendi. Shade e Unshade non sono supportati da Metacity (ho provato).

pin
unpin

pin visualizza la finestra su tutti i workspace, unpin disabilita questa funzionalità se la finestra che viene creata la supporta di default.

set_workspace “x”

Visualizza la finestra sul workspace x (con x a partire da 1).

above
below

Il primo rende la finestra sempre in primo piano. Below porta la finestra dietro tutte le altre finestre visibili.

undecorate
skip_pager
skip_tasklist

Undecorate elimina le decorazioni dalla finestra (volgarmente parlando, la barra del titolo). skip_pager non genera l’anteprima della finestra nella miniatura dei workspace, mentre skip_tasklist non visualizza il pulsante delle finestra nella Lista della Finestre.

Le proprietà più importanti delle finestre in base al quale impostare le regole sono

window_name
application_name
window_class
window_workspace

Se non sappiamo qual’è la proprietà della finestra che ci interessa manipolare basta avviare da terminale devilspie con il parametro di debug:

$: devilspie -d

che ci restituisce le proprietà di tutte le finestre aperte e di quelle che verranno aperte. Basta avviare quella che ci interessa e leggere l’output; una cosa del genere:

Window Title: ‘Liferea’; Application Name: ‘Liferea’; Class: ‘Liferea-bin’; Geometry: 1280×999+0+25

Che più chiara di così non si può.
Le variabili sopra producono una stringa di testo che viene confrontata con un’altra da noi impostata. Questo confronto può essere di tre tipi.

  • is x y
  • il confronto dà esito positivo se x coincide con y (come nella mia regola del terminale, dove window_class restituisce “Gnome-terminal”, che ovviamente è uguale a “Gnome-terminal” :) )

  • contains x y
  • controlla se y è contenuto nella stringa x. Utile se il nome della finestra cambia spesso (tipo per il browser), ma mantiene sempre un elemento fisso.

  • matches x regular.expression
  • come contains, ma con l’uso di espressioni regolari.

E questo è quanto. Nel wiki sono disponibili ancora altre opzioni, qua ho riportato quelle che senza dubbio saranno utili la maggior parte della volte. E’ anche possibile usare gli operatori logici and, or, not per combinare le condizioni e i confronti, ma gli esempi sul wiki sono chiarissimi a proposito.

Ovviamente conviene impostare l’autostart di devilspie in Sessioni, una volta sistemate le proprie regolette. Sono proprio curioso di vedere quando sarà la prossima volta che Devil’s Pie mi tornerà utile =).

Ah. Compiz in CCSM ha uno strumento integrato per manipolare le finestre in modo simile a come fa Devil’s Pie. Non so se è possibile usare devilspie in combinazione con Compiz, proverò appena posso. Però però, pensavo, Devil’s Pie è proprio uno di quei strumenti per il quale sarebbe davvero utile un front-end grafica, almeno per la creazione guidata delle regole.

Written by stefanauss

dicembre 26, 2007 a 7:28 pm

4 Risposte

Subscribe to comments with RSS.

  1. Ma scusa, tuttociò si può tranquillamente fare con compiz!
    prendi per esempio questo:
    http://emilator.wordpress.com/2007/11/01/gnome-terminal-embedded-nel-desktop-con-compiz/

    Cambi le regole a seconda delle tue esigenze, ma mi sembra molto più facile!

    Gio

    dicembre 26, 2007 at 8:36 pm

  2. Certamente Gio. L’ho anche detto =D
    Ma metti per assurdo, che uno non voglia/possa usare Compiz. Ma abbia lo stesso bisogno del trucchetto del terminale. Ecco che Devil’s Pie ha un senso!

    Il terminale integrato è bellissimo =)
    Però per dirti, prima di Compiz il terminale affogato nello sfondo si realizzava proprio con Devil’s Pie.

    stefanauss

    dicembre 26, 2007 at 8:44 pm

  3. Mea Culpa..non avevo letto tutto il post;)

    Gio

    dicembre 26, 2007 at 9:14 pm

  4. confermo, nei tempi bui si usa la torta del diavolo..anche con compiz cmq, se si vuole “potenziare” l’effetto, bisogna per lo meno conoscere le basi delle espressioni regolari

    emilator

    dicembre 27, 2007 at 8:54 pm


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: