termcourse: leggi e pubblica su istanze Discourse dal terminale

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

:information_source: Sommario 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 continuativo 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, mettigli 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 con 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/rimuovi “mi piace” ai post con stato visivo del cuore per post.
  • Cerca post e salta direttamente al contesto di 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 del Markdown, inclusi link con wrapping 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 campi di accesso mancanti).
  • Accesso nome utente/password tramite sessione cookie con supporto MFA (TOTP + codice di backup), più fallback 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).
  • Logging di debug opzionale per diagnostica HTTP/auth e rendering UI.

Avvio Rapido

Vedi 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.
  • Il logging è su base volontaria e disattivato per impostazione predefinita.

Limitazioni

  • Alcuni siti non sono compatibili con nome utente/password perché vietano i flussi di accesso remoto scriptati.
  • Vive nel terminale

Riconoscimenti

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

23 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
3 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.

3 Mi Piace

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

3 Mi Piace

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

… e questo è “slate” (ardesia):

dettagli nel README :graduation_cap:

5 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

2 Mi Piace

Ho unito questo ieri:

  • Se ti prendi la briga di installare chafa o viu, ora sarai ricompensato con una nuova funzionalità: l’opzione “finestra intera” per le immagini dei post. Su Windows questo è particolarmente buono grazie alla generosa profondità di colore supportata nell’applicazione Windows Terminal.

termcourse ora ha un pop-up di stato PM non letto nella barra di stato dell’elenco degli argomenti e, proprio come il client del browser, invierà notifiche di lettura post per post man mano che si sposta il cursore

2 Mi Piace

Ho unito le correzioni per i temi su macOS

2 Mi Piace

Bello… Funziona su un Pip-Boy?

3 Mi Piace

sentiti libero di fare una PR a riguardo o di condividere i codici colore e li aggiungerò ai temi di esempio in yml :slight_smile:

2 Mi Piace

Adoro! Unito, grazie!

2 Mi Piace

https://github.com/merefield/termcourse/pull/2

Quindi il rendering faceva schifo… quindi l’ho sistemato… l’interfaccia utente ora ha il rendering delle differenze, quindi è molto più veloce e fluida… non dipinge più l’intero schermo a ogni movimento del cursore.

L’ho testato solo su Windows finora, quindi per favore segnalate eventuali problemi, ma dovrebbe aiutare significativamente i sistemi più lenti.

Ho anche aggiunto alcuni test e GitHub CI!

Ora dispone di un sistema di notifica in tempo reale basato su MessageBus per avvisarti nella barra di stato quando l’elenco degli argomenti ha nuovi aggiornamenti (in modo da poter premere g per aggiornare):

Probabilmente mi occuperò successivamente dei badge di lettura degli argomenti…

È fantastico!

Perché non usare le stesse scorciatoie da tastiera di Discourse? In modo che l’esperienza sia più fluida :slight_smile:

1 Mi Piace

Non è una cattiva idea… vale sicuramente la pena di dare un’occhiata a un certo punto per vedere se le cose possono essere avvicinate in modo sensato :+1: … ma ci sono ovviamente alcune differenze significative nei medium, quindi alcune cose potrebbero rimanere diverse.

1 Mi Piace