você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

YAD e os 15 anos da Dicas-L

Colaboração: Julio Cezar Neves

Data de Publicação: 28 de Fevereiro de 2012

Pois é... 15 anos já se passaram, desde que meu querido amigo Rubens Queiroz, vislumbrou que o Linux tinha vindo para ficar resolveu publicar suas dicas por e-mail. Eu, que já usava UNIX há muito tempo e ainda não conhecia o Rubens, achei muito interessante aquela abordagem descompromissada e totalmente desinteressada, à qual nós, usuários de Software proprietário (como o UNIX), não estávamos habituados e pensava com meus botões: o que esse cara ganha com isso? Qual é a finalidade dele empenhar tanto tempo em troca de nada?

Um pouco depois, soube de um curso de C oferecido gratuitamente cujas aulas também eram transmitidas por e-mail. Já sabia C, mas me inscrevi só para poder dizer que o curso era muito ruim. Impossível um curso grátis ser bom. Para minha surpresa, o curso foi ótimo e ao fim da matéria os alunos começaram a desenvolver colaborativamente e por conta própria um editor de textos. Se não me falha a memória este curso era do Prof. Wagner Meira.

Foi assim, e filosoficamente incentivado pelo Djalma Valois, que tomei conhecimento do que é o Software Livre, que atualmente julgo ser a única forma de alguém que tenha cabeça e pense, que reputo ser a grande saída para o mundo da TI.

Agradeço demais aos 3 amigos citados e a todos os outros que também me ajudaram, mas quero ir direto ao assunto, porque estou muito entusiasmado com uma nova aplicação para Bash que se chama YAD (Yet Another Dialoging program) que é um fork do zenity, mas que já o deixou muito para trás.

No yad, usando o diálogo --form, você pode fazer formulários com diversos tipos de campos distintos (ao todo são 16 tipos) mas os exemplos que darei fazem uso intensivo do campo tipo :BTN, que cria um botão e cuja sintaxe é:

—field ROTULO[!DICA]:BTN CMD

Onde:

ROTULO é o texto que estará escrito no botão (pode usar um caractere sublinha (_) antes de uma letra para que ela apareça sublinhada e você possa usar <ALT>+<letra> como atalho);
DICA é um texto opcional que aparecerá quando o ponteiro do mouse estiver sobre o botão (também conhecido com tip);
CMD Comando que será executado quando o botão for clicado.
Em CMD, o YAD dá tratamento especial a 2 caracteres:
Em campos no formato @CMD N:TEXTO, onde N é um número, o conteúdo de TEXTO será enviado para o eNésimo campo;
Em CMD que ocorra uma cadeia do tipo %N, onde N é um número, %N será substituído pelo valor do eNésimo campo;

Agora vá correndo instalar o YAD e faça este exemplo bobinho só para compreender melhor:

$ yad --form --title "Exemplo bobo" --no-buttons \
    --field '' ''                                \
    --field 'Botão _1:BTN' '@echo 1:Escreve 1'   \
    --field 'Botão _2:BTN' '@echo 1:O 1 virou 2'

Como você sabe a barra invertida no fim da linha é para que possamos quebrar a linha. Assim sendo isso seria somente uma linha, que montaria o seguinte diálogo:

Primeiramente digo que é um formulário (--form), em seguida defino o título (--title), que é opcional e passo a descrever os campos (--field) do formulário, da seguinte forma:

--field '' '' Define um campo sem título e vazio (será o nosso mostrador);
--field 'Botão _1:BTN' '@echo 1:Escreve 1' Define um campo do tipo botão (:BTN) que executará (@) o comando echo e mandará sua saída para o primeiro campo (1:)
--field 'Botão _2:BTN' '@echo 1:O 1 virou 2' Idêntico ao campo anterior.

Repare na figura que o 1 e o 2 de Botão 1 e Botão 2 estão sublinhados, isso é devido ao sublinha que está precedendo estes números no código e que transforma o <ALT>+1 e <ALT>+2 em teclas de atalho.

A cada botão clicado, o conteúdo do mostrador é apagado para o outro texto ser escrito. Vamos supor que eu agora, clicando o Botão 1 aparece somente o número 1, porém sem destruir o conteúdo do mostrador e o mesmo aconteça com o Botão 2, isto é, os números clicados serão concatenados no mostrador. Para não estourar o campo, vamos criar um botão Limpa e para terminar um botão Sair. Veja que este último, é um botão e não campo de botões, cuja principal diferença é que o botão pode encerrar a execução, passando o código de retorno ($?) ou executar uma instrução sem encerrar a execução. Veja um que encerra:

$ yad --form --title "Exemplo bobo"                \
    --field '' ''                                  \
    --field 'Botão _1!Uma dica:BTN' '@echo 1:%1\1' \
    --field 'Botão _2:BTN' '@echo 1:%1\2'          \
    --field _Limpar:BTN '@echo 1:'                 \
    --button '_Sair:0'

Na definição do Botão 1, incluí um comentário (!Uma dica) e o comando executado agora é @echo 1:%1\1, que significa mande para o primeiro campo (1:) o conteúdo do primeiro campo (%1) seguido do número 1. A contrabarra (\) é inofensiva e serve somente para separar o %1 do 1, de forma a não ser interpretado como o 11º campo (%11).

Como vimos, para colocar um valor no campo N, fazemos N: e para receber um valor do campo N usamos %N. É verdadeiramente simples e rápido.

Quando clicamos em Limpar, o programa manda um campo vazio para o mostrador, já que o echo só provê o destino (1:) sem nenhum conteúdo. Quando clicamos em Sair, o programa se encerra e o código de retorno ($?) será zero, conforme foi atribuído pelo comando (:0).

Um último uso de botões pode ser feito para acionar um programa externo. Vejamos uma linha de comandos que permite tirar e exibir fotos. Para executá-lo é necessário ter instalado, além do yad, o streamer e o ImageMagick e uma câmera ligada.

$ yad --text "Mostra <b>--button</b> executando programa" \
    --button "PID":"yad --text \
        'O PID deste programa é <big>%d</big>'" \
    --button Encerra:0

Deste último exemplo vimos que se após o dois pontos da definição do botão vier um número entre 0 e 255, esse número será o código de retorno do comando. Caso seja um texto, esse texto será tratado como uma instrução que será executado e se houver um %d, ele será trocado pelo PID corrente.

Gente, eu podia ficar o dia todo falando do yad e sua integração com o Shell, mas o espaço não me permite. Prometo, no entanto, àqueles que se interessaram pela matéria, que publicarei ainda nesta semana, aqui mesmo nas Dicas-L (no Cantinho do Shell) uma calculadora com tudo que tem direito (raiz quadrada, exponenciação, inversão, ...), mostrando a simplicidade do yad integrando-se à simplicidade do Shell, gerando um produto elegante e eficiente.

Rubens, meu amigo, você e as Dicas-L estão de parabéns e podem se sentir com a sensação de missão cumprida (e também comprida, afinal já se vão 15 anos ou 5475 artigos) ;).

Error: No site found with the domain 'moodle.idph.com.br' (Learn more)