Avanti Indietro Indice

4. Manipolazioni della Barra del Titolo di Xterm

Posso essere usate dele sequenze di escape non stampabili per produrre effetti interessanti nei prompt. Per usare queste sequenze di escape, dovete includerle fra \[ e \], dicendo a Bash di ignorare questo materiale nel calcolare la dimensione del prompt. Se non si includono questi delimitatori si fa in modo che il cursore appaia nel posto sbagliato perché la sua effettiva dimensione è sconosciuta. Le sequenze di escape devono anche essere precedute da \033[ prima della versione 2 di Bash oppure da \033[ o \e[ in versioni successive.

Se cercate di cambiare la barra del titolo dell'Xterm con il prompt quando siete alla consolle, produrrete spazzatura. Per evitare questo, testate la variabile d'ambiente XTERM per sapere se il prompt si troverà in un Xterm.

function proml
{
case $TERM in
    xterm*)
        local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
        ;;
    *)
        local TITLEBAR=''
        ;;
esac

PS1="${TITLEBAR}\
[\$(date +%H%M)]\
[\u@\h:\w]\
\$ "
PS2='> '
PS4='+ '
}

Questa è una funzione che può essere incorporata in ~/.bashrc. Il nome della funzione potrebbe quindi essere chiamato per eseguire la funzione. La funzione, come la stringa PS1, viene salvata nell'ambiente. Una volta che la stringa PS1 viene impostata dalla funzione, potete rimuovere la funzione dall'ambiente con unset proml. Dal momento che il prompt non può cambiare da quando sta in un Xterm a quando sta alla consolle, la variabile TERM non viene testata ogni volta che il prompt viene generato. Ho usato i marcatori di continuazione (i backslash) nella definizione del prompt, per consentire di scriverlo su più righe. Questo migliora la leggibilità rendendo più facile modificarlo e fare un debug.

Lo definisco come una funzione perché così è come il pacchetto Bashprompt (discusso più avanti in questo documento) tratta i prompt: non è la sola maniera di farlo, ma funziona bene. Via via che i prompt che utilizzate diventano più complessi, diventa sempre più sconveniente digitarli al prompt e più pratico metterli in qualche sorta di file di testo. In questo caso, per testare questo prompt, salvate quendo sopra come un file di testo chiamato "proml". potete lavorare come segue:

[giles@nikola:/bin (4.498 Mb)]$ cd     -> Andate dove volete salvare il prompt
[giles@nikola:~ (0 Mb)]$ vi proml      -> Modificate il file del prompt 
...                                    -> Inserite il testo dato sopra
[giles@nikola:~ (0 Mb)]$ source proml  -> Leggete la funzione del prompt
[giles@nikola:~ (0 Mb)]$ proml         -> Eseguite la funzione del prompt

Il primo passo nel creare questo prompt è di controllare se la shell che stiamo facendo partire è in un xterm o no: se lo è, la variabile della shell (${TITLEBAR}) viene definita. Essa consiste delle sequenze di escape appropriate e \u@\h:\w, che mettono <utente>@<macchina>:<directory di lavoro> nella barra del titolo di Xterm. Questo è particolarmente utile con Xterm minimizzati, rendendoli identificabili più rapidamente. Il resto del materiale in questo prompt dovrebbe essere già noto dai precedenti prompt che abbiamo creato.

Il solo inconveniente di manipolare la barra dell'Xterm in questo modo avviene quando vi loggate in un sistema su cui non avete predisposto il trucchetto della barra del titolo: l'Xterm continuerà a mostrare l'informazione del precedente sistema su cui c'era il trucco.


Avanti Indietro Indice