Nella prima parte abbiamo visto come porre una semplice domanda e come notificare all’utente lo stato dell’esecuzione in uno script shell.
In questa seconda parte ci occuperemo della possibilità offerta da Zenity di manipolare l’input e l’output di testo.
Per avere un input dall’utente in forma di testo scritto, l’opzione da usare è --entry, in questo modo:
$ zenity --entry --title="Un input di testo" --text="Inserisci qualcosa"
Il cui risultato è:

Possiamo decidere la dimensione della finestra di dialogo con l’opzione --width=N dove N è la larghezza totale in pixel, e possiamo fornire un testo predefinito già inserito nella casella con l’opzione --entry-text=stringa, come in questo esempio:
$ zenity --entry --width=300 --title="Un input di testo" --text="Inserisci qualcosa" --entry-text="Questo è già dentro"
Il cui risultato è:

Il testo digitato viene stampato nello standard output alla pressione del pulsante OK, mentre niente viene restituito se si preme il pulsante Annulla. Contestualmente, il valore di ritorno è zero (true) se si preme OK e diverso da zero se si preme annulla o si chiude la finestra dal pulsante nella barra del titolo.
Ecco un pezzetto di codice in Bash che distingue fra le varie situazioni:
#!/bin/bash
# mostra la finestra di dialogo e assegna quello che zenity manda allo
# standard output alla variabile "varstringa"
# notare i "backtick" -> ` `
varstringa=`zenity --entry --width=300 --title="Zenity: input di testo" --text="Inserisci qualcosa"`
# prende il valore di ritorno del comando precedente
ritorno=$?
# controlla se si è premuto OK o Annulla
if [ "$ritorno" -ne 0 ]; then
# è stato premuto annulla o chiusa la finestra
zenity –warning –title=”Test di Zenity” –text=”Hai annullato”
exit 1
else
# è stato premuto OK
zenity –info –title=”Test di Zenity” –text=”Hai scritto: ‘$varstringa’”
fi
Il codice è anche qui.
Una ulteriore opzione, --hide-text, permette di nascondere il testo durante la digitazione come durante l’inserimento di una password:
$ zenity --entry --title="Input nascosto" --text="Inserisci una password" --hide-text
Il cui risultato, digitando qualcosa, è:

Se invece di una singola riga vogliamo mostrare un testo lungo, come ad esempio un file di log, l’opzione da usare è --text-info, nella sua forma più semplice:
$ zenity --text-info --title="Vedere un intero file" --filename zenity-entry-02
che mostra il file zenity-entry-02 all’interno di una finestra:

L’opzione --filename permette di specificare un file da mostrare. Se si vuole poter cambiare il contenuto mostrato si può usare l’opzione --editable che consente modifiche al testo mostrato, con queste limitazioni:
- Non si ha praticamente nessuna funzione avanzata di editing.
- Le righe troppo lunghe vengono spezzate solo a video, mandandole a capo. Nell’output rimangono invece integre.
- Il file non viene modificato. Il testo completo viene stampato sullo standard output, e tocca a noi catturarlo e dirigerlo su un altro file.
Se poi avete esperienza di shell script saprete anche che usando questo comando:
$ zenity --text-info --filename zenity-entry-02 --editable > zenity-entry-02
si giunge ad un risultato ben diverso da quello atteso: il file zenity-entry-02 viene svuotato del contenuto e la finestra di Zenity viene mostrata vuota, perché nella ridirezione dell’output il file zenity-entry-02 viene aperto in scrittura e troncato a zero byte prima di eseguire il comando Zenity.
Il testo mostrato può anche essere fornito dinamicamente:
$ find / -name "*.pdf" | zenity --text-info --title="I file pdf sul tuo disco"
che produce questo:

con la lista dei file PDF che viene allungata man mano che il comando find ne trova altri.
Per ora chiudiamo qui, ma Zenity ci riserva molte altre sorprese.
Se ti piace quello che scrivo registrati al feed RSS














BlogoSquare
One Comment