Cores, estilos e reutilização - Série de consoles Spectre
O Spectre Console é um poderoso pacote NuGet for .NET que permite aos desenvolvedores transformar aplicativos de console simples em experiências visualmente ricas. Combinando cores, decorações de texto e estilos reutilizáveis do Spectre Console, você pode transformar a saída comum do console em algo informativo e sofisticado.
Em seu vídeo " Cores, Estilos e Reutilização – Série Spectre Console ", Tim Corey explica exatamente como fazer isso. Neste artigo, vamos abordar os mesmos pontos que Tim menciona, indicando os momentos específicos para que você possa acompanhar. Essa é uma ótima maneira de entender como criar e personalizar cores, uma classe de estilo e até mesmo um novo estilo para uso repetido.
Introdução à formatação do console do Spectre
Aos 0:00, Tim explica que o Spectre Console "permite transformar seus aplicativos de console em aplicativos visualmente atraentes e informativos". Ele observa que esta série divide a biblioteca em pequenas partes para que os desenvolvedores possam se concentrar em um recurso por vez.
Ele indica o link para o código-fonte na descrição e convida os usuários a se inscreverem em seu canal. Esta lição aborda como definir e retornar texto formatado na saída do console e como tornar esses formatos reutilizáveis em todo o seu programa.
Utilizando marcação embutida e linha de marcação
Aos 0:36, Tim começa demonstrando AnsiConsole.MarkupLine e AnsiConsole.Markup. Esses métodos permitem incorporar cores e decorações diretamente na sua representação em string.
Como Tim explica aos 0:51, o Markup não insere automaticamente uma nova linha, enquanto o MarkupLine sim — "É como usar Console.Write em vez de WriteLine". Essa diferença é importante quando você quer exibir vários itens ou uma lista em linhas separadas.
Ele digita [red]Esta é a marcação embutida[/] e a executa para mostrar uma string vermelha. Em seguida, aos 1:38, ele demonstra as cores de primeiro plano e de fundo — "Vermelho sobre Branco" — para que o usuário possa ver o texto vermelho em um fundo branco. Às 2h05, ele acrescenta negrito como decoração.
Tim observa em 2:18 que a marcação inline é rápida e fácil para pequenas ações, mas "não é realmente boa para todo o resto" quando você deseja um estilo mais estruturado ou reutilizável em várias funções.

Criando uma classe de estilo predefinida
Aos 2:32, Tim mostra como criar uma nova instância de uma classe de estilo para reutilização. Ele escreve:
var dangerStyle = new Style(
foreground: Color.Red,
background: Color.White,
decoration: Decoration.Bold);
var dangerStyle = new Style(
foreground: Color.Red,
background: Color.White,
decoration: Decoration.Bold);
Aqui, Tim está atribuindo uma variável chamada dangerStyle que contém um novo estilo com primeiro plano vermelho, fundo branco e decoração em negrito. Ele também observa em 3:26 que você não precisa preencher todos os argumentos — você pode escolher apenas o primeiro plano ou apenas a decoração, dependendo do que precisar.
Essa abordagem baseada em classes permite que você atualize seu estilo em um único lugar e o aplique de forma consistente em todos os locais onde o texto é renderizado, em vez de repetir tags de marcação.
Aplicando estilos com a nova marcação
Aos 3:48, Tim mostra como aplicar esse estilo. Como AnsiConsole.WriteLine não aceita estilos diretamente, você precisa usar AnsiConsole.Write com um novo objeto de marcação:
AnsiConsole.Write(
new Markup("Danger text from style", dangerStyle));
AnsiConsole.Write(
new Markup("Danger text from style", dangerStyle));
Aos 4:08, ele explica que WriteLine aceita apenas strings ou tipos simples, mas Write possui uma sobrecarga que aceita um objeto IRenderable. É por isso que você passa seu estilo para uma nova marcação e então a escreve.
Tim comenta às 4:45 que essa sintaxe "dá um pouco mais de trabalho", mas é a maneira oficial de exibir texto formatado. Ele sugere até mesmo criar seu próprio método para simplificar o processo, caso você faça isso com frequência.

