\> termcourse: leggi 'n pubblica su istanze Discourse dal terminale

Questa è un’app Terminale (TUI), solo per divertimento… ed è ancora un po’ sperimentale in questa fase!

:information_source: Riepilogo Un’interfaccia utente terminale per navigare e pubblicare sui forum Discourse con elenchi di argomenti, visualizzazioni complete degli argomenti, risposte, “mi piace”, ricerca e un compositore integrato.
:hammer_and_wrench: Link al Repository GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: Guida all’Installazione README.md nel repo (sezione Avvio Rapido)
:heart: Sponsorizzazione Si prega di prendere in considerazione di diventare uno sponsor continuo del mio lavoro open source (Sponsor @merefield on GitHub Sponsors · GitHub) a un livello che si adatti alle risorse e alle esigenze vostre o della vostra organizzazione per garantire che questo progetto riceva la manutenzione che merita e continui a funzionare per il vostro sito in futuro.

Ti piace termcourse? Per favore, metti una :star: su GitHub

Panoramica

> termcourse è un client basato su terminale per Discourse. Si comporta come una sessione browser leggera con accesso tramite cookie (nome utente/email + password) e supporta TOTP/codici di backup per l’autenticazione a più fattori (MFA). C’è anche un fallback tramite chiave API per siti bloccati o solo SSO.

Funzionalità

  • Sfoglia gli elenchi di argomenti Ultimi / Caldi / Nuovi / Non letti / Migliori, con ciclo del periodo per i Migliori.
  • Apri argomenti tramite frecce + Invio, o tasti rapidi numerici (1-0) per i primi 10 argomenti visibili.
  • Visualizza argomenti completi con post scorrevoli, intestazione/piè di pagina fissi e una barra di avanzamento/posizione del post.
  • Espandi i post selezionati al contenuto completo; i post non selezionati mostrano estratti compatti.
  • Rispondi a interi argomenti o a post specifici.
  • Crea nuovi argomenti con titolo, selettore di categoria e compositore di corpo inline.
  • Metti “mi piace”/“non mi piace” ai post con stato visivo del cuore per post.
  • Cerca post e salta direttamente al contesto dell’argomento/post corrispondente.
  • Il compositore inline supporta il movimento del cursore, l’inserimento, le nuove righe, il backspace e un contatore di lunghezza minima in tempo reale.
  • Rendering consapevole di Markdown, inclusi link con ritorno a capo e supporto per l’anteprima di immagini inline (chafa / viu).
  • Sostituzioni di emoji per i token :emoji: comuni e le faccine stile :-).
  • Supporto per credenziali multi-sito tramite variabili d’ambiente + file credentials.yml per host (con richiesta per i campi di accesso mancanti).
  • Accesso nome utente/password tramite sessione cookie con supporto MFA (TOTP + codice di backup), più fallback tramite chiave API.
  • Tematizzazione guidata da YAML con elementi integrati (default, slate, fairground) e override locali tramite theme.yml.
  • Ridimensionamento reattivo con intervallo di polling configurabile (TERMCOURSE_TICK_MS).
  • Registrazione di debug opzionale per diagnostica HTTP/auth e rendering UI.

Avvio Rapido

Consulta l’ultimo README per maggiori informazioni

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

Nome utente/password (consigliato)

bundle exec bin/termcourse tuo.host.discourse

Fallback chiave API

DISCOURSE_API_KEY=“tua_chiave” DISCOURSE_API_USERNAME=“tuo_username” 
bundle exec bin/termcourse tuo.host.discourse

Note sull’Autenticazione

  • L’accesso con nome utente/password utilizza una normale sessione in stile browser.
  • MFA supportato per TOTP e codici di backup.
  • Le chiavi API sono supportate come fallback.

Sicurezza

  • Le credenziali non vengono memorizzate; i cookie sono solo in memoria.
  • Le variabili d’ambiente o la risposta al prompt fornito evitano che le password rimangano nella cronologia della shell.
  • La registrazione è facoltativa e disabilitata per impostazione predefinita.

Limitazioni

  • Alcuni siti non sono compatibili con nome utente/password perché vietano il prompting remoto
  • Vive nel terminale

Crediti

Parzialmente ispirato da Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 Mi Piace

Così puoi accedere rapidamente a più siti (ovviamente una sessione alla volta per scheda) ho apportato i seguenti miglioramenti:

Miglioramenti all’autenticazione e alla configurazione di termcourse

  • Il percorso di accesso predefinito è ora nome utente/password.
  • Non è più necessario includere https:// - questo è facoltativo
  • I campi di accesso mancanti vengono richiesti in modo interattivo (ad esempio: nome utente noto, password mancante).
  • La guida della CLI include le variabili d’ambiente principali e le posizioni dei file di log di debug.

Credenziali e comportamento ENV

  • Supporta il file delle credenziali mappato all’host con ordine di ricerca:
    1. TERMCOURSE_CREDENTIALS_FILE (se impostato)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • Precedenza dell’autenticazione:
    1. Flag della CLI
    2. Credenziali host da YAML
    3. Variabili d’ambiente DISCOURSE_* generiche
    4. Richiesta interattiva
  • Per l’autenticazione: vengono richiesti i valori mancanti di nome utente/password per l’accesso.
  • Per l’autenticazione API, sia il nome utente API che la chiave devono risolversi in valori non vuoti.

Debug

  • Debug HTTP/autenticazione: TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
  • Debug rendering UI: TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt

Igiene del repository

  • Aggiunti credentials.example.yml e .env.example con esempi allineati.
  • Aggiunte voci .gitignore per i file segreti locali:
    • .env
    • credentials.yml
2 Mi Piace

Questo è piuttosto rudimentale ma funziona.

Devi avere installato viu o chafa, e quello può essere un progetto a sé stante :slight_smile:

In modalità alta qualità su chafa o con viu, Windows Terminal è superiore al terminale MacOS perché supporta molti più colori (grazie Microsoft!)

Note di rilascio: Rendering di immagini (nel terminale!)

Rendering di immagini

  • Aggiunte anteprime di immagini post in linea con selezione del backend:
    • prova prima chafa automaticamente, poi viu.
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable: output conservativo per la stabilità del terminale.
    • quality: rendering di simboli con dettagli/colori più elevati.
  • Aggiunto controllo dell’altezza di anteprima:
    • TERMCOURSE_IMAGE_LINES (default: 14)
    • Si applica all’altezza delle righe di anteprima; utile per ottimizzare la densità visiva.
  • Migliorato il comportamento dell’aspetto di viu:
    • Passato al rendering mirato per riga (-h) per preservare meglio il rapporto d’aspetto.
  • Aggiunti controlli del filtro di qualità dell’anteprima:
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 filtra le anteprime rumorose composte solo da blocchi.
    • Impostato a 0 per mostrare sempre l’output del renderer.
  • Aggiunto limite di sicurezza per il download di immagini:
    • TERMCOURSE_IMAGE_MAX_BYTES (default: 5242880)
    • Impedisce che i download di immagini di dimensioni eccessive influiscano sulle prestazioni.
  • Aggiunto supporto per i link di immagini Discourse upload://…:
    • Risolve automaticamente in /uploads/short-url/…
  • Migliorata la sanificazione/stabilità del terminale:
    • Mantiene i codici colore SGR validi dove necessario.
    • Rimuove le sequenze di controllo/grafica destabilizzanti.
    • Impedisce che i frammenti di escape ANSI vengano visualizzati come testo semplice.

Nota: ho trovato un sito che blocca nome utente/password remoti, quindi questo client non funzionerà in quella situazione (a meno che non sia di tua proprietà e tu possa impostare una chiave API!) - suggerimenti benvenuti, ma attualmente nessun supporto in quelle istanze.

Non sono sicuro che lo userò nel mondo reale, non ne vedo l’utilità per me, ma l’ho provato ed è delizioso. Adoro poter interagire con una piattaforma di forum di nuova generazione da un’interfaccia primitiva e “bare-metal”.

In qualche modo, è molto esteticamente gradevole.

1 Mi Piace

Sì, penso che potrebbe essere utile quando:

  • sei su una piattaforma a bassa fedeltà
  • stai armeggiando con un Raspberry Pi (non ancora testato, per tua informazione)
  • da un server per controllare che tu sia attivo… o se il codice del front-end sta crashando! :smiley:
  • per un sito Discourse molto basato sul testo…
  • … e come curiosità tecnica :slight_smile:

Stavo pensando di testarlo sul mio telefono con Terminus…

3 Mi Piace

OK, probabilmente ultimo aggiornamento per oggi:

  • l’interfaccia ora è reattiva al ridimensionamento della finestra :tada:
  • miglioramenti al contenuto nelle istruzioni della barra superiore
  • i tasti da 1 a (1)0 ora aprono l’argomento corrispondente nell’elenco degli argomenti

Ricorda di eseguire git pull per ottenere gli aggiornamenti.

2 Mi Piace

Amico, ora devo mettermi al lavoro sulla mia opera d’arte ASCII!!
¯\_(ツ)_/¯

2 Mi Piace

Ho aggiunto un sistema di temi completamente personalizzabile, questo è “fairground” (fiera):

… e questo è “slate” (ardesia):

dettagli nel README :graduation_cap:

4 Mi Piace

ok, ecco a voi ragazzi, alcuni succosi :tangerine: aggiornamenti:

  • aggiungi supporto per i messaggi privati - tocca f due volte :tada:
  • aggiungi colonne aggiuntive per Categoria, Utenti, Visualizzazioni, progressivamente quando la larghezza è espansa
  • modifica il tema per i separatori verticali
  • README aggiornato