Yad 0.16 - Eu quero sempre mais de ti

Neste artigo pretendo mostrar as novidades que vieram com a última versão estável do Yad. Faço uma cobertura mais completa dessa fantástica ferramenta, além de colocar exemplos úteis, comentando as possibilidades que podem ser implementadas.

[ Hits: 84.402 ]

Por: Raimundo Alves Portela em 07/01/2012 | Blog: http://portelanet.com


Mais do mesmo (form)



Já cobri estes Dialogs no Artigo anterior, mas assim como o Yad, acredito que aprendi bastante nos últimos meses. Então vou apresentar novamente estes Dialogs, cobrindo novidades e expondo um exemplo útil para o dia a dia de cada um deles.

yad --form

O form é tão importante, que mereceria um Artigo só pra ele ;-), é uma mão na roda para desenvolver aplicações mais completas que precisam capturar diversas informações de entradas por usuários.

Abaixo um exemplo usado apenas para demonstrar alguns campos e forma de uso:

#!/bin/bash
# Cadastro de Palestrante em Evento

yad --form \
	--title='Cadastro de Palestrante' --center \
	--field='Operador do sistema:':RO "$USER" \
	--field='':LBL '' \
	--field='Nome:' '' \
	--field="- [ TIRAR FOTO ] -":BTN "streamer -c /dev/video0 -t 00:00:02 -b 32 -o teste_00.jpeg" \
	--field="- [ VER A FOTO ] -":BTN "yad --image='teste_19.jpeg' --timeout=2 --no-buttons --undecorated --geometry=+0+200" \
	--field='Mini-curriculo:':FL "$HOME" \
	--field='Titulo da Palestra:' '' \
	--field='Resumo:':FL "$HOME" \
	--field="Slides:":FL "$HOME" \
	--date-format="%d/%m/%Y" \
	--field="Dia:":DT "$(date +%d/%m/%Y)" \
	--field="Nr. Sala:":NUM 1!1..14!1 \
	--field="<b>Recursos</b> :":LBL '' \
	--field='DataShow':CHK TRUE --field='Quadro Negro':CHK FALSE --field='Microfone':CHK FALSE --field='Computador':CHK FALSE \
	--field="Nível:":CB "INICIANTE!INTERMEDIÁRIO!AVANÇADO" \
	--field='':LBL '' \
	--field="Salvar arquivos em:":DIR \
	--columns=2 --button='_Sair':1 --button='_Cadastrar':0 >> cad_palestrantes.txt  
Linux: Yad 0.16 - Eu quero sempre mais 
de ti

Ao executar o script acima, os dados do formulário, ao pressionar o botão 'Cadastrar', serão salvos do arquivo "cad_palestrantes.txt" separados por '|' (barra vertical) que é o separador padrão do Yad, você pode especificar outro usando o parâmetro '--separator'.

O 'form' contém diversos tipos de campos, denominados '--field', e cada um deles pode ser configurado com um tipo que direciona o comportamento do mesmo.

Sintaxe de uso:

yad --form --field='texto do campo':TIPO 'conteúdo'

Bom, agora vamos apreciar uma rápida descrição de alguns campos usados no exemplo do cadastro de palestrantes:
  • --field='Operador do sistema:':RO "$USER" : Este é um campo tipo somente leitura (Read Only), onde a informação é apresentada e não pode ser alterada;
  • --field='':LBL '' : Campo tipo rótulo (label), útil para descrever o que virá a seguir, quando usado sem descrever o 'texto do campo', é exibido uma linha horizontal no seu lugar;
  • --field='Nome:' '' : Aqui um campo simples, onde não defini seu TIPO, assim ele cria um campo para entrada de texto;
  • --field="- [ VER A FOTO ] -":BTN "yad --image='teste_19.jpeg' --timeout=2 --no-buttons --undecorated --geometry=+0+200" : Nesse usei um campo do tipo BTN, colocando em seu comando a chamada para outro Dialog do Yad para mostrar a foto tirada com o comando do campo anterior, observem o campo --geometry=+0+200, ele permite configurar o tamanho e posicionamento do Dialog, nesse caso estou configurando as posições da tela no pixel 0 na horizontal e 200 na vertical;
  • --field='Mini-curriculo:':FL "$HOME" : Um botão para selecionar arquivo, passei a ele o diretório inicial "$HOME";
  • --date-format="%d/%m/%Y" : Aqui estou configurando o formato da data para o campo do tipo DT (data);
  • --field="Dia:":DT "$(date +%d/%m/%Y)" : Campo do tipo data, permite selecionar uma data assim como o Dialog yad --calendar (informei como conteúdo inicial a data atual);
  • --field="Nr. Sala:":NUM 1!1..14!1 : Campo do tipo numérico, onde podemos informar o valor inicial, uma faixa de valores mínimo e máximo, seguido do valor de cada passo. No caso descrito teremos valor inicial 1, permitindo um valor mínimo de 1 e máximo 14, permitindo passos de 1 em 1;
  • --field='DataShow':CHK TRUE : Um campo do tipo Check Box, onde informamos como valor inicial TRUE para marcado e FALSE para desmarcado;
  • --field="Nível:":CB "INICIANTE!INTERMEDIÁRIO!AVANÇADO" : Aqui um campo tipo Combo Box, onde uma faixa de valor é pré-configurada e permitido ao usuário selecionar um deles, observem que cada item é separado por uma exclamação '!';
  • --field="Salvar arquivos em:":DIR : Permite selecionar um diretório (usei só para mostrar mesmo);
  • --columns=2 : Organiza os campos do formulário em colunas, sendo que os campos são organizados na vertical (observe o que fiz no script Calculadora Shell com Yad).

