terça-feira, 31 de março de 2026

Zoxide e fzf no bash para incrementar o uso do Terminal

zoxide e o fzf são programas externos que são usados junto do shell (terminal) para acelerar a entrada de pastas e listar possibilidades de entradas disponíveis no histórico. Combinando os dois é possível achar comandos e "entradas cd" (de pastas) para deixar o uso do terminal mais agradável. O problema é que implementar isso acaba deixando o usuário preguiçoso mas vamos lá assim mesmo. Isso pode ser feito também no zsh mas vou mostrar primeiro como fazer no bash.

No Debian e agregados:

sudo apt install fzf zoxide

Abra o arquivo ~/.bashrc:

nano ~/.bashrc

Cole dentro, lá no final do arquivo:

eval "$(zoxide init bash)"

Salve e feche o arquivo. Recarregue o bash:

source ~/.bashrc


Agora todas as pastas em que você entrar no terminal usando bash serão guardadas num banco de dados e dota o seu terminal de um "acelerador". Digamos que você já tenha entrado na pasta .config; basta você digitar sem as aspas "z .config" (nem precisa ser o .config completo, .conf já serve já que é pasta e não arquivo) e o prompt vai aparecer o .config mais novo que você entrou. Se digitar zi config  você vai habilitar o modo de procura caso haja mais de uma entrada disponível:

Linux: Usando o zoxide e fzf no bash do Terminal

 Basta então escolher na listagem qual o que você quer usando as setas de direção. E o interessante é que você não precisa digitar o nome da pasta completo, basta digitar "z pasta ou parte do nome" e o zoxide vai direto na última entrada. A única necessidade é que você já tenha entrado na pasta individualmente via cd anteriormente. E, na listagem, ainda mostra as eventuais subpastas presentes nas entradas como ilustra a imagem acima.

