4 puntos por GN⁺ 2024-08-13 | 1 comentarios | Compartir por WhatsApp
  • Un usuario que llevaba mucho tiempo usando iTerm 2 volvió a probar WezTerm para tener configuración basada en texto y compartir dotfiles, y ajustó en detalle la apariencia, los atajos de teclado, el multiplexing y los workspaces con la API de configuración en Lua
  • La configuración se guarda en wezterm.lua y se recarga en caliente apenas se guarda; en el overlay de depuración con CTRL + SHIFT + L se pueden revisar de inmediato los logs y el REPL de Lua
  • Con configuración en Lua se pueden armar dinámicamente más de 1,000 esquemas de color integrados, integración con el modo oscuro/claro del sistema, fuentes, decoraciones de ventana en macOS y una barra de estado estilo powerline
  • Los atajos de teclado predeterminados se pueden mantener o desactivar, y se definen directamente el movimiento por palabra con Option + Arrow, abrir configuración con CMD +,, y manipulación de panes basada en leader key y key tables
  • El multiplexing integrado y los workspaces mantienen el estado de ventanas, panes y pestañas por proyecto, como sesiones de tmux, y con Lua se puede crear incluso una UI de selección de proyectos y el flujo de cambio entre ellos

Por qué probé pasar de iTerm 2 a WezTerm

  • Usé iTerm 2 durante casi 10 años, pero quería una terminal cuya configuración pudiera manejar completamente como texto para incluirla en mis dotfiles y compartirla entre mis máquinas de trabajo y personales
  • WezTerm se destaca por su API potente y su configuración en Lua; en el segundo intento fue posible armar una terminal más atractiva y funcional
  • El alcance cubre apariencia, atajos de teclado, multiplexing, navegación entre workspaces, barra de estado y configuración dinámica de temas
  • También hay funciones que no se cubren en este artículo
    • Reglas personalizadas para resaltar hipervínculos
    • scrollback con búsqueda
    • modo quick copy
    • soporte de imágenes
  • La configuración de ejemplo está orientada a la experiencia de uso en macOS y no fue probada en otros sistemas, aunque WezTerm en sí funciona en varios entornos
  • El ejemplo final de configuración está disponible como gist

Instalación y estructura básica de la configuración en Lua

brew install wezterm
  • El flujo usado guarda el archivo de configuración en $XDG_CONFIG_HOME/wezterm/wezterm.lua
    • En la mayoría de los sistemas, incluido macOS, se interpreta como ~/.config/wezterm/wezterm.lua
    • Usar un directorio en vez de dejar todo en un único ~/.wezterm.lua facilita dividir y administrar la configuración en varios archivos
local wezterm = require 'wezterm'
local config = wezterm.config_builder()

return config
  • Como la configuración de WezTerm se escribe en Lua, es más fácil crear configuraciones dinámicas complejas que con YAML o TOML
  • Lua es un lenguaje de programación, así que es más difícil de aprender que YAML/TOML, pero si se tiene experiencia con lenguajes dinámicos como Ruby, Python o JavaScript, el código de ejemplo resulta fácil de leer
  • Como material para aprender Lua, se puede consultar la Getting Started guide

Recarga en caliente y overlay de depuración

  • WezTerm detecta cambios en el archivo de configuración y hace recarga automática, por lo que se puede ver el efecto de los cambios sin reiniciar la terminal
  • Si se guarda una configuración con errores, como un nombre de función incorrecto, aparece de inmediato un popup de error en tiempo de ejecución
wezterm.config_builderZ()
  • Se pueden dejar logs con wezterm.log_info()
wezterm.log_info("hello world! my name is " .. wezterm.hostname())
  • Con CTRL + SHIFT + L se abre el debug overlay, donde se pueden revisar los logs y el REPL de Lua
    • Se pueden ejecutar expresiones de Lua como 1 + 1
    • También se pueden consultar valores del módulo wezterm, como wezterm.home_dir
  • Usar juntas la recarga en caliente y el overlay de depuración acorta el ciclo de feedback al cambiar y verificar la configuración

