Você está na página 1de 4

c 


 


O Zenity pode fazer bem mais do que exibir janelas informativas (embora elas possam
ser bastante úteis). Ele oferece uma vasta gama de janelas que podem ser usadas pelo
usuário para dar feedback e informar suas escolhas aos scripts. Alguns exemplos
incluem não apenas as tradicionais janelas de erros, avisos, perguntas e indicadores de
progresso, mas também calendários, entradas de texto, listas e escolhas de arquivos.
Sem querer copiar o manual do Zenity, vamos dar uma olhada em algumas dessas
opções.

  
 

Essencialmente, elas são idênticas às janelas de informações, mas exibem um ícone


diferente na janela. Este código exibe uma janela de aviso:

zenity --warning --text "Arquivo de configuração não encontrado!nUsando as


configurações padrão."
--title "Aviso do MeuScript"

Observe o uso do V para inserir uma quebra de linha. Observe também o uso do
parâmetro   (título). Se você não fornecer um título personalizado, o Zenity usará o
tipo de janela como título (nesse caso, a janela se chamaria "Warning", ou "Aviso" se o
sistema estiver em português).

ÿ     


   
 

Vamos supor que seu script peça ao usuário um caminho para um arquivo, talvez
(continuando o exemplo acima) para carregar um arquivo de configuração caso não seja
possível encontrar algum. Você pode apresentar a ele uma janela de escolha de arquivos
familiar:

CONFIG_FILE=`zenity --file-selection --title "Selecione um arquivo de configuração"`


case $? in
0) source $CONFIG_FILE;;
1) zenity --warning --text "Nenhum arquivo de configuração foi selecionadonUsando
configurações padrão";;
-1) zenity --warning --text "Nenhum arquivo de configuração foi selecionadonUsando
configurações padrão";;
esac

Esse código apresenta uma janela que permite selecionar um arquivo. Ela retorna 0 se o
usuário clicar em OK e 1 se clicar em Cancelar. Se algo der errado, ela retorna -1.
Usando isso em seus scripts você pode pedir ao usuário que forneça caminhos para
arquivos que serão usados mais adiante. Se quiser limitar o usuário a diretórios e não a
arquivos, adicione a opção KK   .

    

Outra maneira de obter feedback do usuário é com uma caixa de entrada de texto. Veja
este código, por exemplo:

ENTRY=`zenity --entry --text "Digite seu nome" --entry-text "Nome" --title "Digite seu
nome"`
if [ $? == 0 ]
then
zenity --info --text "Olá $ENTRY!"
fi

Observe como a opção KKV K  preenche a caixa de texto e já deixa o texto
selecionado para ser substituído. A propósito, nem todas essas opções são necessárias.
A janela de entrada mais simples é V 
KKV  , e isso também se aplica à maioria
das outras janelas do Zenity.

ÿ 


Você já deve estar pegando o jeito da coisa, mas e se o usuário tiver que fornecer uma
data? Use a opção KK V  , em um comando como V 
KK V  . Esse
comando retorna a data no formato curto do locale do sistema (no Brasil, o formato
costuma ser DD-MM-AAAA). Para deixar uma data pré-selecionada, use as opções KK
, KKV e KK . O formato retornado pode ser configurado usando códigos
"strftime" comuns:

DATE=`zenity --calendar --day "20" --month "2" --year "2009" --date-format="%Y-


%m-%d"`
if [ $? == 0 ]
then
echo $DATE
fi

Isso abre uma janela com o dia 20 de fevereiro de 2009 selecionado, e a data escolhida
será retornada no formato AAAA-MM-DD. Nem KK  nem KKV aceitam zeros na
frente, e em K  você deve fornecer números de quatro dígitos. Se passar "89" ele vai
entender como ano 89, e não 1989.

 

Nenhum conjunto de janelas estaria completo sem as perguntas. O Zenity oferece


janelas simples para perguntas, com rótulos fixos para os botões. Isso significa que você
tem que formular a pergunta de modo que as respostas "Ok" e "Cancelar" soem
coerentes. Por isso, ao invés de "Prosseguir sem um arquivo de configuração?", você
pode preferir "Arquivo de configuração não encontrado. Clique em OK para usar os
padrões ou em Cancelar para interromper o script." Na primeira pergunta, não ficaria
claro se o botão Cancelar interromperia o script ou abriria uma janela insistindo na
escolha de um arquivo. A segunda pergunta não confunde o usuário. A janela com a
pergunta retorna 0 se o botão OK for clicado e 1 se o botão Cancelar ou o botão para
fechar a janela for clicado.

   




Além das janelas de informações, erros e avisos, a janela de progresso pode ser útil para
manter o usuário informado. Na primeira parte deste artigo eu falei sobre como usei o
Zenity para oferecer a uma amiga uma interface gráfica para um script de conexão 3G.
Naquela situação poderiam haver atrasos na negociação do modem com a rede 3G em
busca de conexão. Durante esse atraso eu usei uma janela de progresso para que ela
saiba que tem alguma coisa acontecendo:

connect.sh up | zenity --progress --text "Conectando, aguarde..." --pulsate

A opção KK  é útil aqui porque só estou dizendo "agüente aí que estou
trabalhando". Não tenho nenhuma porcentagem real a oferecer, então essa opção faz a
barra de progresso se mover de uma lado para o outro, que nem a luz no capô da Super
Máquina. Se precisar exibir informações quanto ao nível de progresso, "ecoe" as
porcentagens para o zenity:
( for FILE in find $START_DIR --name $FILE_NAME;
do
echo 1;
echo $FILE >> $OUTPUT_FILE;
done
echo 100;
echo "#Todos os arquivos estão listados em $OUTPUT_FILE"
) | zenity --progress --percentage=0 --text "Procurando arquivos..." --title "Encontrar e
listar arquivos";

Sim, eu sei que há maneiras bem mais simples de passar a lista de arquivos de um
diretório para um arquivo de texto, é só um exemplo. O exemplo acima presume que
não haja mais de 100 arquivos no diretório, e francamente, a barra de progresso vai
chegar a 100% quase que imediatamente.

     

Ainda há muito a dizer sobre o Zenity, mas isso já deve ter aberto seu apetite. Os
comandos de ajuda do Zenity são excelentes e há muitos outros recursos online que
podem ajudar.

A quantidade de usuários GNU/Linux que não tem entrosamento com o shell cresce
cada vez mais, e ferramentas como o Zenity fazem toda a diferença para que possamos
ajudá-los. Embora algumas tarefas precisem de interfaces gráficas com mais recursos,
ferramentas como o Zenity, o Dialog e o Kdialog reforçam a idéia de que os bons
tempos de "fazer um shell script rapidinho" ainda não acabaram.

Você também pode gostar