7 coisas que aprendi ao construir um framework TUI moderno
O terminal é rápido
- Emuladores de terminal modernos são softwares extremamente sofisticados
- É possível usar renderização acelerada por hardware para reduzir a cintilação da tela
- Três truques para reduzir a cintilação:
- não limpar a tela, e sim sobrescrevê-la
- escrever na saída padrão de uma só vez
- usar o protocolo Synchronized Output
- O Textual usa 60fps por padrão para oferecer animações suaves
DictViews são surpreendentes
- Os métodos
keys() e items() dos dicts do Python retornam KeysView e ItemsView
- É possível encontrar itens alterados com facilidade usando a diferença simétrica de um objeto
ItemsView
- No Textual, isso é usado para atualizações otimizadas quando propriedades CSS mudam
lru_cache é rápido
- O decorador
@lru_cache do módulo functools armazena em cache o valor de retorno de funções
- No Textual,
@lru_cache é usado em pequenas funções chamadas com frequência para melhorar o desempenho
- É preciso verificar as informações do cache (
cache_info()) para confirmar se o cache está sendo eficaz
Objetos imutáveis são os melhores
- Você pode obter os benefícios de objetos imutáveis usando tuplas,
NamedTuples ou dataclasses congeladas no Python
- Usar objetos imutáveis permite escrever código sem efeitos colaterais, o que facilita testes e cache
Arte Unicode é boa
- Diagramas com caracteres de caixa Unicode são muito úteis para documentação
- Quando usados com uma boa
docstring, ajudam bastante
Frações são exatas
- O módulo
fractions do Python evita erros de ponto flutuante
- No Textual, frações são usadas para dividir a tela por proporção e implementar layouts precisos
Emojis são terríveis
- O suporte a emojis no terminal é imprevisível e complexo
- Usa-se o banco de dados Unicode para verificar a largura dos emojis, mas emojis mais novos podem causar resultados imprevisíveis
- Emojis com múltiplos code points causam problemas ainda maiores
Resumo do GN⁺
- Este texto oferece dicas e truques úteis para o desenvolvimento de aplicações de terminal em Python
- Ele compartilha conselhos práticos obtidos com a experiência de desenvolvimento do framework Textual
- Explica como lidar com problemas complexos, como emojis, ajudando desenvolvedores
- Projetos com funcionalidades semelhantes incluem urwid e prompt_toolkit
1 comentários
Comentários do Hacker News
Quem desenvolve TUI acaba tratando Unicode, caracteres internacionais e emojis como um projeto à parte
rivo/tviewerivo/unisegIncomoda que o Textual tente imitar o React
Pela minha experiência usando o Textual, é preciso usar CSS
Essa TUI é bonita, mas não consigo imaginar uma situação real para usá-la
O kitty oferece mais recursos
Não entendo por que engenheiros de software se interessam tanto por TUI
O Monodraw é exclusivo do macOS, mas há boas alternativas em outras plataformas
"Sobrescrever, não apagar" era a forma antiga de desenvolver jogos
Há uma forma de estimar a versão do Unicode verificando a posição do cursor no terminal
wcwidthDepois de avaliar várias bibliotecas TUI, a FTXUI foi a mais fácil de usar e a mais confiável