Duas dicas rápidas para o i3wm

Vou passar aqui duas dicas, simples e bem úteis para o i3wm.

1) Layout atual na polybar ou i3blocks

Alguns ambientes como dwm, bspwm ou o qtile, é possível exibir no painel/barra o layout atual das janelas. No i3 isso é possível com o i3blocks ou a polybar.

Já vi algumas pessoas reclamando de o i3 ficar com uma das bordas diferente, para exibir a indicação do split. Esse script permite deixar todas as bordas da mesma cor (se você quiser, claro), afinal a indicação sempre vai estar visível direto na polybar ou no i3blocks.

Além, obviamente, da polybar ou do i3blocks, o script tem como dependência o pacote jq.

sudo apt install jq
sudo pacman -S jq
sudo dnf install jq

Crie um script com o seguinte conteúdo (o meu eu nomeie como i3layout.sh)

#!/usr/bin/env bash

case $(i3-msg -t get_tree | jq --raw-output 'recurse(.nodes[]; .nodes !=null) | select(.nodes[].focused).layout') in
  splith) echo "[h]" ;;
  splitv) echo "[v]" ;;
  tabbed) echo "[t]" ;;
  stacked) echo "[s]" ;;
esac

Lembrando que o script tem que ter permissão de execução. Para isso

sudo chmod +x i3layout.sh

E, aonde temos os colchetes com uma letra dentro, é o que será exibido no painel. Se não gostar da forma que deixei, troque para o que quiser, texto, ícones etc. As letras indicam, respectivamente, horizontal, vertical, tabbed e stacking.

Se for utilizar na polybar adicione o seguinte modulo ao seu arquivo de configuração

[module/i3layout]
type = custom/script

exec = ~/.config/polybar/i3-layout.sh
interval = 1
format = <label>
format-background = #3F3F3F
format-foreground = #DFAF8F
format-padding = 1

Depois é só adicionar o novo modulo na posição do painel que quiser. No mais é só editar as opções, como as cores, o tempo de intervalo de atualização etc. Simples, fácil e rápido.

Se estiver usando o i3blocks, crie o mesmo script e coloque dentro da sua pasta do i3blocks (normalmente em ~/.config/i3blocks). E adicione dentro do seu config o seguinte conteúdo

[i3layout]
color=#DCDCDC
command=~/.config/i3blocks/i3layout.sh
interval=1

Como no modulo da polybar, modifique o que quiser, cor, intervalo etc.

Para quem estiver com dúvidas de como usar o i3blocks, veja o seguinte tópico.

2) Toggle gaps

Não é mais necessário usar a opção mode para isso. Na versão 4.22 temos novas opções na documentação que permitem essa funcionalidade com apenas um comando.

bindsym $mod+shift+equal gaps inner all toggle 6, gaps outer all toggle 2

No exemplo acima é o meu config. Para seu uso, apenas troque os valores dos inner e outer gaps e o atalho para os de sua preferência.

Antes da fusão do i3wm com o i3gaps, eu via muita gente (eu também cheguei a usar assim), essa função da seguinte forma

set $mode_gaps Toggle gaps: (+) on (-) off
bindsym $mod+g mode "toggle_gaps"
mode "toggle_gaps" {
  bindsym KP_Add mode "default", gaps inner all set 6, gaps outer all set 2
    bindsym KP_Subtract mode "default", gaps inner all set 0, gaps outer all set 0
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

Basicamente, é essa função. Ela permite “ativar” um novo modo através de um atalho. Se reparar na função que postei acima, ao usar o atalho super+g eu entro no “modo gaps” e dentro dele eu posso usar as teclas mais (+) ou menos (-) para exibir ou esconder os gaps. Para sair uso a tecla esc. Essa função de exibir ou esconder os gaps com as teclas mais/menos só funciona dentro dessa função/modo. É como funciona a opção padrão de resize do i3wm, por exemplo.

Edit: esqueci de colocar imagens. Seguem duas da polybar (no i3blocks fica igual). Repare que na após a última área de trabalha aberta (a número 8), tem o ícone indicando qual é o layout atual.


3 curtidas

Mais uma diquinha rápida. Agora para exibir o número de janelas no scratchpad que você tem. Siga o mesmo processo citado acima para criar um modulo customizado na polybar ou para o i3blocks. Use o seguinte script:

#!/usr/bin/env bash

count=$(i3-msg -r -t get_tree |
  jq -r 'recurse(.nodes[]) | 
    first(select(.name=="__i3_scratch")) | 
    .floating_nodes | length')

if [[ "$count" -ge 1 ]]; then
  echo "  $count"
else
  echo ""
fi

Um exemplo de como você pode criar o modulo para a polybar:

[module/scratchpad]
type = custom/script

exec = $HOME/.config/polybar/scratchpad.sh
interval = 1

click-left = i3-msg scratchpad show    # abre a primeira janela do scratchpad

label-font = 0
format = <label>
format-underline = #3F3F3F
label =   %output%
label-foreground = #72D5A3

O resultado será como no print abaixo. Repare que ao lado das áreas de trabalho e do i3-layout tem a indicação da existência de uma janela no scratchpad.

Recomendo a quem não conhece, dar mais atenção aos scratchpads do i3. Em algumas situações eles podem ser bem úteis.

Falando de forma bem resumida e meio tosca, o scratchpad é como se fosse uma área de trabalho invisível. Você esconde uma janela (ela não será exibida em nenhuma área de trabalho) e só aparece quando você chama ela de volta.

Documentação oficial sobre o scratchpad

P.S: adaptei esse ideia de um modulo da waybar para o sway. É mais completo que esse aqui, só que ele funciona apenas no wayland (como não uso sway e nem wayland), adaptei a ideia para a polybar/i3blocks.

2 curtidas