sudo: Jack of all trades, master of some

A falta de tabs, tmux

Comentarios desactivados en A falta de tabs, tmux

Recientemente me visitó un colega y me sugirió usar terminator al ver la cantidad excesiva de xterms abiertos; antes de recibir esa sugerencia ya había buscado infructuosamente una alternativa similar a los tabs para xterm. Dentro las alternativas que aparecieron figuraba screen, que realmente no me convenció mucho y resignado, utilicé por un tiempo terminator, que tampoco me convencía mucho pero resolvía la situación. Continué buscando y finalmente llegó algo bueno: tmux, un multiplexador de terminales que permite cambiar entre varios programas usando un solo terminal. Lo que más me gustó de tmux es que podía dividir la ventana en varios paneles y usando xterm, mi terminal preferido, además de la cantidad de opciones que trae.

Teclas de comandos

A través de teclas de comandos seguidas de CTRL-b tmux permite muchas acciones, entre ellas:

c (Crear nueva ventana)
n (Cambiar a la próxima ventana)
p (Cambiar a la ventana anterior)
” (Dividir panel horizontalmente)
% (Dividir panel verticalmente)
, (Renombrar ventana activa)
o (Mover hacia el panel siguiente)

Para dividir una ventana en dos paneles verticales entonces usaríamos: CTRL-b %

tmux también permite cambiar los ‘bindings’ de las teclas, por ejemplo, para moverse entre los paneles se hace un poco engorroso tener que usar CTRL-b o, si queremos otra combinación de teclas para cambiar de paneles se crea el archivo ~/.tmux.conf y dentro de este:

bind -n M-Left select-pane -L # seleccionar panel a la izquierda
bind -n M-Right select-pane -R # seleccionar panel a la derecha
bind -n M-Up select-pane -U # seleccionar panel arriba
bind -n M-Down select-pane -D # seleccionar panel debajo

Con la tecla ALT más las teclas de dirección (flechas) podemos entonces fácilmente movernos por todos los paneles.

Sesiones de tmux

En mi caso generlamente tengo cuatro terminales a tiempo completo, lo ideal sería tenerlas en una sola divida en cuatro. Para esto se crea un archivo que almacenará el layout, en mi caso ~/.tmux-session y dentro de este:

selectp -t 0 # seleccionar el primer panel (0)
splitw -h -p 50 "ssh usuario@host" # dividirlo en dos partes iguales horizontalmente
selectp -t 1 # seleccionar el nuevo panel (1)
splitw -v -p 50 "ssh usuario@host" # dividirlo en dos partes iguales verticalmente
selectp -t 0 # seleccionar el primer panel (0) nuevamente
splitw -v -p 50 "ssh usuario@host" # dividirlo en dos partes iguales verticalmente
selectp -t 0 # ir al primer panel

Nótese que después de dividir los paneles también se puede especificar un comando que se ejecutará después de la división, en mi caso, sesiones ssh.

Para poder cargar la sesión debemos agregar la siguiente línea al archivo de configuración de tmux: bind S source-file .tmux-session, reiniciamos tmux y con CTRL-b S cargamos la sesión.

Con  CTRL-b PageUp, se activan los modos scroll y copy, de esta manera se pueden usar las teclas de scroll que se usan normalmente como SHIFT-PageUp/Down. Para salir de este modo se presiona la tecla q. Tambien es posible habilitar el scroll nativo especificando en el archivo de configuración:

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Finalmente estoy convencido de que tmux es la alternativa que tanto buscaba.

Para finalizar, un screenshot de cómo queda mi sesión de tmux:

tmux-screenshot