2 pontos por GN⁺ 2024-01-31 | 1 comentários | Compartilhar no WhatsApp

Eu só queria deixar o Emacs bonito — usando cores de 24 bits no terminal

  • A comunidade do Emacs é ativa e oferece recursos modernos de autocompletar e verificação de tipos inline por meio de LSP.
  • Em ambientes gráficos, o Emacs oferece suporte automático a cores de 24 bits, mas no terminal isso não acontece.

Códigos de escape ANSI

  • Os primeiros terminais de hardware ofereciam códigos de controle incompatíveis entre si, e o ANSI os padronizou.
  • Com SGR (Select Graphics Rendition), é possível definir vários atributos de exibição de caracteres.

Cores de 3, 4 e 8 bits

  • Quando as cores foram introduzidas, havia 8 cores básicas e, mais tarde, foram adicionadas cores brilhantes, totalizando 16 cores.
  • Em 1999, Todd Larason adicionou ao xterm um patch com suporte a 256 cores.

De onde veio o suporte a cores de 24 bits?

  • A forma de enviar cores de 8 bits e 24 bits para terminais compatíveis está bem documentada.
  • No processo de padronização ANSI dos anos 70 e depois com o ISO 8613-6 (ITU T.416) nos anos 90, 38 e 48 foram definidos como modos estendidos de cor de primeiro plano e plano de fundo.

Terminfo

  • O Terminfo fornece um banco de dados de recursos de terminais, e a variável de ambiente TERM informa aos programas qual registro terminfo usar.
  • xterm-256color e xterm-direct oferecem suporte a 256 cores e cores RGB, respectivamente.

Configuração de TERM: o problema do ponto e vírgula

  • Como vários terminais suportam apenas a sintaxe com ponto e vírgula, é preciso verificar se o TERM está configurado corretamente.

Configuração do Emacs

  • O Emacs documenta como detectar suporte a truecolor.
  • RGB é um recurso básico de cores do Emacs, e ele procura primeiro pelas strings setf24 e setb24.

Terminais aninhados

  • Um fluxo de trabalho comum envolve o uso de vários terminais aninhados.
  • Todas as camadas precisam entender cores de 24 bits e convertê-las corretamente.

Emulador de terminal gráfico

  • A maioria dos terminais define TERM com um valor padrão razoável ou permite sobrescrevê-lo.

ssh

  • ssh transmite o valor de TERM para o host remoto.

tmux

  • Dentro do tmux, é preciso definir um TERM como tmux-direct.

Opinião do GN⁺

  • O ponto mais importante deste texto é a demanda dos usuários por cores de alta qualidade mesmo em ambientes de terminal, junto com os avanços técnicos que tornam isso possível.
  • O suporte a cores de 24 bits é um recurso importante que permite aos desenvolvedores oferecer uma experiência de usuário melhor, especialmente em ferramentas como editores de código, melhorando bastante o conforto visual.
  • Este texto será interessante e útil para usuários de terminal e do Emacs, oferecendo informações valiosas para quem busca uma excelente experiência visual mesmo em ambientes de trabalho baseados em terminal.

1 comentários

 
GN⁺ 2024-01-31
Comentários no Hacker News
  • Expressa surpresa com a complexidade dos aplicativos de terminal e agradece aos desenvolvedores de aplicativos de terminal como iTerm e Kitty.

    • Compartilha um link com funções de configuração de cor de abas para iTerm e zsh.
    • Aponta a complexidade das interfaces baseadas em texto ao comparar terminfo com a forma antiga de conectar via telnet a HTTP ou SMTP.
  • Pessoalmente, acha mais fácil ajustar a paleta de 16 cores em cada aplicativo de terminal do que acertar exatamente o código de terminal do lado da aplicação.

    • Fornece exemplos de código para definir cores no arquivo .Xdefaults e em arquivos de tema personalizados .el.
    • Menciona que isso também melhora as cores da saída de ls e afins.
  • Supõe que o autor teria tido uma experiência melhor se soubesse de export COLORTERM=truecolor.

    • Diz que isso é mencionado numa nota de rodapé da documentação do Emacs sobre detecção de suporte a truecolor, e também aparece na captura de tela do Konsole, mas pode passar despercebido entre várias camadas de multiplexadores de terminal.
    • Explica que, com essa configuração, é possível pular a configuração complexa e ir direto para a etapa em que a aplicação entende que se deseja true color.
  • Enfatiza que não é obrigatório usar terminal ao usar Emacs, já que é possível usar frontends "gráficos" para MacOS, Windows, X.org ou Wayland.

    • Observa que o Emacs gráfico parece estar rodando em um terminal, mas na prática tem vários recursos, incluindo visualizador de imagens.
    • Diz que, em uma pesquisa com usuários de Emacs, 80% responderam que usam frontend gráfico.
  • Aponta que a computação pode ter perdido o rumo ao manter sistemas de produção usando emuladores de terminal, editores e versões de sistemas operacionais dos anos 1970.

    • Critica o fato de que, apesar de os computadores terem ficado milhões de vezes mais poderosos, ainda se trabalha da mesma forma que meio século atrás.
  • Brinca dizendo que quer usar Cool Retro Term para deixar o Emacs mais estiloso.

    • Esclarece que, na prática, só usa Cool Retro Term para apresentações.
    • Conta que descobriu que seu Emacs já suporta cores de 24 bits de fábrica e comenta que o destaque de sintaxe é um pouco irritante.
  • Descobre que sequências de escape ANSI padrão funcionam no Prompt de Comando do Windows 10 e que cores de 24 bits também funcionam bem.

    • Fornece um exemplo de código que imprime "Hello" com fundo vermelho.
  • Afirma que a melhor coisa do Emacs em comparação com vim/neovim é que o suporte a GUI é tratado como cidadão de primeira classe.

    • Embora existam o gVim e inúmeros frontends inacabados para neovim, prefere o fato de o Emacs rodar por padrão por meio de uma GUI de verdade.
    • Aponta que os terminais têm muitos resquícios históricos e limitações que hoje são desnecessários.
    • Menciona que, se houver problema para rodar Emacs em um servidor remoto, é possível usar TRAMP e emacsclient (não sabe se funciona via TCP).
  • Diz que provavelmente não usará esse recurso porque usa uma configuração de Emacs com o mínimo de cores, mas ainda assim achou a leitura muito agradável.

    • Comenta que se acostumou ao verde vivo do tmux e ao vermelho amarronzado enferrujado das cores do Emacs.
  • Critica como é realmente vergonhoso que os padrões estejam presos a preços altos, forçando as pessoas a seguir por esse caminho sem poder comprá-los.

    • Afirma que padrões deveriam ser publicamente acessíveis e que talvez no passado fizesse sentido cobrar pelos custos de impressão, mas achar um PDF por US$ 200 é inacreditável.