blog-post

tmux + byobu: otimizando seu fluxo de trabalho com estilo

author image
Índice

Aqui começa a aventura de melhorar seu fluxo de trabalho no terminal

Introdução

  • Tmux é o que você precisa e não sabia.
  • Confie em mim.

O que é tmux?

Multiplexador de terminal, ou seja, cada painel é um tty. É um programa excelente mas exige o desenvolvimento de scripts ou programas para customizar e melhorar algumas coisas da interface!

Seria legal se houvesse algo já pronto sem ter de complicar muito a instalação… o que é isso aqui!?

O que é byobu?

Conjunto de scripts voltados para serem usados com o tmux/screen (tem no repositório do Debian )! Era exatamente o que eu precisava! 😄🎉

Comandos

Legenda dos comandos

ComandoDescrição
CCtrl
MAlt
SShift
RETEnter
SPCEspaço
-Separador, quando tem que segurar C, M ou S antes

Lista de comandos base

Esta lista de comandos baseia-se na configuração que é compartilhada a seguir!

O comando de prefixo precisa ser executado antes de utilizar qualquer comando (por isso se chama prefixo)

ComandoDescrição
C-aComando de prefixo
F12Comando de prefixo alternativo

Lembrando que precisa executar o prefixo antes! 😉

ComandoDescrição
?Mostra todas as teclas de atalho
dDesanexa a seção do byobu/tmux
rRecarrega arquivo de configuração sem sair do byobu/tmux

Manipulação de janelas

Lembrando que precisa executar o prefixo antes! 😉

ComandoDescrição
-Divide a janela horizontalmente, acrescenta painel
=Divide a janela verticalmente, acrescenta painel
.Escolher para qual índice não ocupado a janela irá
nRenomeia a janela atual
NRenomeia a seção atual
wCria nova janela

Estes comandos não precisam de prefixo! 😮

ComandoDescrição
S-, S-Ir para janela seguinte ou janela anterior
M-S-, M-S-Mover janela para posição da janela seguinte ou da janela anterior

Manipulação de painéis

Lembrando que precisa executar o prefixo antes! 😉

ComandoDescrição
, , , Escolha de painéis da janela
h, j, k, lEscolha de painéis da janela, estilo vi
!Retira o painel atual para criar nova janela
yLiga/desliga a escrita simultânea em todos os painéis da mesma janela
C-, C-, C-, C-Redimensiona painel
C-h, C-j, C-k, C-lRedimensiona painel, estilo vi
M-, M-, M-, M-Redimensiona painel multiplicando por 5
M-h, M-j, M-k, M-lRedimensiona painel multiplicando por 5, estilo vi

Estes comandos não precisam do prefixo! 😮

ComandoDescrição
M-, M-, M-, M-Escolha de painéis da janela
M-h, M-j, M-k, M-lEscolha de painéis da janela, estilo vi
PageUp, PageDownSubir ou descer no buffer do painel
S-F8Reorganiza a divisão/distribuição dos painéis
S-F11Dá zoom e zoom out no painel

Copiar e colar no estilo vim!? 😱

ComandoDescrição
C-a ESCEntra no modo cópia
vSeleciona modo visual
C-vSeleciona modo visual/bloco
yCopia o que foi selecionado

Comandos para controle no terminal

Alguns comandos que podem ser executados no terminal para gestão das seções e outros comandos úteis.

ComandoDescrição
byobu lsLista as seções ativas do byobu/tmux
byobu a ou byobu attachAbre o byobu/tmux anexando à última seção
byobu new ou byobu new-sessionInicia uma nova seção

Alguns exemplos de comandos com parâmetros:

Iniciar a aplicação cmatrix, numa seção chamada matrix e deixa desanexado.

byobu new -s matrix -d 'cmatrix'

Iniciar uma nova seção com o byobu, editando o arquivo ~/.byobu/.tmux.conf no vim, dividir a janela e, depois, anexar à seção.

byobu new-session -d 'vim ~/.byobu/.tmux.conf' \; split-window -d \; attach

