Dzen (Português)

Dzen
é "um programa de propósito geral para notificações, menus e barras para o X11. Ele foi feito para ser rápido, leve e programável em qualquer linguagem de programação e se integra bem com gerenciadores de janela como
dwm
, wmii e
xmonad
apesar de que vai funcionar com qualquer gerenciador de janela."
Instalação
Instale
o pacote
dzen2
que inclui suporte a Xft, Xpm e Xinerama.
Uso
O dzen recebe uma string por
pipe
e imprime ela graficamente, esse fato faz com que o dzen seja programável em qualquer linguagem, pois você só precisa passar uma string para ele.
Exemplo:
$ echo "Olá Mundo" | dzen2 -p
Opções
O dzen conta com varias opções para diversas finalidades, são elas:
-fg
Cor de foreground.
-bg
Cor de background.
-fn
Fonte.
-ta
Alinhar o conteúdo da "title window",
l
(eft),
c
(enter),
r
(ight).
-tw
Largura da "title window".
-sa
Alinhar o conteúdo da "slave window", Veja
-ta
.
-l
Linhas das "slave window".
-e
Eventos e ações.
-m
Modo menu.
-u
Atualiza o conteúdo do "title" e "slave" simultaneamante.
-p
Persistente EOF (timeout opcional em segundos).
-x
Posição X.
-y
Posição Y.
-h
Altura de linha (padrão: fontheight + 2 pixels).
-w
Largura do janela.
-v
Infomação da versão.
Atenção
Opção
-u
está descontinuada.
Criando um pop-up com dzen
O seguinte código irá abrir uma janela do dzen no canto superior esquerdo da sua tela com uma largura de 100 pixels, uma altura de linha de 15 pixels, foreground preto e background branco (para fechar o dzen clique nele com o botão direito).
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF'
Veja que a janela está com o número
3
centralizado, agora tente adicionar a opção
-l
nele.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2'
Agora quando você passar o mouse por cima da janela ela irá abrir outra janela abaixo, parecida com um menu, mas diferente de um menu quando você clicar nada irá acontecer, para isso existe a opção
-m
.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m
Agora quando você clicar nos itens do "menu" o dzen irá imprimir esses números no seu terminal. Essa opção é útil para fazer menus que abrem determinados programas com um click.
Mas digamos que você queira centralizar os números e colocar o título para o lado esquerdo, você usará as opções de alinhamento:
-ta
,
-sa
.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m -ta 'l' -sa 'c'
Esse é o funcionamento das opções básico do dzen.
Fonte
O
dzen2
aceita dois tipos descrição de fonte, são eles:
XLFD
e
Xft
. Elas são setadas da seguinte forma no dzen.
X Logical Font Description:
$ uname -r | dzen2 -p -fn '-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*'
Xft
$ uname -r | dzen2 -p -fn 'Sans:size=10'
Veja o
manual do fonts-conf
para detalhes de como setar fontes com
fontconfig
.
Eventos e Ações
O Dzen permite você associar ações a eventos por meio da opção
-e
. Abaixo uma lista das principais ações e eventos do dzen.
Evento
Função
onstart
Executa uma ação logo após o inicio do dzen.
onexit
Executa uma ação antes de fechar o dzen.
button{1..7}
Executa ações com cliques dos botões do mouse.
entertitle
Executa uma ação ao entrar na "title window".
leavetitle
Executa uma ação ao sair da "title window".
enterslave
Executa uma ação ao entrar na "slave window".
leaveslave
Executa uma ação ao sair da "slave window".
Ação
Função
exec:comando1:..:n
Executa todas opções passados.
exit:retval
Fecha o dzen e retorna "retval" (status de saída).
print:str1:..:n
Imprime todas opções para o STDOUT.
collapse
Fecha a "slave window".
uncollapse
Abre a "slave window".
hide
Esconde a "title window".
unhide
Mostra a "title window".
Para uma lista completa de eventos e ações veja
Dzen Wiki#Events and Actions
.
Nota
Se
-e
não for setado o dzen usará a seguinte string de eventos:
-e 'entertitle=uncollapse,grabkeys;
    enterslave=grabkeys;
    leaveslave=collapse,ungrabkeys;
    button1=menuexec;
    button2=togglestick;
    button3=exit:13;
    button4=scrollup;
    button5=scrolldown;
    key_Escape=ungrabkeys,exit'
Sintaxe
A opção
-e
do dzen usa a seguinte sintaxe para a associação de eventos:
-e 'button1=exec:xterm:firefox;entertitle=uncollapse,unhide;button3=exit'
button1=exec:xterm:firefox;
No evento
button1
(clique do botão esquerdo mouse) o dzen irá executar o xterm e firefox. Note que xterm e firefox são opções da ação
exec
.
entertitle=uncollapse,unhide;
No evento
entertitle
(quando o mouse entra na "title window") o dzen irá "uncollapse" a "slave window" e "unhide" a "title window". Veja
Criando um pop-up com dzen
.
button3=exit
No evento
button3
(clique do botão direto do mouse) o dzen irá simplesmente fechar.
Exemplos
Abaixo alguns exemplos de uso para os eventos e funções.
Exemplo 1:
$ echo "Menu \n Item1 \n Item2 \n Item3" | dzen2 -p -l '3' -w '100' -h '30' -m -e 'button1=uncollapse,menuexec;leaveslave=collapse;button3=exit:0'
Exemplo 2:
~/volume.sh
#!/bin/sh

function get_vol() {
        amixer get Master | awk '/Left:/{gsub(/[[:punct:]]/,"");print $5}'
}

while :; do
        get_vol | gdbar -s 'v' -h '150' -sw '10'
        sleep 1