Agora mais um script para demonstrar algumas das novidades do 'form' no Yad, tendo a possibilidade de imprimir conteúdo dentro de um campo texto e também de podermos capturar o conteúdo de um campo texto, para ser usado em outro campo, tudo isso sem que o Dialog seja fechado.

O código do script pode ser visto no link: Calculadora Shell com Yad
Linux: Yad 0.16 - Eu quero sempre 
mais de ti

Linux: Yad 0.16 - Eu quero sempre 
mais de ti

Obs.: Não coloquei a opção de '--undecorated', o fato de não aparecer os botões da janela é em decorrência ao uso do Cinnamon no Gnome3 ;-)

Explicação:

Para imprimir conteúdo em um campo, o campo tipo BTN, deve ser iniciado com um '@', e deve imprimir um texto iniciado com o número do campo a ter o conteúdo mudado.

Exemplo:

yad --form --field='Mostrar aqui' '' --field='Testar':BTN "@echo '1:Hello world'"

No caso acima, o campo 1 é o --field='Mostrar aqui' ''.

Para capturar o texto de um campo, basta referenciar o campo, usando um '%1' (primeiro campo), '%2' (segundo), e assim por diante.

Exemplo:

yad --form --field='Texto' 'Hello World' --field='Testar':BTN "yad --text '%1'"

Agora um bônus ;-), vejam um Piano usando o '--form' e o novo recurso do campo BTN para executar comandos. No script uso o comando play disponível na aplicação Sox (Detalhes do código e download em Piano em Shell + Yad):

Obs.: Para usá-lo você precisa ter instalado o Sox:

sudo apt-get install sox

Ao executá-lo, verás:
Linux: Yad 0.16 - Eu quero sempre mais 
de ti

O código ficou bem pequeno, porque ao invés de criar manualmente todos os 49 botões, usei o próprio shell para construir o shell. ;-)

Demais campos que poderíamos usar no 'form':
  • --field='texto do campo':TIPO 'conteúdo' : Existe uma lista bem extensa de tipos de campos, como: H, RO, NUM, CHK, CB, CBE, FL, SFL, DIR, CDIR, FN, MFL, DT, CLR,BTN or LBL. Veja detalhes sobre eles no manual do Yad. (Se precisar de ajuda, use a lista do Yad, ou sinta-se a vontade para trocar informações comigo);
  • --align=TIPO : Configura o alinhamento do Texto nos campos (left, center ou right);
  • --separator=STRING : Como comentado acima, define um carácter para separar o texto de retorno dos campos, sendo o padrão '|';
  • --item-separator=STRING : Define um separador para os itens de campos como CB e NUM.

Como disse, são muitas opções. Desculpe se a explicação dada não ter ficado muito clara, mas precisando, basta entrar em contato.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Recursos Gerais
   3. Destaques (button e display)
   4. Novos Dialogs (multi-progress e print)
   5. Mais do mesmo (form)
   6. Mais do mesmo (calendar, color e font)
   7. Mais do mesmo (entry e icons)
   8. Mais do mesmo (file e text-info)
   9. Mais do mesmo ( progress e list)
   10. Mais do mesmo (notification e scale)
   11. O esquecido (dnd) e Conclusão
Outros artigos deste autor

Explorando a entrada de dados com READ em Bash Shell

Enviar e-mail pelo terminal com mutt

Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server, etc

Mostrando dicas ao iniciar o terminal

Aplicativos para gerenciar a Área de Transferência (Clipboard)

Leitura recomendada

getopts: criando scripts Bash com parâmetros e argumentos personalizáveis

BackRE - Seu script de backup remoto

