Interface gráfica em scripts shell: Júlio Neves apresenta o yad
por Júlio Neves
[Veja também: Bombando o shell: o novo livro de Júlio Neves]
Mermão, se você gosta de usar a interface a caractere, lhe aconselho a instalar o yad (Yet Another Dialog) com urgência. O yad é um fork do zenity, só que muuuuuito mais incrementado. Para termos uma pequena ideia, pois este artigo é só um ensaio, nele você pode:
- Inserir imagens nos diálogos;
- Criar formulários com alto grau de complexidade;
- Criar quantos botões quiser e customizá-los quanto aos nome e aos códigos de retorno quando clicados;
- Criar diálogos drag’n drop;
- Criar diálogos com ícones de atalho
- Criar diálogos com barras de progresso múltiplas (muito legal para instalação. Uma serviria para o progresso de cada arquivo e outra para o progresso geral);
E muito mais…
Vamos logo aos exemplos para acabar com a encheção de saco:
Saida=$(yad --form --image BrLinux.jpeg --image-on-top --title "BR-Linux" --text "Demo do <b>YAD</b> para o <big><b>BR-Linux</b></big>" --field Nome 'Juliana' --field Nascimento:DT 01/01/2000 --field "Há quanto tempo usa <b>Linux</b>:NUM" '1!0..20!1' --field "Sites preferidos:CB" 'BR-Linux!Dicas-l!Viva o Linux!Outros' --field "Vou passar a usar o yad:CHK" TRUE --field "Vou continuar usando zenity:CHK")
Clicando nas caixas deste formulário, você verá que:
- No campo Nascimento, a opção :DT abriria um calendário com a data 01/01/2000 previamente selecionada;
- No campo Há quanto tempo usa Linux, aumentaria ou diminuiria os números pois a opção :NUM define uma SpinBox, da qual se informa: Valor Inicial!ValorMínimo..ValorMáximo!Incremento;
- No campo Sites Preferidos, a opção :CB gera uma ComboBox com os valores especificados como Valor1!Valor2!…!Valorn.
Repare que o código é autoexplicativo e extremamente simples e veja ainda que o yad aceita todas as facilidades de formatação oferecidas pelo GTK. Nesse exemplo usei as tags b e big da linguagem Pango Markup do GTK. Poderia ter trocado também cores do texto, fazer sub ou super escrito, itálico, …
Deixando os campos com seus valores default, as linhas a seguir mostram o conteúdo da variável $Saida e uma forma rápida de separar os campos em variáveis.
$ echo $Saida Juliana|01/01/2000|1,000000|BR-Linux|TRUE|FALSE|
O separador é a barra vertical (|), então vamos trocar $IFS para fazer uma leitura rápida. Note que dessa forma $IFS será alterado somente para executar o read, voltando ao seu valor default após a instrução.
$ IFS='|' read Nome Nascimento HaQtoTempo Sites Yad Zenity <<< "$Saida" $ echo $Nome ^ $Nascimento ^ $HaQtoTempo ^ $Sites ^ $Yad ^ $Zenity Juliana ^ 01/01/2000 ^ 1,000000 ^ BR-Linux ^ TRUE ^ FALSE
Como você pode ver, em Shell é tudo muito complicado. Em uma linha monto um formulário (sim, foi em uma linha, pois a contrabarra () foi usada para poder quebrar a linha e facilitar o entendimento) e em outra linha (a do read) passei todos os valores lidos para as respectivas variáveis. Ou seja, tudo foi feito em duas linhas somente.
Também podemos customizar botões, veja:
$ 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"
Duas coisas a destacar neste exemplo:
- A opção --entry-text gerou uma ComboBox com os valores passados;
- Podemos especificar não só os botões, como também os seus códigos de retorno ($?) para serem analisados por um comando case que viria logo a seguir.
Então pessoal, tem muito mais coisas para contar acerca do yad, porém temos uma limitação de espaço e por isso temos de ficar por aqui.
Para de ler este artigo e saia correndo para instalar o yad e colocar uma cara bonita nos seus scripts. Na vida real, não adianta nada ter um corpinho lindo, se a cara é feia... ;)
Se você já instalou o yad e deseja ver uma coisa inusitada, execute a linha a seguir e clique em qualquer ícone:
$ yad --icons --read-dir=/usr/share/applications --width 670 --height 400 --no-buttons
SuShellso!! ;)
Muito bom o artigo, é tudo tão simples de fazer… Gostei muito do Yad.
Desta vez, vou atualizar o servidor de gerenciamento de imagens daqui do trabalho. =’)
Enfim não mais preciso fazer arte manhas para criar frontend para meus scripts, homenagens póstumas ao Zenity.
Mas… cadê o kommander?
Nossa sou da época do Xdialog… oO Tô velho mesmo.
“Clicando nas caixas deste formulário, você verá que:”
#Trollface