Jump to content
From ArchWiki

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-cliAUR, 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

Categories:

- Notification (Português)
- Graphical user interfaces (Português)