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.
Chamei ele de "o esquecido" porque no artigo anterior nem falei dele, talvez porque na minha opinião não há muita utilidade nele. ;-)
Mas vamos lá, esse Dialog basicamente executa um comando quando receber dados na sua entrada padrão. Podemos fazer isto arrastando arquivos em cima dele.
Exemplo simples, um analisador de arquivos, podendo abri-lo ou não, caso o usuário queira:
#!/bin/bash
ARQUIVO=$(echo "$*" | egrep -o '/[a-z0-9_].*')
ARQUIVO_FILE=$(file "$ARQUIVO")
arq="${ARQUIVO##*/}"
tipo=$(echo "$ARQUIVO_FILE" | cut -d':' -f2-)
ARQUIVO_LS=($(ls -allsh "$ARQUIVO"))
if yad --title='Detalhes' --text="Nome : <b>$arq</b>\nTipo: <b>$tipo</b>\nTamanho: <b>${ARQUIVO_LS[0]}</b>\n
Permissões: <b>${ARQUIVO_LS[1]}</b>\nDono: <b>${ARQUIVO_LS[3]}</b>\nGrupo: <b>${ARQUIVO_LS[4]}</b>\n
Modificado em: <b>${ARQUIVO_LS[6]}</b> às <b>${ARQUIVO_LS[7]}</b>" \
--button='Abrir':0 --button='Sair':1
then
xdg-open "$ARQUIVO"
fi
Este Dialog só tem as opções apresentadas, sendo:
--tooltip : Usa o texto que foi especificado em --text="Arraste o arquivo para analisar/abrir" como uma "dica/comentário", aqueles textos que aparecem ao passar o
mouse sobre um item de menu ou ícone de aplicativos;
--command : Comando a ser executado quando dados forem recebidos, nem precisa especificar um carácter especial para referenciar os dados recebidos, é como no
comando 'xargs', onde os dados são automaticamente passado para o final do comando, então no nosso exemplo passei eles como parâmetro para outro script.
Conclusão
Bom pessoal, este é o maravilhoso Yad, um poderoso recurso para disponibilizarmos interface gráfica e usabilidade a nossos script/programas em shell.
As opções crescem a todo vapor e as possibilidades, como sempre, só dependem da criatividade de quem for fazer uso da ferramenta.
Espero que não demore muito e o Yad possa ser colocado nos repositórios padrões das distros mais usadas.
Parabéns ao criador da ferramenta Victor Ananjevsky, aos criadores do Zenity e a todos os desenvolvedores de Software Livre como um todo, pois todos contribuem e
usufruem deste maravilhoso mundo do Software Livre.
[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.
[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.
[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)