Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

Trabalhando com o Tmux

Publicado em Developer


Ok, esse é um post para quem gosta de trabalhar no terminal. Se você não trabalha, com certeza ou vai estranhar ou vai achar horrível, mas tente dar uma lida para ver se de repente a coisa apetece de alguma forma. ;-)

Eu comecei a me interessar pelo Tmux alguns anos atrás, mesmo sendo um ávido consumidor do GNU Screen, mais para manter sessões abertas em alguns servidores rodando determinados serviços e depois até para montar um ambiente de desenvolvimento remoto que pudesse conectar na hora que quisesse, imediatamente no ponto em que parei. Mais prático, impossível (inclusive aqui tem um artigo do Mark O’Connor mostrando como ele trocou o MacBook dele para trabalhar em um iPad, conectado na Linode).

Alguns amigos ficaram em dúvida sobre a estabilidade do Tmux, fato que posso comprovar que não tive problema algum em quaisquer das sessões que mantive e mantenho abertas por semanas e meses. Ele roda leve, estável, sem problema algum, impressionando até o Theo de Raadt, que disse:

The most impressive thing about tmux, in my view, is how frustrating the code audit was. In 2 hours, I found only one or two nits that had very minor security consequences. It was not accepted into the tree based on license alone. It is high quality code.

Juntando o interesse sobre a ferramenta, a comprovação da sua estabilidade, e algumas considerações sobre a mantenabilidade do Screen, decidi que era hora de mudar. Passei de vez para o Tmux (obrigado pelo tempo juntos, Screen) e estou muito satisfeito. Ainda mais depois de descobrir uma ferramenta que é perfeita para nós que trabalhamos com Ruby: o Tmuxinator, que é uma Rubygem que não necessariamente é somente utilizada por quem desenvolve em Ruby, mas para quem tem Ruby instalado. Ou seja, eu também trabalho em projetos em Java, PHP, etc com essa gem numa boa.

Tmuxinator screenshot

A grande vantagem do Tmuxinator é que podemos abrir várias janelas e panes (as panes são, digamos, janelas dentro das janelas), funcionalidades padrões do Tmux, configurando facilmente um arquivo YAML, o que pode ser um pouco mais trabalhoso se feito "na unha". Uma sessão de exemplo é mostrada no site do Tmuxinator:

# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...

project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
  - editor:
      layout: main-vertical
      panes:
        - vim
        - #empty, will just run plain bash
        - top
  - shell: git pull
  - database: rails db
  - server: rails s
  - logs: tail -f logs/development.log
  - console: rails c
  - capistrano:
  - server: ssh me@myhost

Nessa sessão podemos ver que foram criadas as seguintes janelas (usando tabs):

  1. Editor, separada na horizontal entre o Vim e o top;
  2. Shell, rodando o git pull;
  3. Database, onde foi aberto o console do banco de dados do Rails;
  4. Server, onde foi disparado o servidor do Rails, no diretório local;
  5. Logs, com um comando tail mostrando as alterações do log de desenvolvimento;
  6. Capistrano, aberto sem rodar nada, mas que provavelmente vai rodar vários cap deploy;
  7. Server, onde conecta via SSH no servidor da aplicação;

Antes de tudo isso, foram indicadas a versão da RVM que o projeto utiliza e um comando (qualquer comando que possa rodar com autoridade do usuário corrente no terminal, ou como no caso, utilizando sudo) para rodar antes de abrir as janelas. Tudo isso alcançado rapidinho com um

tmuxinator project_name

Lógico que podemos customizar esse arquivo do jeito que bem entendermos. Particulamente eu configuro para já clonar o repositório antes de abrir todas as janelas/panes. No caso do uso do Tmuxinator, eu utilizo geralmente para trabalhar nos projetos sem manter a sessão aberta. Nesse caso, chamo o Tmuxinator, que já configura tudo para mim, trabalho no projeto e no final mando um git push e mato a sessão e o diretório. Lógico que nada me impede de manter a sessão aberta junto com várias outras do Tmux no servidor.

Aí vocês podem perguntar: mas não fica feio pra diacho trabalhar direto no terminal? Bom, algumas coisas são perdidas, como o sublinhado da correção ortográfica do Vim, mas as palavras ficam em cor de background diferente. ;-) As fontes? Ué, configure as fontes do seu terminal. Eu atualmente estou utilizando a Inconsolata, que fica bem legal. Ou seja, não é o fim do mundo, com a vantagem que podemos trabalhar sem tirar as mãos do teclado, e, em fases de produtividade sem distrações mais punks, mandar um fullscreen no terminal e mandar bala.

Como uma ótima fonte de referência, tanto para o Tmux como para o Tmuxinator, recomendo o livro que saiu faz pouco tempo pela Pragmatic Programmers, que se chama ... Tmux. Na página do livro eles fazem algumas brincadeiras com o fato de não ter que usar o mouse, mas sabemos que vai muito mais além disso, certo? ;-)




Comentários

Comentários fechados.

Artigos anteriores