Executando as teclas de atalho C-a d, seguido do comando byobu ls, verá o seguinte:

2: 1 windows (created Sun Aug 28 22:55:24 2022)
matrix: 1 windows (created Sun Aug 28 22:53:05 2022)

Para entrar na seção matrix, execute o comando:

byobu a -t matrix

Arquivo de configuração

Para recarregar o arquivo de configuração, após alterá-lo, execute:

byobu source-file ~/.byobu/.tmux.conf

Ou, enquanto no tmux, faça C-a r para recarregar o tema sem sair do byobu/tmux. Está em uma das primeiras tabelas de comandos.

~/.byobu/.tmux.conf

Arquivo de configuração para utilizar as teclas de atalho apresentadas.

# Arquivo de configuração inicial em: https://github.com/adambard/learnxinyminutes-docs/blob/master/pt-br/tmux-pt.html.markdown


### Geral
###########################################################################

# Redefinindo o Ctrl+a como prefixo
unbind-key -n C-a
set -g prefix ^A
set -g prefix2 F12

# Limite de histórico de comandos
set -g history-limit 2048

# Índice inicial
set -g base-index 1
set -g pane-base-index 1

# Mouse
set-option -g -q mouse on

# Recarregar o arquivo de configuração sem a necessidade de reiniciar o programa
unbind r
bind r source-file ~/.byobu/.tmux.conf \; display "Configuração recarregada!"

# Enviar o Ctrl+a ao terminal (para ir ao início da linha)
bind a send-prefix
bind C-a send-prefix


### Teclas de atalho / Comandos
###########################################################################

# Preferência de comandos
setw -g mode-keys vi
set-option -g status-keys vi

# Alternar enter painéis com as e teclas de orientação do vim segurando Alt
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R

# Redimensionar painéis de 1 em 1
bind C-h resize-pane -L
bind C-l resize-pane -R
bind C-j resize-pane -D
bind C-k resize-pane -U

# Redimensionar painéis de 5 em 5
bind M-h resize-pane -L 5
bind M-l resize-pane -R 5
bind M-j resize-pane -D 5
bind M-k resize-pane -U 5

# Alternar enter painéis com as setas do teclado segurando Alt
bind -n M-Left select-pane -L
bind -n M-Down select-pane -D
bind -n M-Up select-pane -U
bind -n M-Right select-pane -R

# Iterar entre as Janelas
bind -n S-Left previous-window
bind -n S-Right next-window
bind -n M-S-Left swap-window -t -1
bind -n M-S-Right swap-window -t +1
unbind n
unbind w
bind n command-prompt "rename-window '%%'"
bind N command-prompt "rename-session '%%'"
bind w new-window -c "#{pane_current_path}"


# Dividir painéis
bind = split-window -h
bind - split-window -v
unbind '"'
unbind %

# Escrever em todos os paineis da mesma janela
unbind y
bind y setw synchronize-panes

# Copiar e colar no modo cópia no estilo vim
bind Escape copy-mode
unbind p
bind p paste-buffer
unbind-key -T copy-mode-vi v
bind-key -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle
bind-key -T copy-mode-vi 'y' send-keys -X copy-selection-and-cancel


### Tema / Estilo
###########################################################################

# Paleta de cores para a barra de status
set-option -g status-justify left
set-option -g status-bg black 
set-option -g status-fg white
set-option -g status-left-length 50
set-option -g status-right-length 80

# Paleta de cores para mensagem
set-option -g message-style bg=black
set-option -g message-style fg=green

# Paleta de cores para janela de status
setw -g window-status-current-style fg=green
setw -g window-status-bell-style fg=red
setw -g window-status-activity-style fg=yellow

# Cor do relógio
set-window-option -g clock-mode-colour green


### UI
###########################################################################

# Notificações
setw -g monitor-activity on
set -g visual-activity on
set-option -g bell-action any
set-option -g visual-bell off