Alta disponibilidade de links

Ubuntu 14.04 no AD com CiD

Relatório de sistema via browser (shell script + CGI)

  
Comentários
[1] Comentário enviado por eldermarco em 07/01/2012 - 13:56h

Muito bom Raimundo! Mostrou as várias funcionalidades do yad de maneira bem sucinta e ao mesmo tempo completa.
Artigo bastante útil. Favoritado.

+10

[2] Comentário enviado por danniel-lara em 07/01/2012 - 16:05h

Parabens Raimundo
muito tri mesmo o artigo
ficou bagual mesmo

[3] Comentário enviado por julio_hoffimann em 08/01/2012 - 19:42h

Parabéns Raimundo! Ótimo artigo.

Abraço!

[4] Comentário enviado por fabio em 09/01/2012 - 09:28h

Muito bom! Fiz a instalação através dos repositórios, a versão do pacote já é a 0.16.

[]'s

[5] Comentário enviado por slavko em 09/01/2012 - 15:45h

Please, provide the right information. The latest version of the yad on my public debian repo (mentioned in article) is 0.16.3 (for Debian testing), the 0.12 version is provided only for Debian stable, while most of my packages for stable is in state, when squeeze was released.

Any debian stable user can download source from testing and rebuild it, or try to install the testing version manualy.

regards

[6] Comentário enviado por rai3mb em 09/01/2012 - 21:20h

@slavko

Sorry for the inconvenience, the requested correction was made.

Thank you for calling attention to it.

[7] Comentário enviado por leandro em 11/01/2012 - 12:15h

Não é só um Zenity Melhorado. Agora está muito mais completo do que ele.

Ótima ferramenta!

Ótimo artigo!

+10!

[8] Comentário enviado por alexandregms em 11/01/2012 - 18:08h

As constantes atualizações de versões do YAD demonstram mesmo a rápida evolução do Software Livre!

O YAD dominou o cenário de GUI!

Ótimo artigo, muito bem explicado! Parabéns!

[9] Comentário enviado por c4rl em 11/01/2012 - 23:20h

Cara, fantástica essa ferramenta! Parabéns pelo artigo!

[10] Comentário enviado por rai3mb em 12/01/2012 - 00:07h

Obrigado pessoal, demorou mas saiu, acho que comecei esse artigo em outubro, mas como fiquei bem ocupado, fui adiando, adiando, até que resolvi terminar no nas ultimas semanas de 2011 e primeiras de 2012.

Ótima ferramenta realmente, muito bom pra deixar nossos scripts mais usáveis ;-), podendo fornecer interface via shell e gráfica ao mesmo tempo.

Abraços e dale, dale Yad!

[11] Comentário enviado por manchatnt em 27/01/2012 - 00:12h

Muito bom seu artigo.
Estou montando um script baseado no seu artigo e encontrei algumas dificuldades que não estou conseguindo resolver.

yad --list --width 350 --height 300 --checklist\
--column=Select --column=Dispositivo \
$( \
for dispositivo in $(mount | awk '{print $1,$2,$3}')
do
echo FALSE \"$dispositivo\"
done)

O problema é que ele não está entendendo a separação das colunas. Vi que vc usou um while num de seus exemplos, mas mesmo assim não obtive sucesso. Alguém poderia me ajudar nessa?

[12] Comentário enviado por rai3mb em 28/01/2012 - 00:15h

O problema no caso é que o separador das colunas é um espaço, e vc está usando três campos $1 $2 $3, que retornam 3 espaços, e dispositivo tem todo o conteúdo do resultado do comando mount, e o laço vai ser executado para cada palavra...

Faça assim que dar certo:

#!/bin/bash

#gere o arquivo com os dipositivos
mount | awk '{print $1,$2,$3}' > /tmp/lista

#execute o yad lendo o arquivo
eval yad --list --width 350 --height 300 --checklist \
--column=Select --column=Dispositivo \
$( \
while read dispositivo
do
echo FALSE "\"$dispositivo\""
done < /tmp/lista)





[13] Comentário enviado por Lisandro em 08/10/2012 - 07:30h

Excelente! Favoritado.

[14] Comentário enviado por satanghost em 08/08/2014 - 15:30h

boa tarde Raimundo, muito show seu post.
mas gostaria de uma ajuda se possivel coloquei em um script ests linhas

yad --list --text 'Escolha os diretórios' --checklist --column "Permitir" --column Diretório FALSE '"arquivo' '1"' FALSE '"arquivo' '2"' TRUE '"arquivo' '3"' '--separator=;'

mas nao consigo visualizar diretorio .. como posso colocar para ver meus diretorios ...
grat o]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts