termcourse: ler 'n postar em instâncias Discourse pelo terminal

Este é um aplicativo de Terminal (TUI), apenas por diversão… e um pouco experimental neste estágio!

:information_source: Resumo Uma interface de usuário de terminal para navegar e postar em fóruns Discourse com listas de tópicos, visualizações completas de tópicos, respostas, curtidas, pesquisa e um compositor integrado.
:hammer_and_wrench: Link do Repositório GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: Guia de Instalação README.md no repositório (seção Início Rápido)
:heart: Patrocínio Por favor, considere se tornar um patrocinador contínuo do meu trabalho de código aberto (Sponsor @merefield on GitHub Sponsors · GitHub) em um nível que se ajuste aos recursos e necessidades seus ou de sua organização para garantir que este projeto receba a manutenção que merece e continue funcionando para seu site no futuro.

Gostando do termcourse? Por favor, dê uma :star: no GitHub

Visão Geral

\u003e termcourse é um cliente baseado em terminal para Discourse. Ele se comporta como uma sessão de navegador leve com login baseado em cookie (nome de usuário/e-mail + senha) e suporta TOTP/códigos de backup para MFA. Há também uma opção de fallback de chave de API para sites bloqueados ou apenas com SSO.

Funcionalidades

  • Navegue pelas listas de tópicos Mais Recentes / Populares / Novos / Não Lidos / Principais, com ciclo de período dos Principais.
  • Abra tópicos usando setas + Enter, ou atalhos numéricos (1-0) para os primeiros 10 tópicos visíveis.
  • Visualize tópicos completos com postagens roláveis, cabeçalho/rodapé fixos e uma barra de progresso/posição da postagem.
  • Expanda postagens selecionadas para conteúdo completo; postagens não selecionadas mostram trechos compactos.
  • Responda a tópicos inteiros ou a postagens específicas.
  • Crie novos tópicos com título, seletor de categoria e compositor de corpo em linha.
  • Curta/descurta postagens com estado visual de coração por postagem.
  • Pesquise postagens e vá diretamente para o contexto de tópico/postagem correspondente.
  • O compositor em linha suporta movimento do cursor, inserção, novas linhas, backspace e um contador de comprimento mínimo ao vivo.
  • Renderização com reconhecimento de Markdown, incluindo links com quebra de linha e suporte a visualização de imagem em linha (chafa / viu).
  • Substituições de emoji para tokens comuns :emoji: e emoticons do tipo :)-style.
  • Suporte a credenciais multi-site via variáveis de ambiente + credentials.yml por host (com solicitação para campos de login ausentes).
  • Login com nome de usuário/senha de sessão de cookie com suporte a MFA (TOTP + código de backup), além de fallback de chave de API.
  • Tematização orientada por YAML com recursos internos (padrão, ardósia, feira) e substituições locais via theme.yml.
  • Redesenho de redimensionamento reativo com intervalo de pesquisa configurável (TERMCOURSE_TICK_MS).
  • Registro de depuração opcional para diagnósticos de HTTP/autenticação e renderização da IU.

Início Rápido

Consulte o README mais recente para mais informações

git clone https://github.com/merefield/termcourse
cd termcourse
bundle install

Nome de usuário/senha (recomendado)

bundle exec bin/termcourse seu.host.discourse

Fallback de chave de API

DISCOURSE_API_KEY=“sua_chave” DISCOURSE_API_USERNAME=“seu_nome_de_usuario” 
bundle exec bin/termcourse seu.host.discourse

Notas de Autenticação

  • O login com nome de usuário/senha usa uma sessão normal estilo navegador.
  • MFA suportado para TOTP e códigos de backup.
  • Chaves de API são suportadas como fallback.

Segurança

  • As credenciais não são armazenadas; os cookies são apenas em memória.
  • Variáveis de ambiente ou responder ao prompt fornecido evitam senhas no histórico do shell.
  • O registro é opcional e desativado por padrão.

Limitações

  • Alguns sites não são compatíveis com nome de usuário/senha porque proíbem o prompt remoto
  • Ele vive no terminal

Créditos

Parcialmente inspirado por Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 curtidas

Para que você possa fazer login rapidamente em vários sites (obviamente uma sessão por vez por aba), fiz as seguintes melhorias:

Melhorias de autenticação e configuração do termcourse

  • O caminho de login padrão agora é nome de usuário/senha.
  • Você não precisa mais incluir https:// — isso é opcional
  • Campos de login ausentes são solicitados interativamente (por exemplo: nome de usuário conhecido, senha ausente).
  • A ajuda da CLI inclui variáveis de ambiente principais e locais de arquivos de log de depuração.