Configuración visual: colores, tema del sistema, fuentes y estilo de ventana

  • Esquemas de color y configuración dinámica

    • WezTerm ofrece más de 1,000 esquemas de color integrados, que se eligen con config.color_scheme
    config.color_scheme = 'Tokyo Night'
    
    • La lista de esquemas de color se puede revisar en WezTerm colorschemes
    • Usando el evento window-config-reloaded y wezterm.color.get_builtin_schemes(), también es posible aplicar un esquema de color aleatorio a cada ventana nueva como configuración dinámica
    • Si después de establecer un config override por ventana se vuelve a un esquema de color estático, puede que la recarga en caliente no se aplique de inmediato
    • Se puede borrar el override ejecutando window:set_config_overrides({}) en la terminal de depuración o cerrando y volviendo a abrir la ventana
  • Integración con el modo oscuro/claro del sistema

    • Se puede separar la configuración en un módulo appearance.lua para cambiar el esquema de color según la apariencia del sistema operativo
    • Se determina si está en modo oscuro buscando la cadena "Dark" en wezterm.gui.get_appearance()
    • En entornos donde no existe wezterm.gui, se trata por defecto como modo oscuro
    if appearance.is_dark() then
      config.color_scheme = 'Tokyo Night'
    else
      config.color_scheme = 'Tokyo Night Day'
    end
    
  • Fuentes y decoraciones de ventana

    • WezTerm incluye por defecto JetBrains Mono y Nerd Font Symbols
    • La configuración de ejemplo usa Berkeley Mono de 13 pt
    config.font = wezterm.font({ family = 'Berkeley Mono' })
    config.font_size = 13
    
    • El ejemplo de estilo de ventana en macOS incluye fondo semitransparente, blur, eliminación de la barra de título y configuración de la fuente de la barra de pestañas
    config.window_background_opacity = 0.9
    config.macos_window_background_blur = 30
    config.window_decorations = 'RESIZE'
    

Barra de estado y API de eventos de WezTerm

  • Con el callback del evento update-status se agregan segmentos con forma de powerline a la barra de estado derecha
  • El ejemplo inicial muestra un segmento de hostname usando el color de fondo, el color de primer plano del esquema de color actual y wezterm.hostname()
  • wezterm.on conecta callbacks a eventos de la terminal
    • update-status ocurre periódicamente cuando está lista una actualización de estado
    • WezTerm administra que solo se ejecute una actualización a la vez, y si el código tarda demasiado, interrumpe el handler
  • Con window:effective_config().resolved_palette se puede obtener la paleta actual con los overrides ya aplicados
  • wezterm.format se usa para aplicar estilos como color, negrita y subrayado a cadenas de texto
  • En los ejemplos posteriores se agregan más segmentos a la barra de estado
    • Workspace actual
    • Fecha y hora
    • Hostname
  • Con wezterm.color.parse, color:lighten, color:darken y wezterm.color.gradient se calculan colores de gradiente basados en el tema actual

Atajos de teclado: movimiento por palabra en macOS y abrir configuración

  • WezTerm ofrece atajos de teclado predeterminados, y en el ejemplo se mantienen
  • Para desactivar los atajos predeterminados se puede usar config.disable_default_key_bindings = true
  • En macOS, para moverse por palabra con Option + LeftArrow y Option + RightArrow como en iTerm 2 y Terminal.app, se envían ESC + b y ESC + f
{
  key = 'LeftArrow',
  mods = 'OPT',
  action = wezterm.action.SendString '\x1bb',
}
  • Se puede configurar CMD + , para abrir el archivo de configuración de WezTerm en una pestaña nueva
    • El ejemplo usa nvim y wezterm.config_file
  • Si WezTerm fue iniciado desde Finder en macOS, puede que el binario del editor no esté en PATH y falle la ejecución del comando
  • Al reforzar las variables de entorno básicas con config.set_environment_variables, el mismo entorno se pasa también a los comandos spawn posteriores
config.set_environment_variables = {
  PATH = '/opt/homebrew/bin:' .. os.getenv('PATH')
}

Multiplexing integrado y leader key

  • El multiplexing integrado de WezTerm es una función que puede usarse en lugar de tmux
  • La función integrada ofrece scrollback buffer por pane, mejor control con mouse, selección más sencilla y, en general, mejor rendimiento
  • Con CTRL + SHIFT + P se abre la command palette y se pueden ejecutar comandos como “Shell: Split Horizontally” y “Shell: Split Vertically”
  • Como los atajos de división predeterminados son complejos para evitar conflictos, se puede usar una leader key para crear combinaciones más simples
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
  • El ejemplo usa un estilo similar a tmux: después del leader, " ejecuta una división horizontal y % una división vertical
{
  key = '"',
  mods = 'LEADER',
  action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
}
  • Cuando se quiere enviar CTRL + A en sí a la terminal, se mapea la combinación LEADER|CTRL para reenviar CTRL + A

