você está aqui: Home → Colunistas → Cantinho do Shell
Colaboração: Júlio Cezar Neves
Data de Publicação: 12 de Maio de 2011
Sou fã de carteirinha do Shell e frequentemente preciso melhorar a interface de um script com o usuário. Para isso, invariavelmente usava o Zenity que é extremamente fácil e melhora muito a apresentação.
Minha satisfação como o Zenity só não era total porque todos que conhecem um pouquinho de GTK 2, sabem que se pode tirar muito mais dessa linguagem do que o Zenity tira. Sempre esperei que a qualquer momento o gnome lançaria uma nova versão deste software que seria arrasadora, viria com todos os incrementos que eu (e acho que todos) aguardavam.
Estava enganado, acompanhei o lançamento de diversas revisões do software mas elas simplesmente tratavam bugs e apresentação. Infelizmente nada de inovação. Porém um dia descobri o YAD.
YAD significa Yet Another Dialog, mas sua tradução do russo é "veneno" (e essa é a inspiração de seu ícone) e se define como um fork do Zenity. Porém o YAD, distancia-se um pouco dele por não utilizar bibliotecas descontinuadas como libglade ou gnome-canvas. Utiliza somente o GTK 2, o que lhe dá uma maior portabilidade dentro do ambiente *n?x.
Poderia defini-lo como um Zenity com muitos aperfeiçoamentos, como botões customizados, diálogos adicionais, menu pop-up no ícone do notification
(sim é o mesmo notification
do Zenity, porém mais incrementado), diálogo para montar formulários complexos e muito mais.
Este artigo não é para mostrar como se instala, isso eu sei que vocês sabem se virar. O que quero é mostrar algumas (infelizmente muito poucas) novidades que o YAD traz para trabalharmos com interface GUI em Shell. Vamos ao que interessa:
Este é um dos poucos exemplos que achei pela internet e está no wiki do YAD (http://code.google.com/p/yad/wiki/Examples). Lá ele coloca o código completo para dar shutdown, reboot, ... Mas aqui executaremos somente a parte do YAD direto na linha de comandos.
$ yad --width 300 --entry --title "System Logout" \ --image=gnome-shutdown \ --button="_Switch User:2" \ --button="gtk-ok:0" --button="gtk-close:1" \ --text "Choose action:" \ --entry-text \ "Power Off" "Reboot" "Suspend" "Logout"
Aqui você pode ver uma ComboBox, diversos botões (um deles customizado) e um código extremamente simples. Repare que após a declaração do nome de cada botão, tem um :N
, onde N
é o valor que retorna em $?
quando este botão for clicado. Simples, não?
Um outro exemplo usando o diálogo --form:
$ yad --form --title "Dicas-l de Rubens Queiroz" \ --text "<big>Informe sua <b>preferência sobre frutas</b></big>" \ --image Frutas.jpg \ --field "Excolha uma fruta:CB" \ --field Outra --field "Qtas vc come?:NUM" \ --field "Arquivo:FL" \ --field "Como e chupo o caroço:CHK" \ 'Pera!Uva!Maçã!Manga' \ "" \ '1!10!1'
Com certeza você sabe que as contrabarras foram colocadas somente para tornar o texto mais visível e fácil de comentar, mas poderia ter sido escrito em somente uma linha.
O diálogo --form
permite que eu use uma opção --field
que aceita um monte de modificadores. Aqui usei, na ordem, :CB
, nenhum, :NUM
, :FL
e :CHK
que são, respectivamente, ComboBox, Entrada de texto, SpinBox numérico, Seletor de arquivos e uma CheckBox e para finalizar passei os valores das 3 primeiras. Veja o que gerou:
Ainda quero fazer uns comentários:
Repare no título (--text
) que usei tags de formatação;
Veja a facilidade de colocar qualquer imagem no diálogo usando a opção --image;
Especifiquei os textos do ComboBox separando-os com um ponto de exclamação (!). Este é o default, mas pode ser alterado;
O campo Outra, por não ter tido nenhum valor especificado assume que é uma simples entrada de dados.
O campo Qtas vc come? É um SpinBox e seu valor foi especificado com Mínimo!Máximo!Incremento.
Quando o campo Arquivo for clicado, abrirá um super diálogo para seleção de arquivo;
O campo Arquivo e o CheckBox não foram inicializados por serem os últimos e por isso poderem assumir seus valores default (Nome e FALSE, respectivamente).
Fora esses pequenos exemplos ainda existem muitos outros diálogos que não foram implementados no Zenity como diálogos drag'ndrop, diálogos com ícones para escolha de aplicativos, dialogo para escolha de fonte, diálogo para escolha de cores, ? E mesmo muitos dos diálogos existentes no Zenity, no YAD passam a ter mais opções.
Para finalizar, experimente fazer:
$ ls -l | yad --text-info --fontname "mono 10" --width 600 --height 300 $ ls -l | zenity --text-info --width 600 --height 300
e veja a falta que a opção --fontname
faz no Zenity.
Só para clarear o que falei, existe um diálogo --fonte
para escolha de fontes e uma opção --fontname
para especificar qual fonte um determinado diálogo usará. Agora, para finalizar mesmo vou mostrar o exemplo anterior, porém com escolha da fonte:
#! /bin/bash # Exemplo de uso dos diálogos --font #+ e --text-info Fonte=$(yad --font --title "Escolha de fontes" \ --text "Escolha uma fonte Dê preferência a fontes monoespacejadas" \ --height=300 --width 600) || exit 1 ls -l | eval yad --text-info \ --width=600 --height 300 \ --title \"Listagem do diretório $PWD\" \ --fontname \'$Fonte\'
Espero que você instale o YAD e teste esses exemplos que dei. Tenho certeza que você se amarrará no software.
Breve estarei publicando um manual sobre o YAD, atualmente está com 70 páginas A4 escritas.