# Definir automaticamente o título de janelas
set-option -g set-titles on
set-option -g set-titles-string '#H:#S.#I.#P #W #T' # window number,program name,active (or not)

# Ajustes na barra de status, mostrar Seção/Janela/Painel e aviso de sincronização
# Pego daqui: https://github.com/relaxdiego/dotfiles
set -g status-left "#[fg=colour248]S:#S  W:#I  P:#P #{?pane_synchronized,#[fg=colour255]#[bg=red](painéis sincronizados)#[default],} "

~/.byobu/status

Informações na barra de status que serão exibidos na direita:

#    status - Byobu's default status enabled/disabled settings
#
#      Override these in $BYOBU_CONFIG_DIR/status
#      where BYOBU_CONFIG_DIR is XDG_CONFIG_HOME if defined,
#      and $HOME/.byobu otherwise.
#
#    Copyright (C) 2009-2011 Canonical Ltd.
#
#    Authors: Dustin Kirkland <kirkland@byobu.org>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, version 3 of the License.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Status beginning with '#' are disabled.

# Screen has two status lines, with 4 quadrants for status
screen_upper_left="color"
screen_upper_right="color whoami hostname ip_address menu"
screen_lower_left="color logo distro release #arch session"
screen_lower_right="color network #disk_io custom #entropy raid reboot_required updates_available #apport #services #mail users uptime #fan_speed #cpu_temp battery wifi_quality #processes load_average cpu_count cpu_freq memory #swap disk #time_utc date time"

# Tmux has one status line, with 2 halves for status
tmux_left="logo #distro release #arch session"
# You can have as many tmux right lines below here, and cycle through them using Shift-F5
tmux_right="#network #disk_io #custom #entropy #raid #reboot_required #updates_available #apport #services #mail #users #uptime #ec2_cost #rcs_cost #fan_speed #cpu_temp #battery #wifi_quality #processes load_average #cpu_count #cpu_freq memory #swap disk whoami hostname ip_address #time_utc #date time"
#tmux_right="#network #disk_io #custom #entropy raid reboot_required updates_available #apport #services #mail #users uptime #fan_speed #cpu_temp #battery #wifi_quality #processes load_average cpu_count cpu_freq memory #swap disk #whoami #hostname #ip_address #time_utc date time"
#tmux_right="network #disk_io #custom entropy raid reboot_required updates_available #apport #services #mail users uptime fan_speed cpu_temp battery wifi_quality #processes load_average cpu_count cpu_freq memory #swap #disk whoami hostname ip_address #time_utc date time"
#tmux_right="network #disk_io custom #entropy raid reboot_required updates_available #apport #services #mail users uptime #fan_speed #cpu_temp battery wifi_quality #processes load_average cpu_count cpu_freq memory #swap #disk #whoami #hostname ip_address #time_utc date time"
#tmux_right="#network disk_io #custom entropy #raid #reboot_required #updates_available #apport #services #mail #users #uptime fan_speed cpu_temp #battery #wifi_quality #processes #load_average #cpu_count #cpu_freq #memory #swap whoami hostname ip_address #time_utc disk date time"

Caso deseje definir alguma fonte de informação da barra da direita, edite o arquivo ~/.byobu/statusrc

Cores em ~/.byobu/color.tmux

Gostei de usar as seguintes cores:

BYOBU_DARK="black"
BYOBU_LIGHT="white"
BYOBU_ACCENT="gray"
BYOBU_HIGHLIGHT="green"

Observações

  • Estas configurações são passíveis de mudanças e podem ser ajustadas para o seu fluxo de trabalho.
  • Se houver uma mensagem de boas vindas ao iniciar o byobu, verifique o arquivo /etc/motd
  • Quaisquer sugestões são bem vindas.

Publicações Recentes

blog-post

Utilizando pipx no lugar do pip

Introdução O pipx funciona parecido com o pip, porém ele já cria ambientes isolados automaticamente (venvs). Instalação …

Quer saber mais sobre mim?

Para conversar comigo ou saber outros detalhes profissionais
me encontre no…

Linkedin
*