você está aqui: Home  → Arquivo de Mensagens

YAD - Yet Another Dialog

Colaboração: Júlio Cezar Neves

Data de Publicação: 19 de outubro de 2017

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 "Informe sua preferência sobre frutas" \
    --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.

Sobre o autor

Júlio Cézar Neves

O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.

Veja a relação completa dos artigos de Júlio Cezar Neves

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script