done | dzen2 -p -w '50' -h '200' -e 'button4=exec:amixer set Master 5%+;button5=exec:amixer set Master 5%-;button3=exit:0'
Formatação
O Dzen tem uma formatação especial para sua string. Isso é usado para fazer botões, mudar o background ou foreground de partes especificas da string etc. Essa formatação é feita da seguinte maneira:
^bg(#00FF00) Olá ^bg() ^fg(#00FF00) Mundo ^fg().
Lista dos principais padrões de formatação do Dzen. Para uma lista completa veja o
README.dzen
.
Cores
^fg(cor)
Seta o foreground.
^fg()
Sem argumento, seta o foreground padrão.
^bg(cor)
Seta o background.
^bg()
Sem argumento, seta o background padrão.
Gráfico
^i(path)
Seta um icon especificado pelo path. Formatos suportados: XBM e XPM.
^r(LARGURAxALTURA)
Desenha um retângulo com as dimensões especificadas.
^ro(LARGURAxALTURA)
Desenha um contorno de retângulo.
^c(RAIO)
Desenha um círculo com o raio especificado.
^co(RAIO)
Desenha um contorno de círculo.
Posicionamento
^p(+-X)
Move X pixels para direita (+) ou esquerda (-) no eixo X.
^p(;+-Y)
Move Y pixels para cima (-) ou para baixo (+) no eixo Y.
^p(+-X;+-Y)
Move X pixels e Y pixels nos eixos X e Y.
^pa()
Faz o mesmo que as opções anteriores, mas usando posição absoluta.
Interação
^ca(BOT, CMD) ... ^ca()
Cria áreas clicáveis.
BOT
Será o botão do mouse (1=esquerdo, 2=direito, 3=scroll (clique), 4=scrollup, 5=scrolldown, etc.).
CMD
Será o comando que irá ser executado quando essa área for clicada.
...
Será o texto que aparecerá no dzen.
^ca()
Sem argumentos, indica o fim da área clicável.
Exemplos
Exemplo 1:
~/degrade.sh
#!/bin/sh

for x in {0..9} {a..f}; do
        for y in {0..9} {a..f}; do
                color+="^bg(#FF${x}${y}00) "
        done
done

echo ${color} | dzen2 -p -h '30'
Exemplo 2 (Olho):
$ echo "^ib(1)^c(50)^fg(black)^p(-28)^c(25)^fg()^c(50)^fg(black)^p(-28)^c(25)" | dzen2 -p -h '100' -w '300' -fg '#FFFFFF'
Configuração
O Dzen consegue ler as configurações de fonte e cor do
X resources
. Por exemplo, você pode adicionar as seguintes linhas no seu
~/.Xresources
dzen2.font: Sans:size=10
dzen2.foreground: #FFFFFF
dzen2.background: black
Dicas e truques
Dzen e Conky
O
Conky
pode ser usado para passar a informação para o dzen criar uma barra de "status".
Isso pode ser feito tanto com o Conky do repositório oficial quanto com o
conky-cli
AUR
, uma versão
AUR
mais leve do Conky.
O seguinte exemplo mostra o
load average
em vermelho e a data atual na cor de foreground padrão do dzen.
~/.conkyrc
conky.config = {
      background = false
    , out_to_console = true
    , out_to_x = false
    , update_interval = 1.0
    , total_run_times = 0
    , use_spacer = none
}

conky.text = [[^fg(\#ff0000)${loadavg 1 2 3} ^fg()${time %a %b %d %I:%M%P}]]
Criando um script em
shell script
para o dzen.
~/dzconky
#!/bin/sh

 FG='#aaaaaa'
 BG='#1a1a1a'
 FONT='Sans:size=10'
 conky | dzen2 -p -h '16' -w '600' -ta r -fg $FG -bg $BG -fn $FONT
Agora execute o script
~/dzconky
.
Gadgets
O dzen2 possui alguns gadgets que podem ser usados para fazer uma boa customização. Segue abaixo alguns deles com uma breve explicação e exemplos.
dbar
O dbar recebe um
pipe
de outro comando com um número qualquer e cria uma barra de progresso semi-gráfica com base nesse número, por padrão o valor máximo é
100
. Os valores máximo e mínimo podem ser alterados com as opções
-max
/
-min
repectivamente.
Exemplo de output:
50% [=============            ]
Exemplo de código:
~/teste
#!/bin/sh

amixer get Master | awk '{gsub(/[[:punct:]]/,"",$5)} /Left:/{left=$5} /Right:/{right=$5} END{print left ORS right}' | dbar -max 100 -min 0 -s '|' -l 'Vol'
Veja o
README
do dbar para mais detalhes.
gdbar
O gdbar, assim como o
dbar
, cria uma barra de progresso a partir de um
pipe
, mas aqui ela é totalmente gráfica. Ele tem as mesmas opções do dbar com algumas opções adicionais. Algumas dessas opções são:
-fg
para foreground
-bg
para background
-w
/
-h
para width e height (altura e largura).
Exemplo de código:
~/teste
#!/bin/sh

(
amixer get Master | awk '{gsub(/[[:punct:]]/,"",$5)}
                          /Left:/{left=$5} /Right:/{right=$5}
                          END{print left ORS right}'
) | gdbar -max 100 -min 0 -l 'Vol ' -bg '#777777' -fg '#00ff00' -ss '2' | dzen2 -p -l '1' -w '150' -y '100' -x '100' -ta c -sa c -e 'onstartup=uncollapse;button3=exit'
Veja o
README
do gdbar para mais detalhes.
Nota
gdbar só é útil se estiver sendo usando com o dzen >= 0.7.0.
Outros
Informação sobre outros gadgets podem ser encontrado
aqui
.
Veja também
Site oficial
{
Dzen Wiki
Código-fonte