shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Cores no dialog


From: Julio C. Neves
Subject: Re: [shell-script] Cores no dialog
Date: Wed, 27 Nov 2013 14:33:10 +0000

Tirado do Livro Bombando o Shell, que conta absolutamente tudo sobre Dialog, Zenity, YAD e Kdialog.

1ª Forma: Mudando as cores de todo o ambiente

Opção --create-rc

Use esta opção para personalizar a apresentação do seu Dialog. Já que é possível alterar todas as cores padrão de todas as caixas de diálogo.

Caso você queira customizar o seu Dialog, execute o seguinte comando:

$ [ -f ~/.dialogrc ] || dialog --create-rc ~/.dialogrc


Ou seja, testei se existe no meu diretório home (~) um arquivo chamado .dialogrc. Caso negativo (||) executo o comando do Dialog que o cria.

Agora, se você der uma olhada neste arquivo, verá que logo após os comentários iniciais existem umas 6 linhas que modificam atributos de parâmetros diversos.

Após estas linhas, aparecem os componentes do Dialog e suas caixas cujas cores podem ser alteradas em cada uma de suas propriedades formadoras, como textos, borda, setas, botões, fundo da tela entre outros. Veja a descrição destas propriedades, resumidas no quadro a seguir.

As cores que podemos usar, porque são as únicas válidas são: BLACK, BLUE, CYAN, GREEN, MAGENTA, RED, WHITE, YELLOW.

Cada uma destas propriedades aceita 3 parâmetros de cor:

Este último aceita somente ON e OFF e só tem sentido quando nos referimos a alguma propriedade que envolva o foreground.

Então vou dar exemplo de cores em duas propriedades

# Form text color

form_text_color = (WHITE,CYAN,ON)

# Active form text color

form_active_text_color = (WHITE,CYAN,OFF)

Em ambos exemplos a cor de fundo é ciano, porém no primeiro (form_text_color) as letras são brancas, enquanto no segundo (form_active_text_color), as letras são cinzas. Isso se deve ao fato que na primeira o WHITE está com ênfase (ON) e na segunda não (OFF). O YELLOW com ênfase é amarelo, sem ênfase é marrom.

Agora que você já montou um arquivo de configurações padrão, porém deseja ter um diferente para atender a alguma especificação de sistema, basta usar o padrão como base, editando-o e salvando-o com outro nome, digamos, DiaConf1.fmt. Para torná-lo padrão nos programas que o usarão, basta você inserir no início do código de cada um a seguinte linha:

DIALOGRC=/caminho/do/DiaConf1.fmt

Outra forma de fazer isso é exportando a variável $DIALOGRC a partir do seu Shell primário, da seguinte forma:

export DIALOGRC=/caminho/do/DiaConf1.fmt

A variável $DIALOGRC é a que contém o caminho do arquivo de especificações que será usado, e que tem precedência sobre o .dialogrc. Uma vez entendido este conceito, podemos inferir que o mesmo procedimento pode ser usado para criarmos diversos arquivo adaptados às nossas necessidades.


2ª Forma: Mudando as cores em um diálogo (Não vou colar toda a explicação. Vou colar somente um exemplo e seu detalhamento)

$ cat checklist3.dlg

#!/bin/bash

## Devolve os arquivos de todos os usuários

#+ escolhidos com o uso do diálogo --checklist


Usus=$(dialog --stdout --separate-output \

--separator " -o -user " --checklist \

"Escolha os usuários dos quais\n \

listaremos os arquivos" 18 33 15 \

$(cut -f1 -d: /etc/passwd | sort |

xargs -i echo {} "^M" OFF)) || {

dialog --infobox "Você abandonou" 0 0

exit 1

}

## O diálogo a seguir apresenta a cadeia

#+ gerada somente para efeito didático

dialog --ok-label Beleza --colors --msgbox \

" Linha gerada:\n$Usus\n \

Viu que ficou um \Z1-o user\Zn a mais?" 0 0


## Agora vamos tirar o último -o -user

#+ que ficou a mais no fim de $Usus

Usus=$(sed 's/ -o -user $//' <<< "$Usus")


## Vamos exibi-los. afinal o script é para isso!

dialog --title "Arquivos dos usuários escolhidos" \

--msgbox "$(find . -type f -user $Usus |

xargs -n1 basename)" 15 0

Nesse script aparece logo o uso de: --separator " -o -user ". Veja que --separator (--output-separator também é válido) é uma opção genérica que indica a cadeia que irá separar cada uma das opções deste diálogo. Você notou que eu disse cadeia e não caractere, como é normal? Aproveitamos essa facilidade para colocar a cadeia ' -user o ' entre os usuários escolhidos (observação: O Zenity também incorporou esta facilidade).

Em seguida o cut pegou o 1º campo de cada registro de /etc/passwd (user name), mandando-os para o comando sort, que passou a saída classificada para o xargs. Este comando, quando usado com a opção -i, executa a instrução que o segue (no caso o echo) substituindo o par de chaves ({}) pelos dados recebidos pela entrada primária, representada pelo pipe (|). Dessa forma, foi montada uma linha com o nome do usuário, com um carriage return que aparece no código como um ^M - e se consegue teclando <CTRL>+V e depois dando um <ENTER> - e a palavra OFF.

Como a sintaxe do --checklist obriga um campo de comentário e neste exemplo não temos necessidade dele, o carriage return foi usado, porque o Dialog o considera um campo e ele não aparece na caixa (tentei com 2 aspas, com 2 apóstrofos, com um espaço, com <TAB>, … O Dialog sempre me voltava um erro, onde dizia faltar um parâmetro). A função do OFF que vem a seguir, é para que cada uma das linhas da caixa venha seu status inicial como "desativado".

O diálogo a seguir é meramente didático e serve para mostrar o texto formado pela caixa anterior. Nele, no entanto é interessante destacar o uso da opção genérica --colors e das cadeias \Z1 e \Zn. Esta opção genérica informa que nos textos desse diálogo, tudo que vier seguindo um \Z é um caracter de formatação. Assim sendo, \Z1 passa a cor do texto para vermelho e \Zn restitui a cor padrão. Mas não esquente a cabeça com isso por enquanto que mais a frente isso estará bem detalhado.





Abcs,
Julio
A partir de 02/12 estarei ministrando um curso completo de Shell no Rio de Janeiro.
@juliobash
Facebook? Neither that the cow cough...
;)




Em 27 de novembro de 2013 14:06, Cléoson Barreto <address@hidden> escreveu:
 

Olá!

     No dialog não sei se tem como. No yad dá pra fazer assim:

$ cat /tmp/verde.log
VERDE

$ yad --title "Mostrando cores" --text-info --fore=green --filename=/tmp/verde.log




Em 27 de novembro de 2013 10:28, nerobarrabas <address@hidden> escreveu:
 

Mestres,

$ echo -e " \033[0;32m Verde  \033[0m" > /tmp/verde.log

$ cat /tmp/verde.log

 Verde

$ dialog --backtitle "Mostrando cores" --title "Mostrando cores" --infobox "`cat /tmp/verde.log`" 15 85

Ao invés de retornar Verde na caixa de diálogo, retorna:

 ^[[0;32m Verde  ^[[0m

Teriam idéia de como fazer prá retornar Verde?

Grato desde já.

Nero

 




--
[]'s
Cléoson.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]