Movimiento y resize de panes, key table

  • El movimiento entre panes se mapea a combinaciones con leader usando las teclas de dirección estilo vim: h, j, k, l
  • Con ActivatePaneDirection se ejecuta el movimiento hacia Down, Up, Left y Right
  • Las tablas Lua repetitivas se pueden reducir con una función
local function move_pane(key, direction)
  return {
    key = key,
    mods = 'LEADER',
    action = wezterm.action.ActivatePaneDirection(direction),
  }
end
  • El resize de panes también se puede hacer con el mouse, pero el ejemplo usa una key table para un flujo centrado en teclado
  • Una key table es una forma de entrar en un modo específico y usar atajos dedicados a ese modo
    • Es similar a una leader key, pero puede configurarse para no desactivarse justo después de una acción
    • Es adecuada para tareas como resize, donde hay que presionar la misma tecla repetidamente
  • El ejemplo activa la key table resize_panes con LEADER + r, y ajusta el tamaño de los panes de a 3 celdas con h/j/k/l
  • Con timeout_milliseconds = 1000, se configura la salida del modo resize después de 1 segundo
  • Los usuarios de Neovim pueden consultar smart-splits.nvim, que ayuda a moverse entre panes de WezTerm y panes de vim

Configuración de workspaces por proyecto

  • Cuando se trabaja con varios proyectos al mismo tiempo, surge la necesidad de mantener instancias separadas del multiplexor, ventanas, panes y estados de pestañas para cada proyecto
  • En WezTerm, el objetivo similar a las sessions de tmux se resuelve con workspaces
  • Se usa una estructura donde se crea projects.lua y desde la configuración principal se importa una función de selección de proyectos
  • El ejemplo inicial lista directamente las rutas de proyectos y muestra una UI de selección con InputSelector
    • Con fuzzy = true se activa la búsqueda fuzzy
    • Al principio, el resultado seleccionado solo se imprime como log en el debug overlay
  • LEADER + p abre la UI de selección de proyectos, y LEADER + f muestra la lista de workspaces existentes con búsqueda fuzzy
action = wezterm.action.ShowLauncherArgs { flags = 'FUZZY|WORKSPACES' }
  • La incomodidad de administrar manualmente las rutas de proyectos se reduce recolectando automáticamente los subdirectorios de la carpeta de proyectos con wezterm.glob()
  • El ejemplo usa los subdirectorios bajo ~/Projects como proyectos, e incluye también el directorio home en la lista de proyectos
  • Al seleccionar un proyecto se ejecuta SwitchToWorkspace
    • Si el workspace existe, cambia a él
    • Si no existe, lo crea
    • El nombre del workspace usa el último segmento de la ruta
    • El directorio de trabajo actual de la nueva terminal se establece en la ruta del proyecto seleccionado

Cosas que se pueden probar después

  • WezTerm tiene muchas más funciones en la lista de funcionalidades
  • Las posibilidades de la configuración en Lua se pueden explorar más en la documentación de la API de WezTerm
  • Conviene tomar la configuración creada paso a paso, dejar solo lo que realmente se va a usar, reescribirla con estilo propio y luego agregar las funciones necesarias
  • Si WezTerm te gusta, también puedes patrocinar a Wez, que trabaja en este proyecto open source