Credenciais e comportamento de ENV

  • Suporta arquivo de credenciais mapeado por host com ordem de pesquisa:
    1. TERMCOURSE_CREDENTIALS_FILE (se definido)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • Precedência de autenticação:
    1. Sinalizadores da CLI
    2. Credenciais do host do YAML
    3. Variáveis de ambiente DISCOURSE_* genéricas
    4. Solicitação interativa
  • Para autenticação: ao fazer login, valores ausentes de nome de usuário/senha são solicitados.
  • Para autenticação de API, tanto o nome de usuário da API quanto a chave devem resultar em valores não vazios.

Depuração

  • Depuração de HTTP/autenticação: TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
  • Depuração de renderização de UI: TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt

Higiene do repositório

  • Adicionados credentials.example.yml e .env.example com exemplos alinhados.
  • Adicionadas entradas .gitignore para arquivos secretos locais:
    • .env
    • credentials.yml
2 curtidas

Isto é bem rudimentar, mas funciona.

Você precisa ter o viu ou o chafa instalados - e isso pode ser um projeto em si :slight_smile:

No modo de alta qualidade no chafa ou com o viu, o Windows Terminal é superior ao terminal do MacOS porque suporta muito mais cores (obrigado Microsoft!)

Notas de Lançamento: Renderização de Imagem (no terminal!)

Renderização de Imagem

  • Adicionadas pré-visualizações de imagem de postagem em linha com seleção de backend:
    • tenta o chafa primeiro automaticamente, depois o viu.
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable: saída conservadora para estabilidade do terminal.
    • quality: renderização de símbolos com detalhes/cores mais altos.
  • Adicionado controle de altura da pré-visualização:
    • TERMCOURSE_IMAGE_LINES (padrão: 14)
    • Aplica-se à altura da linha de pré-visualização; útil para ajustar a densidade visual.
  • Comportamento de aspecto do viu aprimorado:
    • Mudou para renderização direcionada por linha (-h) para preservar melhor a proporção.
  • Adicionados controles de filtro de qualidade de pré-visualização:
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 filtra pré-visualizações barulhentas apenas com blocos.
    • Defina como 0 para sempre mostrar a saída do renderizador.
  • Adicionado limite de segurança para download de imagem:
    • TERMCOURSE_IMAGE_MAX_BYTES (padrão: 5242880)
    • Impede que downloads de imagens grandes demais afetem o desempenho.
  • Adicionado suporte para links de imagem upload://... do Discourse:
    • Resolve automaticamente para /uploads/short-url/....
  • Sanitização/estabilidade do terminal aprimorada:
    • Mantém códigos de cores SGR válidos onde necessário.
    • Remove sequências de controle/gráficas desestabilizadoras.
    • Impede que fragmentos de escape ANSI sejam exibidos como texto puro.

Uma observação: encontrei um site que bloqueia nome de usuário/senha remotos, então este cliente não funcionará nessa situação (a menos que você o possua e possa definir uma chave de API!) - sugestões são bem-vindas, mas atualmente não há suporte nessas instâncias.

Não tenho certeza se usarei isso no mundo real, não vejo a utilidade para mim, mas experimentei e é delicioso. Adoro poder interagir com uma plataforma de fórum de próxima geração a partir de uma interface primitiva e bare-metal.

De certa forma, é muito esteticamente agradável.

1 curtida

Sim, estou pensando que pode ser útil quando:

  • você está em uma plataforma de baixa fidelidade
  • mexendo em um Raspberry Pi (ainda não testado, a propósito)
  • de um servidor para verificar se você está ativo… ou se o código do front-end está travando! :smiley:
  • para um site Discourse que é muito baseado em texto…
  • … e como uma curiosidade técnica :slight_smile:

Eu estava querendo testá-lo no meu celular com o Terminus…

3 curtidas

OK, provavelmente a última atualização de hoje:

  • A interface agora é responsiva ao redimensionamento da janela :tada:
  • Melhorias no conteúdo das instruções da barra superior
  • As teclas de 1 a (1)0 agora abrem o tópico correspondente na lista de tópicos

Lembre-se de usar git pull para obter as atualizações.

2 curtidas

Cara, agora eu tenho que começar a trabalhar na minha arte ASCII!!
¯\_(ツ)_/¯

2 curtidas

Adicionei um sistema de temas totalmente personalizável, este é o “fairground” (carrinho de feira):

… e este é o “slate” (ardósia):

Detalhes no README :graduation_cap:

4 curtidas

ok, vamos lá pessoal, algumas atualizações :tangerine: suculentas:

  • adicionar suporte para Mensagens Privadas - toque em f duas vezes :tada:
  • adicionar colunas adicionais para Categoria, Usuários, Visualizações, progressivamente quando a largura for expandida
  • ajustar a temática para separadores verticais
  • README atualizado