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.
A opção --button, vai receber um destaque especial, pois a partir desta versão 0.16, ela vem com um recurso que permite executar um comando diretamente sem que o
Dialog corrente seja fechado.
Para colocar um botão em um Dialog, basta usar a seguinte sintaxe:
--button='LABEL':CODIGO_RETORNO ou COMANDO
LABEL :
É o texto a ser mostrado no botão, você pode colocar um texto simples, como 'Eu pulo'.
Pode colocar um atalho associado ao botão, como em 'EU _pulo', onde a letra após o '_' (underline) será a tecla de atalho a ser usada em conjunto com 'ALT', ficando
'ALT+p'.
Você também pode colocar uma opção pré-definida da biblioteca gráfica GTK, que já define atalho, texto e ícone padrões.
Exemplo:
yad --title='teste' --button='gtk-delete':"rm $ARQUIVO"
Para ver mais opções pré-definidas, instale gtk2.0-examples:
sudo apt-get install gtk2.0-examples
E execute o gtk-demo:
gtk-demo
Vá na opção "Stock Item and Icon Browser" e veja a quantidade de opções disponíveis:
CODIGO_RETORNO ou COMANDO:
Aqui você pode especificar um código de retorno para a variável padrão do shell "$?", caso você especifique um valor numérico.
Exemplo:
yad --button='OK':0 --button='Centenário':100
Após executar e clicar em um dos botões, veja o conteúdo da variável de retorno padrão '$?' (clicando em Centenário, por exemplo):
echo $?
100
A grande novidade da versão 0.16, com relação aos botões, é o fato de podermos colocar um comando no lugar do código de retorno, e o mesmo será executado sem que
o Diaglo corrente seja fechado.
Muito útil para fazer um Dialog que agrega diversas funcionalidades e precisamos manter o mesmo aberto.
Um exemplo rápido:
nano painel_controle.sh
#!/bin/bash
# Exemplo útil usando o display
main() {
yad --title='Aviso' --display=':0' \
--image='preferences-system-time' --text='Vai durmir cara!' \
--button='Só mais um pouco':1 --button='Ok':0
case $? in
1) MIN=$( yad --entry --title='Adiar' --entry-label='Minutos' --entry-text='10' --numeric 0 59 1 --display=':0')
# se clicar em OK agenda um novo horário usando o at
[ $? -eq 0 ] && TEMPO=$(date --date "now +${MIN%%.*} min" | egrep -o '[0-9]{2}:[0-9]{2}') && at "$TEMPO" -f "$0" && exit
# se clicar em CANCEL carrega a tela inicial novamente
main
;;
252|0) exit ;;
esac
}
main
[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)