Gerenciando quebras de linha e posicionamento do cursor
Após executar o código, Tim aponta, aos 5:44, que o cursor está posicionado na mesma linha que o texto formatado. Isso acontece porque o comando Write não adiciona uma nova linha. Aos 6:07, ele mostra como corrigir isso adicionando \n dentro da string, o que move o cursor para baixo.
Esse pequeno truque garante que a saída corresponda à sua expectativa — algo importante ao criar aplicativos de console maiores, onde a entrada do usuário ou os dados vêm depois de um prompt formatado.
Adicionando várias decorações
Em seguida, Tim demonstra como combinar decorações. Às 6h27, ele diz: "E se você quiser aplicar mais de uma decoração?" Por exemplo, também quero aplicar itálico." Você faz isso usando um único caractere de barra vertical para separar as decorações.
Ele mostra que você pode escolher entre uma longa lista de decorações — negrito, itálico, tachado, sublinhado, escurecido, inverter, piscar — e até menciona o suporte ao Windows PowerShell e ao Windows Terminal aos 7:05. Atualmente, o piscar lento e o piscar rápido têm a mesma aparência no Windows Terminal.
Às 7h29, ele executa o código novamente e mostra o estilo itálico aplicado além do negrito. "Você pode misturar e combinar esses elementos como quiser", diz Tim às 7:49, criando estilos que podem ser aplicados repetidamente.
Essa é uma funcionalidade poderosa quando você deseja destacar erros em vermelho, mensagens de sucesso em verde, avisos em amarelo ou rótulos personalizados em azul, roxo, orquídea ou até mesmo bordô — o Spectre Console é compatível com o conjunto completo de cores RGB.
Combinando estilos embutidos e predefinidos
Às 8h02, Tim demonstra como combinar textos e redações com estilos diferentes. Você pode chamar AnsiConsole.Write várias vezes — primeiro com o texto formatado e depois com o texto sem formatação ou com formatação diferente — para destacar apenas parte de uma linha. Ele mostra:
AnsiConsole.Write(new Markup("Danger text", dangerStyle));
AnsiConsole.WriteLine(" and more");
AnsiConsole.Write(new Markup("Danger text", dangerStyle));
AnsiConsole.WriteLine(" and more");
Como Tim explica às 8:37, é por isso que se usa Write em vez de WriteLine: você pode querer destacar apenas parte do seu texto antes de retornar ao estilo normal.

Essa função oferece uma maneira flexível de criar uma saída composta — como uma tabela de dados, uma barra de progresso para tarefas demoradas ou um painel com várias colunas — e aplicar estilos apenas a determinados itens ou rótulos.
Concluindo – Suas Opções
Às 9h01, Tim resume as opções:
- Use estilos embutidos com [color]text[/] e Markup ou MarkupLine para formatação rápida.
Ou crie um novo estilo com new Style() e aplique-o aos objetos Markup ao chamar AnsiConsole.Write.
Aos 9:26, Tim incentiva os espectadores a "experimentá-los com diferentes cores, planos de fundo, decorações e tudo mais". Isso inclui criar novas tabelas com cabeçalhos estilizados, adicionar uma barra de progresso que se atualiza conforme você processa arquivos ou matrizes de itens, ou até mesmo converter dados JSON em uma exibição estilizada.
Ele encerra às 9:33 agradecendo aos telespectadores e lembrando-os de que ele é Tim Corey. Esta série é baseada na biblioteca Spectre Console, criada por Patrik Svensson com contribuições de desenvolvedores como Phil Scott, e os vídeos de Tim ajudam você a dominar seus recursos rapidamente.
Conclusão
O vídeo de Tim Corey mostra claramente como o Spectre Console pega aplicativos de console comuns e os torna visualmente atraentes. Desde a marcação embutida até classes de estilo totalmente reutilizáveis, ele explica passo a passo como controlar as cores de primeiro plano e de fundo, as decorações de texto e o posicionamento do cursor.
Se você acompanhar os exemplos do Tim nos marcadores de tempo acima, conseguirá adicionar estilos com aparência profissional aos seus próprios aplicativos de console em pouco tempo, sem precisar adivinhar a sintaxe. E, uma vez que você saiba como atribuir variáveis, adicionar decorações e renderizar texto estilizado, poderá facilmente estender essas habilidades para criar tabelas, painéis, barras de progresso e outros recursos que o Spectre Console oferece.
Como diz Tim, "Experimente-os... e veja o que você gosta."