Veja os exemplos:

  • z share = Vai entrar na pasta mas recente com a entrada share, por exemplo, /usr/local/share;
  • zi share = vai listar as entradas do histórico do bash que possuem "share" e pode ser escolhida a entrada com as setas de direção;
  • z local = Mesmo que a pasta exista (por exemplo, /usr/local) se você não tiver entrado nela anteriormente via cd (cd /usr/local) não vai achar nada. O zoxide não completa caminhos sozinho e sim se baseia no histórico do shell;

  • zi con = Vai listar as pastas já visitadas que tenham "con", como no exemplo abaixo.

  • Linux: Usando o zoxide e fzf no bash do Terminal

     Lembrando, a pasta TEM que estar no histórico. Se você tiver entrado na /usr/local ou /usr/local/share (atenção ao negrito de ambas) o comando z local ou z share vai achar as entradas MAS NÃO VAI entrar em z usr pois você não entrou nenhuma vez na pasta /usr individualmente.

    Depois de instalado o programa precisa "aprender" as pastas que você entra pois ele "linka" ao ~/.bash_history. Para saber o que o zoxide já "aprendeu", abra o terminal e digite:

    zoxide query -l

    Devem aparecer algumas entradas de comandos de pastas que você já tenha feito. Se estiver em branco é necessário "ensinar" para já "pegar" o que você já tem. Para acelerar o aprendizado, no terminal:

    cat ~/.bash_history \
    | sed 's/^: [0-9]*:[0-9]*;//' \
    | grep -E '^cd ' \
    | sed 's/^cd //' \
    | while read -r dir; do
        dir="${dir/#\~/$HOME}"
        [ -d "$dir" ] && zoxide add "$dir"
    done

    Pronto, o zoxide já está "esperto" para listar o que está no seu histórico. Se precisar apagar o banco de dados:

    rm -rf ~/.local/share/zoxide/db.zo

    e refaça o penúltimo comando mostrado aqui para "ensinar" o seu histórico de pastas ao zoxide.

    Só pra deixar claro, o "z" é o substituto do "cd", é como um alias para o comando "cd"; o "z" mais o resto faz o zoxide saber que você está querendo entrar em pastas e esse "z" é o zoxide que determina; poderia ser configurado o j, p ou qualquer outra letra mas vamos ficar no z mesmo.

    E lembrando:
    • z pasta ou nome parcial: entra na mais recente;
    • zi pasta ou nome parcial: mostra as pastas acessadas numa lista e que pode ser escolhida a entrada desejada via setas do teclado.

    segunda-feira, 30 de março de 2026

    As diferencas entre o clipboard comum e a selecao ativa

    Fiquei um bom tempo tentando dar uma descrição "mais ou menos" para um comportamento interessante para o "selection-based data transfer" que é a opção do sistema (X11) de copiar dados para uma "área de transferência primária" que é mais volátil do que a área de transferência normal ou clipboard. Volátil porque essa área é sobrescrita assim que um novo conteúdo é inserido, não é gerenciável em camadas como clipboard convencional. Então o tal "primary" (que vou chamar de seleção ativa) funciona assim:
    • Copia simplesmente por seleção sem usar CTRL+C ou botão direito na seleção/Copiar-Colar;
    • Conteúdo único: os dados são substituídos se feita outra seleção;
    • O conteúdo some se o programa que "detém" os dados é fechado;
    • Os dados dessa seleção ativa ficam disponíveis MAS o conteúdo copiado pro clipboard não vai para esse espaço primário;
    • O conteúdo da seleção ativa está acessível para colar usando o botão do meio do mouse.

    Você pode fazer o teste aí, selecione parte deste texto (apenas selecione), abra um bloco de notas, crie um arquivo de texto novo e clique com o botão do meio do mouse nesse documento aberto e você verá os dados aparecendo. Agora copie outra parte desse texto, dessa vez selecione e copie na base do CTRL+C e cole com CTRL+V: o segundo texto será copiado MAS o texto selecionado via seleção ativa ainda estará no "buffer" pois o clipboard não substitui essa seleção direta apesar dessa seleção ser listada no clipboard. E se você der mais uma selecionada então o conteúdo primário anterior será sobrescrito pelo que selecionou agora. E fechando o navegador esses dados da seleção primária somem desse espaço.

    Quem usa algum sistema de gerenciamento de clipboard pode ver uma listagem do que está copiado e como foi copiado. No Clipman aparece assim:

    Linux: As diferencas entre o clipboard comum e a selecao ativa
    Veja que há um ícone de mouse (seleção primária) e outro de prancheta (clipboard) e sempre só haverá um ícone de mouse porque essa cópia é única, o conteúdo é substituído assim que é feita outra seleção a não ser que você use CTRL+C.

    Esse tipo de recurso é bem útil para quando se usa o Terminal e curiosamente isso não existe no Windows ou MacOS, pelo menos não diretamente como no Linux. No Linux/X11 a seleção tem dados compartilháveis automaticamente; já no Windows/macOS a seleção é só visual e a cópia precisa ser uma ação explícita (via CTRL+C e CTRL+V) e, inclusive, o XTerm só trabalha com esse espaço primário, não tem atalhos pelo teclado para copiar ou colar.

    sábado, 28 de março de 2026

    Habilitando o "modo Quake" no XFCE4 Terminal

    terminal é algo que muitos usuários detestam usar mas, basicamente, é como saber andar de bike: não é necessário saber mas altamente recomendável fazer o básico. Cedo ou tarde o terminal acaba tendo que ser usado para eventuais erros de sistema ou mesmo pequenas configurações que podem estar indisponíveis graficamente.

    E pensando nisso, há vários deles além dos já presentes no ambiente gráfico escolhido, como o Konsole no Plasma, o Gnome Terminal no Gnome e o XFCE4-Terminal no XFCE. Mas há outros como o Tilix, o Guake e o Yakuake onde neles há uma "nobre" opção chamada "efeito Quake" ou menu drop-down.

    Esse "efeito" vem do jogo Quake onde os jogadores, para conversarem via chat ou outras coisas, apertam uma tecla e uma tela "desce" durante o jogo, o jogador digita o que precisa e apertando de novo uma tecla ou simplesmente voltando ao jogo  essa tela "sobe" e some. Esse recurso está presente em muitos jogos e dá um charme todo especial (e funcional) aos terminais que você está usando na sua máquina. Aqui vou falar desse recurso no XFCE4 Terminal.

    Basta usar o comando:

    xfce4-terminal --drop-down

    que o Xfce4 Terminal vai abrir em modo drop-down; terminado o uso, se clicar fora do terminal ele "some" mas dá pra fazer isso via atalho do teclado. No XFCE é fácil, abra o Configurações, Teclado, aba Atalhos para Aplicativos.

    Linux: Ativando o modo Quake no XFCE4-Terminal
    Clique em Adicionar e cole o comando mostrado acima, dê OK e logo depois defina uma tecla que não esteja em uso, como F12. Dê OK em tudo e pronto. Apertando F12 o terminal aparece.

    Linux: Ativando o modo Quake no XFCE4-Terminal
    Apertando F12 de novo OU clicando fora do terminal ele some. Você pode configurar opções separadas entre o modo Quake e o modo normal, como transparências, tamanho, foco e tal, só lembre de fazer isso estando no modo Quake para não afetar o modo normal.

    quinta-feira, 26 de março de 2026

    Copiar Para e Mover Para no menu de contexto do Nautilus e Dolphin

    Nessa dica eu mostrei como implementar no Thunar as opções de menu de contexto Copiar Para e Mover Para e assim economizar uns cliques nessas ações corriqueiras de trabalhar com arquivos. Agora vamos ver isso no Nautilus e no Dolphin cujas configurações já existem mas ficam meio escondidas.

    Nautilus

    O Nautilus anda vacilando com uma política de "vamos tirar sem perguntar nada" e com isso vemos extensões legais como o Nautilus Image Converter simplesmente sair dos repositórios (ou não disponibilizadas) e outras que deveriam já existir por padrão e a 'copiar/mover para' deveria ser uma delas. Para ter acesso à opção veja se o seu sistema tem os pacotes libnautilus-extension4 e python3-nautilus (nome do pacote no Debian). Se não o tiver:

    sudo apt install libnautilus-extension4
    sudo apt install python3-nautilus

    Reinicie a sessão e as opções deverão estar disponíveis no botão direito do mouse:

    Linux: Copiar Para e Mover Para no menu de contexto do Nautilus e Dolphin
    Dolphin

    No Dolphin há a necessidade do pacote dolphin-plugins. Se não o possuir:

    sudo apt install dolphin-plugins

    No Dolphin você pode baixar mais opções de menu de contexto (que se chama Service Menu) indo nos "3 pontinhos" do lado superior esquerdo, Configurar/Configurar Dolphin, Menu de Contexto; a opção Comandos 'Copiar e Mover para' deverá estar disponível (marque-a e clique em Aplicar).

    Linux: Copiar Para e Mover Para no menu de contexto do Nautilus e Dolphin
    Se não estiver, nessa janela clique em Baixar Novos Serviços e procure por lá, há bastante coisa para complementar o uso do Dolphin.
    Uma vez instalados, as opções escolhidas estarão disponíveis.

    Linux: Copiar Para e Mover Para no menu de contexto do Nautilus e Dolphin

    "Keep It simple" não significa ter as coisas funcionais adequadamente...

     


     

     

    quarta-feira, 25 de março de 2026

    Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto

     Aqui vou mostrar como criar as opções de Copiar para e Mover para no menu de contexto do mouse, que existe no Nautilus e no Dolphin e que também deveria ter no Thunar.

    Copiar para:
    Abra o terminal e crie o arquivo:

    sudo nano /usr/local/bin/thunar-copiar-para.sh

    Coloque dentro:

    #!/bin/bash
    
    # Escolher destino
    destino=$(zenity --file-selection --directory --title="Escolha a pasta de destino")
    [ -z "$destino" ] && exit 0
    
    # Perguntar sobre sobrescrever
    zenity --question --text="Deseja sobrescrever arquivos existentes?"
    sobrescrever=$?
    
    # Monta opção do rsync
    if [ $sobrescrever -eq 0 ]; then
        OPTS="--ignore-existing"
    else
        OPTS=""
    fi
    
    # Lista total de arquivos para progresso mais preciso
    total=$(printf "%s\n" "$@" | wc -l)
    count=0
    
    (
    for item in "$@"; do
        count=$((count+1))
    
        echo "# Copiando: $(basename "$item") ($count de $total)"
    
        rsync -a --info=progress2 $OPTS "$item" "$destino" 2>/dev/null
    
        echo $((count * 100 / total))
    done
    ) | zenity --progress \
               --title="Copiando arquivos" \
               --percentage=0 \
               --auto-close \
               --width=400
    
    zenity --info --text="Cópia concluída!"

    Salve com CTRL+O e feche com CTRL+X. Depois:

    sudo chmod +x /usr/local/bin/thunar-copiar-para.sh

    Mover para:
    Abra o terminal e crie o arquivo:

    sudo nano /usr/local/bin/thunar-mover-para.sh

    Cole dentro:

    #!/bin/bash
    
    destino=$(zenity --file-selection --directory --title="Escolha a pasta de destino")
    [ -z "$destino" ] && exit 0
    
    zenity --question --text="Deseja sobrescrever arquivos existentes?"
    sobrescrever=$?
    
    if [ $sobrescrever -eq 0 ]; then
        OPTS="--ignore-existing"
    else
        OPTS=""
    fi
    
    total=$(printf "%s\n" "$@" | wc -l)
    count=0
    
    (
    for item in "$@"; do
        count=$((count+1))
    
        echo "# Movendo: $(basename "$item") ($count de $total)"
    
        rsync -a --remove-source-files --info=progress2 $OPTS "$item" "$destino" 2>/dev/null
    
        # Remove diretórios vazios após mover
        [ -d "$item" ] && find "$item" -type d -empty -delete
    
        echo $((count * 100 / total))
    done
    ) | zenity --progress \
               --title="Movendo arquivos" \
               --percentage=0 \
               --auto-close \
               --width=400
    
    zenity --info --text="Movimentação concluída!"

    Salve com CTRL+O e feche com CTRL+X. Depois:

    sudo chmod +x /usr/local/bin/thunar-mover-para.sh

    Abra o Thunar e vá em Editar/Configurar Ações Personalizadas. Na janela que aparecer, clique em + e complete conforme abaixo.

    Copiar para:
    • Nome: Copiar para...
    • Descrição: Ação de copiar pastas e arquivos para determinada pasta ou lugar
    • Comando: /usr/local/bin/thunar-copiar-para.sh %F

    Linux: Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto
    Na aba Condições Para Aparecer, marque tudo.

    Linux: Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto
    Mover para:
    Crie outra entrada agora como Mover para... e repita os procedimentos, mudando a linha de comando (e a descrição) para:

    sudo nano /usr/local/bin/thunar-mover-para.sh

    OK em tudo e fecha as janelas. Para usar o menu de contexto, abra o Thunar e escolha um ou mais arquivos e pastas (podem ser misturados), escolha a opção Copiar para... ou Mover para... e selecione a pasta ou local de destino.

    Linux: Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto
    E aguarde a cópia/movimentação do que foi selecionado. Há uma barra de progresso por item e pergunta se é para sobrescrever se algo já existir.

    Linux: Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto
    Mais simples do que ganhar da "selessão barasileira de futibóu", hehehe...

    Usando o ble.sh (Bash Line Editor) no lugar do bash completion

     BASH é um excelente interpretador de comandos mas deixa um pouco a desejar no uso diário se for comparado com o ZSH. Aqui vou mostrar a instalação e uso do "ble.sh" para o bash e que tem mais funcionalidades que o bash completion disponível nos repositórios.

    O ble.sh tenta reproduzir as funções mais modernas do zsh, como completar comandos, sugerir comandos com parte já digitada e até a colorir conteúdos como pastas e arquivos mas o achei limitado, pois o autosuggestions dele de comandos já digitados é apenas (pelo que eu experimentei) para o comando mais próximo do histórico. Por exemplo, se você já tiver digitado e está no histórico do bash:

    • sudo apt install gawk
    • sudo apt autoremove
    • sudo apt remove ri-li

    ao digitar "sudo apt", em vez de poder navegar com as setas para acessar as 3 opções mostradas (install gawk, autoremove e remove ri-li) ele "vai" na entrada mais nova (de baixo pra cima) e ignora as outras. O zsh consegue via "meio comando" (como no nosso exemplo) navegar pelas opções já digitadas anteriormente através das setas.

    Mas enfim, para experimentar, faça assim:

    git clone https://github.com/akinomyoga/ble.sh ~/.ble.sh
    sudo apt install gawk
    cd ~/.ble.sh
    make

    Depois:

    nano ~/.bashrc

    Coloque no final do arquivo:

    # ble.sh
    if [ -f ~/.ble.sh/out/ble.sh ]; then
      source ~/.ble.sh/out/ble.sh
    fi

    E finalmente:

    source ~/.bashrc

    O bash fica mais "alegrinho" e cheio de fru-fru mas, sinceramente, ainda prefiro o zsh e os "3 milhões" de plugins que ele tem.

    Pelos testes que eu fiz o bash/ble.sh tem mesmo essa limitação de sugerir comandos "meio digitados" mas já digitados anteriormente. Se alguém descobrir uma forma de fazer isso no ble.sh ou mesmo no bash aos moldes do zsh por favor coloque nos comentários.

    Vou explicar de novo esse lance de auto-complete e auto-suggestions. O auto-complete funciona, você digita o comando pela metade e as opções de comando ficam disponíveis. Por exemplo, digitando apenas "apt" e apertando TAB aparecerão os complementos ao comando disponíveis: 

    apt                   apt-extracttemplates  apt-mark            
    apt-cache             apt-ftparchive        apt-sortpkgs        
    apt-cdrom             apt-get                                   
    apt-config            apt-listchanges   

    Já o auto-suggestions quando, se você já tiver digitado e estiver no histórico:

    sudo apt install gawk
    sudo apt autoremove
    sudo apt remove ri-li

    ao digitar apenas sudo apt TUDO em termos de comandos que estejam no histórico do bash (no caso, no zsh) DEPOIS do sudo apt podem ser acessados via setas do teclado. No zsh isso funciona assim; no bash só mostra o comando mais novo e ignora o resto.

    segunda-feira, 23 de março de 2026

    Vale a pena ter mais de uma interface grafica no seu Linux?

    Nos meus anos de uso de Linux (sim, eu não uso só por um dia e depois largo) já usei todo tipo de interface gráfica (ou ambiente de desktop) e de versões de Linux, de principais até as derivadas e hoje em dia prefiro usar uma principal customizada com o que eu preciso. Não adianta pegar uma "baseada" do tipo "podrão da Central" (termo no RJ para aquele sanduba com tudo dentro) onde o "desenvolvedor" enfia nessa "distribuição" tudo o que ele acha que o usuário vai precisar no dia a dia e tira desse mesmo usuário o eventual e valioso aprendizado para implementar um desktop mais produtivo.

    Muitos usuários usam a máquina do jeito que recebem, acham um saco ou mesmo perda de tempo deixar o sistema funcional para as suas necessidades. Pra que perder tempo em fóruns e vídeos na internet que pedem Pix de 10 pilas e ensinam como configurar as coisas se fumar e beber - que são coisas dispensáveis - são prazeres temporários e mais caras do que conhecimento? Cadê a curiosidade, a vontade de experimentar, deixar as coisas do seu jeito? Essas coisas devem estar nas telas do Tigrinho...

    Aqui vou falar dos prós e contras de se usar mais de uma interface gráfica no seu desktop Linux.

    Alguns prós

    • Aumenta o leque de aprendizado e experiência de uso;
    • Se um ambiente morrer tem outras opções;
    • Integração de aplicativos ou recursos que funcionam melhor em um ambiente gráfico do que em outro;
    • Se ficar de saco cheio de uma interface (e acredite, vai ficar) dá pra trocar por outra sem precisar instalar/desinstalar.

    Alguns contras
    • Aumenta o espaço em disco utilizado;
    • Aumenta o tamanho da instalação final e dos eventuais updates de pacotes ao longo do uso;
    • Os menus de aplicativos acabam ficando mais poluídos pelos outros aplicativos das outras interfaces gráficas;
    • Bibliotecas redundantes (no caso, GTK e QT);
    • Serviços que se iniciam e que não pertencem ao ambiente em uso, como dois serviços de notificação ou dois keyrings de senhas;
    • A aparência entre aplicativos podem ficar "feia" se rodarem no ambiente ao qual não "pertencem".

    A imagem acima mostra como fica a sessão Sistema tendo GnomePlasma 6 e XFCE na mesma máquina, onde é mostrado ícones de programas das 3 interfaces gráficas. Algumas não são mostradas pois alguns arquivos .desktop tem a variável OnlyShowIn=XFCE. Por exemplo, o Cairo-Dock:

    [Desktop Entry]
    Type=Application
    Exec=cairo-dock
    Icon=cairo-dock
    Terminal=false
    Name=Cairo-Dock
    Comment=A light and eye-candy dock and desklets for your desktop.
    Comment[pt_BR]=Um dock de aplicativos bonito e leve com desklets para o seu ambiente de trabalho.
    Categories=System;
    OnlyShowIn=XFCE;
    Hidden=false

    Esse parâmetro faz com que o ícone do Cairo-Dock só apareça no XFCE e isso é usado nos .desktops para permitir ou não que programas de um ambiente "apareçam" em outro. Isso não é padrão de ser feito, eu mesmo coloquei esse parâmetro para que o Cairo-Dock apareça só no XFCE mesmo porque estou satisfeito com o Dash to Dock do Gnome e com o painel de ícones do Plasma 6. E atenção, o ícone pode não aparecer MAS o programa ainda estará disponível para ser aberto.

    Tirando os "contras" não há problemas no uso de mais de uma interface gráfica, o que gere isso é basicamente a necessidade pessoal. Os desktops podem ser configurados de modo que os ícones de programas "oficiais" do ambiente fiquem mais acessíveis.

    Por exemplo, a extensão Dash To Dock permite que o usuário coloque os programas que mais usa no dock de ícones que fica disponível o tempo todo e, em modo overview, juntar na primeira janela de ícones o resto dos programas que usa "menos vezes" e o resto ele "joga pra lá" (nas outras telas do overview).

    No Plasma, a mesma coisa. O dock de ícones recebe os programas mais utilizados e o Kicker (o menu de aplicativos) tem a possibilidade de se colocar os outros favoritos na listagem.

    E no XFCE - que pode ser visto na primeira imagem, o Cairo-Dock possui os ícones dos programas mais usados, ficando o resto no menu de aplicativos e que podem ser chamados pelo U-Launcher (no meu caso).

    Só quando se usa ambientes de desktop cujos menus de ícones são mais "crús" (como o do XFCE) é que o caldo pode engrossar. A combinação de interfaces como MateCinnamon e XFCE podem dar mais trabalho de serem configuradas mas, no final, o efeito é o mesmo, cada ambiente configurado com o que mais se usa sem interferir no funcionamento do outro ambiente.

    Até pode dar trabalho mas vale a pena.