1 comentarios

 
GN⁺ 2024-08-13
Comentarios en Hacker News
  • Hace poco me cambié a WezTerm y estoy muy satisfecho
    Antes usaba kitty, y cuando me pasé desde iTerm2 me gustaron su configuración y simplicidad, pero en cuanto a funciones incluidas por defecto, WezTerm es mucho mejor. La configuración del terminal también es lo bastante corta como para caber en una sola pantalla del editor, y después de eso el terminal simplemente deja de estorbar, así que ya no hay que prestarle atención
    Lo que terminó de hacerme dejar kitty fue que cada vez que me topaba con un problema o intentaba recrear una función de iTerm2, veía respuestas cortantes y casi despectivas del maintainer
    Por ejemplo, recuerdo que ante la pregunta “¿cómo se configura tmux en kitty?”, respondió algo como “no lo hagas, tmux es estúpido” y cerró el tema, así que al final lo dejé

    • Yo también me pasé de Kitty a WezTerm por ese tipo de respuestas del maintainer
      Claro, es su proyecto y es un programador excelente, pero un poco de humildad no le vendría mal
    • Me pregunto si WezTerm soporta una función equivalente a la hotkey window de iTerm
      Para quien no la conozca, es una ventana que se puede mostrar u ocultar con un atajo específico y que, cuando aparece, queda por encima de todas las demás, para poder usar el terminal al instante desde cualquier lugar. Podría vivir sin eso, pero no es una función que quiera abandonar sin más, así que por muy buenas que sean las demás funciones de WezTerm, si no tiene esto, para mí queda descartado desde el inicio
    • Mientras más viejo me hago, más siento que un maintainer excesivamente dogmático y desdeñoso es la mayor señal de alerta de que hay que evitar un proyecto
      Muchas veces por fuera parece el mejor producto posible, pero en cuanto empiezas a usarlo a fondo, quedas atrapado en las decisiones de esa persona y sin vuelta atrás
    • Más allá de que el maintainer de Kitty es un poco áspero, no me parece algo especialmente grave; un maintainer no tiene la obligación de hacerse amigo de sus usuarios
      Pero cuando empecé a usar WezTerm a principios de este año, de verdad me sorprendí. He leído muchos textos de Wez y el tono siempre fue impecable; me pareció realmente admirable
    • El desarrollador de kitty parece creer que él sabe mejor que todos cómo se debe usar un terminal, y que las opiniones de los demás están equivocadas de raíz
      Es revelador que ni siquiera pueda renderizar correctamente la vieja UI de make menuconfig de Linux, y que tampoco se pueda arreglar con configuración porque él no cree en la configuración. Al leer publicaciones en el issue tracker, no solo resulta insultante, sino que hasta te dan ganas de “defender” con la misma intensidad formas arbitrarias de usar el terminal, y eso no es sano
      No puedo asegurarlo, pero creo que incluso si estuviera de acuerdo con él en absolutamente todo sobre terminales, igual preferiría hacer mi propio terminal antes que usar el suyo
  • En mi experiencia, Wez responde a los issues de GitHub con una rapidez sorprendente y, si realmente hay algo mal, normalmente lo corrige en uno o dos días
    Salvo una o dos molestias menores relacionadas con las teclas modificadoras sobre SSH, sus funciones encajan casi perfectamente con lo que necesito, y además es rápido. Antes era un fanático de Alacritty, pero necesitaba mejor soporte de modificadores en Emacs remoto

    • Yo también abrí un issue (https://github.com/wez/wezterm/issues/4917), y no solo respondió, sino que también contestó preguntas laterales, y además fusionó muy rápido dos PR de corrección que hice
    • Mi experiencia no fue tan positiva
      Comenté en un issue ya cerrado, pero de todos modos estaba cerrado como “won’t do” y mi comentario fue ignorado. No quería abrir un issue nuevo sobre lo mismo después de que ya lo habían rechazado
      https://github.com/wez/wezterm/issues/4706
    • Sobre Emacs remoto, WezTerm puede interceptar y redefinir por completo combinaciones de teclas
      Combinaciones como C-S-\" no tienen una buena forma de enviarse porque el protocolo del terminal no las soporta. Así que hice que WezTerm enviara \" c s '\" en su lugar y agregué un binding extra en Emacs. Gracias a este truco con F12, pude enviar combinaciones bastante complejas que el protocolo del terminal no puede soportar
  • Originalmente instalé WezTerm al pasar de Kubuntu a Ubuntu porque quería usar algunas funciones de Konsole sin tener que instalar Konsole, por ejemplo scrollback infinito y búsqueda en el scrollback.
    Sé que también se puede instalar Konsole en Gnome, pero de algún modo no se sentía del todo adecuado. WezTerm me gustó de inmediato, pero al leer este post me di cuenta de que apenas he raspado la superficie de sus posibilidades de configuración.
    Mi única queja es que muchas funciones no son fáciles de descubrir. La documentación es realmente buena y el autor es activo y amable, pero, por ejemplo, una vez encontré cómo seleccionar bloques grandes de texto usando solo el teclado, lo probé y pensé “¡tengo que acordarme de esto!”, pero enseguida se me olvidó, y ahora otra vez estoy seleccionando con el mouse como un principiante total. Como no es algo que haga seguido, de todos modos eso es más rápido que volver a buscar esa página en Google.
    Por cierto, la página a la que me refería es https://wezfurlong.org/wezterm/copymode.html, y no https://wezfurlong.org/wezterm/quickselect.html, que por el nombre parecía lo que estaba buscando pero en realidad era una función completamente distinta. Aun así, también es muy útil y una gran idea, pero no era lo que yo buscaba.

    • Tengo la configuración de WezTerm en mi repositorio de dotfiles y dejé una nota como esta en el README para encontrarla fácilmente después.
      https://github.com/bbkane/dotfiles/tree/master/wezterm
    • El modo QuickSelect es realmente increíble.
      Ya es útil tal como viene por defecto, pero su verdadera fortaleza está en que puedes personalizar las expresiones regulares que va a detectar. Agregué una regex que encuentra todos los nombres de archivo en la salida de eza --icons, y \p{Co} coincide con los íconos. Así que hice un alias de ls a eza y luego puedo escribir de inmediato cualquier nombre de archivo con shift+las letras de QuickSelect.
    • Me pregunto si eso significa que hay alguna forma de tener scrollback infinito y búsqueda en el scrollback en tiempo real en WezTerm, como en Konsole.
      Todavía no he encontrado cómo hacerlo, así que muchas veces termino dejando abierta también una sesión de Konsole. Al hacer tail de logs en vivo, esas dos funciones son realmente poderosas.
    • Me da curiosidad por qué te cambiaste desde Kubuntu. Lo pregunto porque estoy pensando en instalarlo.
  • Después de probar Mac Terminal, iTerm2, Kitty, Warp y otros, al final me quedé con WezTerm.
    Es fácil de configurar, rápido y se ve bien. Incluso hice un tema.
    https://tiniri.vlad.studio/

    • Yo también probé terminales como esos, pero al final me quedé con WezTerm, y ahora es uno de mis terminales favoritos.
      Me encontré por casualidad con este sitio mientras comparaba varios terminales: https://terminaltrove.com/terminals/
      Parece bastante útil para quien quiera compararlos.
    • Este tema está muy bueno. Me pregunto si habrá alguna forma de usarlo también en los editores de JetBrains.
    • Me gustó el tema claro de Vlad y lo instalé.
    • Los temas de color están realmente muy buenos. Ojalá hubiera también para Konsole y Sublime Text.
  • Llevo usando WezTerm como un año y apoyo a Wez en GitHub; es un terminal excelente y él es un muy buen desarrollador.
    En el post dice que no lo va a cubrir, pero una de mis funciones favoritas es Quick Copy y los otros modos de copiado. Los uso todo el tiempo. Solo presionas C-S-Space y escribes las letras que aparecen junto al elemento que quieres copiar.
    Un caso de uso importante para mí es tener algo parecido a mosh+tmux desde una laptop macOS hacia una máquina Linux del trabajo. Siempre puedo dejar la sesión levantada y trabajar en la máquina de la empresa desde la Mac. Como además da sesiones reconectables con panes y tabs, puedo seguir trabajando aunque me aleje del escritorio, y la calidad es excelente.

    • Una de las funciones realmente geniales del modo Quick Copy es que, si escribes las letras en su versión en mayúsculas, el valor se vuelve a pegar automáticamente en el prompt del terminal.
    • Recién me enteré de QuickSelect y creo que lo voy a usar mucho de ahora en adelante.
  • No veo qué podría no gustarte de WezTerm
    Mi función favorita, aunque a menudo se pasa por alto, es el soporte completo entre distintos sistemas operativos. Si trabajas en un entorno como el mío, usando Linux, macOS y Windows, basta con aprender a usar WezTerm y listo. Además, gran parte de la configuración del terminal se comparte entre sistemas operativos

    • Lo único que no me gustó de WezTerm, y la razón por la que dejé de usarlo, tiene que ver con cómo copia al portapapeles líneas con salto de línea visual
      Puede que sea un problema solo mío o por cómo uso tmux, pero cuando copiaba texto con líneas ajustadas por wrap, parecía que el texto copiado incluía los saltos de línea. Era muy molesto y creo que se debía a la interacción entre WezTerm y tmux
      No tengo pruebas suficientes como para hacer un buen bug report, y como WezTerm tiene su propio servidor de multiplexación de terminal llamado “ssh domains”, quizá no sea algo lo bastante importante como para corregirlo. Pero no quiero andar instalando el servidor de multiplexación de WezTerm en todos lados, y casi siempre ya hay tmux disponible en los lugares a los que entro por SSH
      Fuera de eso, WezTerm es excelente
    • Cuando paso entre la MacBook del trabajo y mi máquina Linux personal, mi mayor dolor son los atajos de teclado
      Las opciones de configuración de macOS son limitadas y requieren muchos rodeos; podría hacer que Linux se parezca a macOS, pero tampoco me gustan mucho los atajos de macOS en sí. Entonces termino en una mezcla rara, y cada vez que cambio de equipo sigo presionando las teclas equivocadas
      Me pregunto si alguien ya encontró una configuración que funcione bien
    • En mi entorno no rendía bien, y con el tiempo tendía a congelarse por varios segundos al cambiar de pestaña
      No sé por qué pasa ni cómo diagnosticarlo. Mi única sospecha es un scrollback muy grande, pero eso no lo puedo sacrificar. Al final me pasé a Kitty; Kitty también tiene sus propios problemas, pero al menos funciona
    • Creo que aquí la elección del lenguaje importa mucho
      El lenguaje de configuración Lua brilla porque permite hacer cambios según el entorno con bastante facilidad. También creo que hay un efecto secundario subestimado de Rust. Muchas herramientas modernas hechas en Rust suelen tener un soporte multiplataforma excelente, quizá por sus buenas capas de abstracción entre el lenguaje y el sistema operativo
    • También importa mucho que esté bien probado en los tres sistemas operativos
      Me bastó con comparar una vez, por ahí de 2019, el repositorio de wez con otros en términos de GitHub Actions, issues y documentación, y desde entonces no volví atrás. Hasta trae soporte de pestañas por defecto
      Es el primer terminal que realmente reemplazó a urxvt en soporte y velocidad. Antes usaba termite y dejaba urxvt como respaldo por si termite fallaba en situaciones raras
  • La razón por la que sigo en iTerm2 es Edit->Selection Respects Soft Boundaries
    Es una función que, “si se activa, interpreta las barras verticales | como divisiones de panel, como en vim o emacs, y hace que la selección se ajuste en ese punto”
    En mi caso, la necesito para seleccionar texto en IRC
    https://github.com/wez/wezterm/issues/596

    • Esto es básicamente un problema de hinchazón tipo Microsoft Word
      Nadie necesita absolutamente todas las funciones, pero cada quien tiene 10 funciones de nicho que sí quiere, y esas 10 no son las mismas para todos. Así que, para obtener esas 10 funciones de nicho, uno termina aceptando la hinchazón
    • Esa función se ve increíblemente buena. Me pregunto si hay algún terminal en Linux que la soporte
    • zellij soporta esto por defecto si el terminal es compatible con las funciones OSC adecuadas. Cualquiera de los terminales mencionados en este hilo debería soportarlo
      Edit: soné brusco, perdón. Se me pasó la parte de que lo usabas en IRC
    • Viéndolo en la práctica, estoy 100% de acuerdo en que es una excelente función de UI/UX
    • Llevo años usando iTerm y no conocía para nada esta opción. Para mi uso de Emacs, es una función decisiva
  • He sido usuario de iTerm2 desde que empecé a usar macOS por primera vez, hace casi 10 años
    Pero últimamente sentía que se había vuelto realmente lento, y llegué a mi límite cuando al cambiar con cmd-tab tenía que esperar más de un segundo a que apareciera el terminal
    Revisé algunas alternativas, pero ninguna me cerraba del todo. Algunos terminales requerían cuenta/inicio de sesión para funcionar, lo cual era una gran desventaja; otro estaba escrito en {Java,Type}Script y, por la naturaleza asíncrona de los streams de Node.js, rompía incluso comandos simples como yes
    Hasta ahora, WezTerm me está gustando mucho. Es bastante rápido, muy configurable, y además ya trae incluido OneDark(base16), el tema que usaba en iTerm2
    La única molestia inicial fue que tuve que agregar manualmente en la configuración Lua los atajos para cmd-left y cmd-right; habría estado bien que vinieran en los valores predeterminados

    • ¿Te refieres a que el que requiere cuenta/inicio de sesión es Warp, y el hecho en {Java,Type}Script es Tabby o extraterm?
  • Wez también publicó un libro sobre programación de sistemas en Rust
    https://leanpub.com/sysprog

  • Buen artículo; quizá pruebe WezTerm alguna vez, pero hace poco me cambié a Kitty, así que no quiero estar saltando de terminal demasiado seguido
    Eso sí, hace falta una corrección sobre Kitty. Kitty no usa YAML ni TOML, sino su propio DSL de configuración simple, y además se puede automatizar completamente con Python

    • Estoy igual, por ahora solo lo dejé en marcadores