2 puntos por GN⁺ 2024-01-31 | 1 comentarios | Compartir por WhatsApp

Solo quería que Emacs se viera bonito — usar color de 24 bits en la terminal

  • La comunidad de Emacs está activa y ofrece autocompletado moderno y verificación de tipos en línea mediante LSP.
  • En entornos gráficos, Emacs soporta automáticamente color de 24 bits, pero en la terminal no es así.

Códigos de escape ANSI

  • Las primeras terminales de hardware ofrecían códigos de control incompatibles entre sí, y ANSI los estandarizó.
  • Mediante SGR (Select Graphics Rendition) se pueden configurar varios atributos de visualización de caracteres.

Colores de 3, 4 y 8 bits

  • Cuando se introdujo el color, había 8 colores básicos, y más tarde se añadieron colores brillantes para llegar a un total de 16.
  • En 1999, Todd Larason añadió a xterm un parche con soporte para 256 colores.

¿De dónde viene el soporte para color de 24 bits?

  • La forma de enviar colores de 8 bits y 24 bits a terminales compatibles está bien documentada.
  • A través del proceso de estandarización ANSI en los años 70 y de ISO 8613-6 (ITU T.416) en los 90, 38 y 48 quedaron definidos como modos extendidos de color de primer plano y de fondo.

Terminfo

  • Terminfo proporciona una base de datos de capacidades de terminal, y mediante la variable de entorno TERM le indica a los programas qué registro de terminfo usar.
  • xterm-256color y xterm-direct soportan, respectivamente, 256 colores y colores RGB.

Configuración de TERM: el problema del punto y coma

  • Como muchas terminales solo soportan la sintaxis con punto y coma, hay que comprobar que TERM esté configurado correctamente.

Configuración de Emacs

  • Emacs documenta cómo detectar el soporte de truecolor.
  • RGB es la capacidad de color predeterminada de Emacs, y primero busca las cadenas setf24 y setb24.

Terminales anidadas

  • Un flujo de trabajo común usa varias terminales anidadas.
  • Todas las capas deben entender el color de 24 bits y convertirlo correctamente.

Emulador de terminal gráfica

  • La mayoría de las terminales configuran TERM con un valor predeterminado razonable o permiten sobrescribirlo.

ssh

  • ssh transmite el valor de TERM al host remoto.

tmux

  • Dentro de tmux, hay que configurar un TERM como tmux-direct.

Opinión de GN⁺

  • Lo más importante de este artículo es la demanda de los usuarios por usar colores de alta calidad incluso en entornos de terminal, y los avances técnicos que lo hacen posible.
  • El soporte para color de 24 bits es una función importante que permite a los desarrolladores ofrecer una mejor experiencia de usuario, especialmente en herramientas como editores de código, donde mejora mucho la comodidad visual.
  • Este artículo será interesante y útil para usuarios de terminal y de Emacs, y ofrece información valiosa para quienes buscan una excelente experiencia visual incluso en entornos de trabajo basados en terminal.

1 comentarios

 
GN⁺ 2024-01-31
Opiniones en Hacker News
  • Expresa sorpresa por la complejidad de las aplicaciones de terminal y agradece a los desarrolladores de aplicaciones de terminal como iTerm y Kitty.

    • Comparte un enlace con funciones para configurar colores de pestañas para iTerm y zsh.
    • Señala la complejidad de las interfaces basadas en texto al comparar terminfo con la forma antigua de conectarse por HTTP o SMTP mediante telnet.
  • Personalmente, considera que ajustar la paleta de 16 colores en cada app de terminal es más fácil que hacer coincidir con precisión el código de terminal del lado de la aplicación.

    • Proporciona ejemplos de código para configurar colores en el archivo .Xdefaults y en archivos de tema personalizados .el.
    • Menciona que eso también mejora los colores de la salida de ls, entre otros.
  • Supone que el autor habría tenido una mejor experiencia si hubiera conocido export COLORTERM=truecolor.

    • Indica que esto se menciona en una nota al pie de la documentación de Emacs sobre la detección de compatibilidad con truecolor, y que también aparece en una captura de pantalla de Konsole, aunque puede pasarse por alto entre varias capas de multiplexores de terminal.
    • Explica que con esta configuración se puede saltar la parte compleja y pasar directamente al paso en el que la aplicación entiende que se quiere true color.
  • Destaca que al usar Emacs no es obligatorio usar una terminal, ya que se puede utilizar un frontend "gráfico" para macOS, Windows, X.org o Wayland.

    • Menciona que Emacs gráfico parece ejecutarse como si estuviera en una terminal, pero en realidad tiene varias funciones, incluido un visor de imágenes.
    • En una encuesta a usuarios de Emacs, el 80% respondió que usa el frontend gráfico.
  • Señala que la computación pudo haber perdido el rumbo al mantener sistemas de producción que usan emuladores de terminal, editores y versiones de sistemas operativos de los años 70.

    • Critica que, aunque las computadoras se han vuelto millones de veces más potentes, todavía seguimos trabajando de una forma similar a la de hace medio siglo.
  • Bromea con que quiere usar Cool Retro Term para que Emacs se vea más genial.

    • Aclara que en realidad solo usa Cool Retro Term para presentaciones.
    • Comenta que descubrió que su Emacs soporta color de 24 bits desde el inicio, aunque menciona que el resaltado de sintaxis le resulta un poco molesto.
  • Descubre que en el símbolo del sistema de Windows 10 funcionan las secuencias de escape ANSI estándar y que el color de 24 bits también funciona bien.

    • Proporciona un ejemplo de código que imprime "Hello" con fondo rojo.
  • Menciona que una de las mejores cosas de Emacs, frente a vim/neovim, es que el soporte de GUI se trata como un ciudadano de primera clase.

    • Aunque existen gVim y muchos frontends incompletos de neovim, prefiere que Emacs se ejecute de forma nativa mediante una GUI real.
    • Señala que la terminal tiene muchos restos históricos y limitaciones que hoy en día son innecesarios.
    • Comenta que, si hay problemas para ejecutar Emacs en un servidor remoto, se pueden usar TRAMP y emacsclient (si funciona o no sobre TCP).
  • Dice que no usará esta función porque utiliza una configuración de Emacs con colores mínimos, pero aun así le resultó muy agradable de leer.

    • Menciona que ya se acostumbró al verde brillante de tmux y al marrón rojizo oxidado de los colores de Emacs.
  • Critica que es realmente una vergüenza que los estándares estén atados a precios tan altos, obligando a la gente a llegar a estos extremos sin poder comprarlos.

    • Señala que los estándares deberían estar disponibles públicamente y que, aunque antes podía tener sentido cobrar por los costos de impresión, es increíble que un PDF cueste $200.