Cambiando de terminal a Alacritty
Hace una semana comencé a utilizar un emulador de terminal llamado Alacritty en lugar de iterm2, el terminal que venía usando hace años.
En realidad no tengo un motivo muy importante para dejar de usar iterm2, pero moverme a otro terminal es una excusa para revisar mis archivos de configuración y buscar una forma más práctica de trabajar.
Algo curioso de Alacritty es que no tiene tabs, pantallas de configuración o menús; se configura desde un archivo de texto y es muy minimalista. Además promete ser más rápido que otros terminales porque dibuja en pantalla usando aceleración de video.
No sé muy bien por qué, pero me gusta que el emulador de terminal tenga poca funcionalidad, me da la sensación de que el proyecto puede avanzar más rápidamente y lograr estabilidad.
Después de todo, mucha de la funcionalidad “extra” que pretendo de un terminal se puede obtener usando tmux.
Configuración
Me gusta que la configuración de Alacritty esté en un archivo de texto, porque fácilmente puedo recorrer las opciones, identificar qué quiero cambiar y resguardar todo.
Además, que se trate de texto ayuda a copiar y tomar ideas de otras personas, por ejemplo la configuración de colores que estoy usando simplemente la copié y pegué del proyecto dracula-theme:
Ah, y cualquier cambio que hagamos a la configuración se recargará automáticamente, lo que hace que sea mucho más rápido ajustar y evaluar cambios de configuración.
Configurando los atajos de tmux
Hace tiempo que quiero habituarme a usar tmux todos los días y con esta transición a Alacritty me vi forzado a hacerlo.
Con tmux ahora puedo tener tabs y splits:
Sin embargo, tuve que configurar algunas cosas para sentirme más cómodo a la hora de trabajar.
Por ejemplo, para cambiar de tabs en tmux hay que pulsar una secuencia
de caracteres, como ctrl-b
y luego el número de tab al que queremos ir. Mientras
que para mí, lo ideal sería pulsar simplemente cmd-1
o cmd-2
para ir a
un tab específico.
Además, tengo el hábito de crear tabs con cmd-t
como hacía con iterm2, y la
forma que me ofrece tmux de hacer lo mismo me resulta incómoda. En tmux tendría
que pulsar ctrl-b
y luego la tecla c
.
Por suerte estos atajos se pueden
personalizar desde el mismo archivo de configuración de alacritty ~/.alacritty.yml
:
# Abrir tabs nuevos con cmd-T
- { key: T, mods: Command, chars: "\x05\x63" }
# Acceder a los tabs con números
- { key: Key1, mods: Command, chars: "\x05\x31" }
- { key: Key2, mods: Command, chars: "\x05\x32" }
- { key: Key3, mods: Command, chars: "\x05\x33" }
- { key: Key4, mods: Command, chars: "\x05\x34" }
- { key: Key5, mods: Command, chars: "\x05\x35" }
- { key: Key6, mods: Command, chars: "\x05\x36" }
- { key: Key7, mods: Command, chars: "\x05\x37" }
Las claves key
y mods
le indican a Alacritty qué teclas queremos
modificar, mientras que chars
son los caracteres de escape que queremos
invocar.
Para generar esos caracteres de la forma \x05\x31
seguí las instrucciones
que aparecen en un artículo sobre
alacritty. Básicamente hay que usar el comando xxd -psd
, pulsar el atajo de teclado que
nos gustaría invocar y anotar la secuencia de caracteres que aparece en pantalla.
Por ejemplo, si ejecuto xxd -psd
y pulso la secuencia de caracteres
ctrl-b
y luego c
, el número que se imprime en pantalla es este:
→ xxd -psd
^Bc
02630a
De donde 02
simboliza ctrl-b
, 63
a c
y por último 0a
simboliza
la tecla enter
.
Soporte TrueColor
Para que los colores se vean correctamente dentro de tmux y vim tuve que cambiar algunas cosas más.
Lo primero que hice fue ejecutar unos scripts para imprimir colores en la terminal y verificar si se veía correctamente.
Noté que los colores se veían perfectos en Alacritty, pero no se veían bien dentro de tmux:
Luego edité la configuración de tmux agregando esto:
set-option -ga terminal-overrides ",*256col*:Tc"
set -g default-terminal "screen-256color"
y esta otra configuración dentro de vim:
"Agrega soporte para truecolor
if exists('+termguicolors')
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
set termguicolors
endif
¡Y listo!