você está aqui: Home  → Arquivo de Mensagens

YAD - Yet Another Dialog

Colaboração: Júlio Cezar Neves

Data de Publicação: 24 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.



 

 

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

Opinião dos Leitores

Raimundo Alves Portela Filho
31 Mai 2011, 23:55
Não sabia que tinha como colocar o YAD compilado junto com a nossa aplicação não, esta é uma novidade para mim. Porem é muito interessante, principalmente caso a pessoa não queira encher seu computador com bibliotecas ou quando a distribuição é mais complicada de fazer a instalação de pacotes, como o Slackware.

Sobre a parte do Kazam, concordo plenamente com você, atualmente uso ele no computador da empresa e prefiro utiliza-lo do que o GTK-RecordMyDesktop, que acho MUITO pesado.
Raimundo Alves Portela Filho
30 Mai 2011, 21:07
"... a maioria das distros atuais com Gnome já vem com ela instalada por padrão"

Dar pra colocar o pacote do yad compilado junto com seu script e disponibilizar para alguem que ainda não tenha o yad, nem precisa instalar ele, eu fiz isso, claro que o ideal é instala-lo, mas no caso de não ser possível dar pra fazer isso.

E muito provavelmente o Yad será um padrão, é um projeto ainda novo, mas muito promissor já estou usando e aproveitando as vantagens dele.

Sobre ainda não está nos repositórios do Debian, é questão de tempo, e muitos outros softwares bons estão fora dos repositórios do Debian :-)

como o kazan.



@Tacioandrade
30 Mai 2011, 15:03
Parece ser bem interessante o projeto, porem mesmo sendo tão bom, ainda vejo no Zenity uma facilidade um pouco maior, pois a maioria das distros atuais com Gnome já vem com ela instalada por padrão, o que vem a facilitar a sua utilização.

Outra coisa é que por não existir o pacote nos repositórios do Debian, nem do Ubuntu, faz com que algumas pessoas fiquem com um pé atrás na estabilidade do projeto.
Arx Cruz
30 Mai 2011, 12:07
Olá,

Sou um dos desenvolvedores/mantenedores do Zenity. No nosso bugzilla, realmente algumas coisas estão bastante atrasadas. Peço minhas sinceras desculpas e estou disposto a começar a implementar novas funcionalidades no Zenity, com a ajuda de vocês claro. Atualmente é somente eu e mais um desenvolvedor a trabalhar no Zenity, e estamos tentando diminuir a quantidade de bugs do bugzilla, vejam que algumas implementações já foram feitas na versão 3.0, e caso vocês queiram novas funcionalidades, não hesitem em nos contactar, se via bugzilla não for possível, me mandem um e-mail. Tenho todo o interesse em melhorar o Zenity. Às vezes é complicado, pois precisamos manter compatibilidade com sistemas legados, mas farei o possível para agradar a comunidade SL.
Enviem patches com novas funcionalidades e correções (sempre super bem vindos), sugestões, prometo que irei ver todas (talvez não no mesmo dia, mas também não irá demorar um ano para responder).

Meu email é arxcruz arroba gmail ponto com para qualquer dúvida.

Abraços,
Arx Cruz
C.Junior
25 Mai 2011, 23:57
Otima dica Julio, só uma correção, faltou uma \ após a linha "--field Outra".

Parabens e abraços
Sérgio Berlotto
25 Mai 2011, 07:50
Ótimo trabalho !
É sempre bom ver as ferramentas que utilizamos serem melhoradas por quem tem novas idéias !
vlw !

Ah, no ArchLinux o pacote encontra-se no AUR:
https://aur.archlinux.org/packages.php?ID=32392

http://berlotto.blog.br - Arch & Linux blog
Antonio Carlos
24 Mai 2011, 10:29
Júlio,

Muito bom seu artigo, parabéns.
Mas, "EXCOLHA uma fruta" foi de doer... :P

Um abraço.
Smailli Hemori Moraes
24 Mai 2011, 09:44
Ótimo artigo, vamos testar esse carinha ae...
Raimundo Alves Portela Filho
17 Mai 2011, 23:38
Ótima Dica Julio Neves,
Estou entusiasmado com o YAD, desde que você comentou no CONSEGI aqui em Brasília, já fucei bastante e fiz algumas coisas.

Acho que precisamos divulgar mais esse projeto e torcer pra ele torna-se o padrão em muitas distros daqui pra frente.

Abraços
*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