termcourse: 'n Beiträge auf Discourse-Instanzen vom Terminal lesen

Dies ist eine Terminal-App (TUI), nur zum Spaß … und im Moment noch etwas experimentell!

:information_source: Zusammenfassung Eine Terminal-UI zum Durchsuchen und Posten in Discourse-Foren mit Themenlisten, vollständigen Themenansichten, Antworten, Likes, Suche und einem integrierten Composer.
:hammer_and_wrench: Repository-Link GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: Installationsanleitung README.md im Repo (Abschnitt „Quickstart“)
:heart: Sponsoring Bitte ziehen Sie in Betracht, ein regelmäßiger Sponsor meiner Open-Source-Arbeit zu werden (Sponsor @merefield on GitHub Sponsors · GitHub) auf einem Niveau, das Ihren oder den Ressourcen und Bedürfnissen Ihrer Organisation entspricht, um sicherzustellen, dass dieses Projekt die Wartung erhält, die es verdient, und weiterhin für Ihre Seite funktioniert.

Gefällt Ihnen termcourse? Bitte geben Sie ihm auf GitHub einen :star:

Übersicht

> termcourse ist ein terminalbasiertes Client für Discourse. Es verhält sich wie eine leichtgewichtige Browsersitzung mit Cookie-basierter Anmeldung (Benutzername/E-Mail + Passwort) und unterstützt TOTP/Backup-Codes für MFA. Es gibt auch einen API-Schlüssel-Fallback für gesperrte oder nur SSO-Seiten.

Funktionen

  • Durchsuchen von Listen für Neueste / Hot / Neu / Ungelesen / Top-Themen, mit zyklischer Anzeige der Top-Zeiträume.
  • Öffnen von Themen über Pfeile + Enter oder Hotkeys für Zahlen (1-0) für die ersten 10 sichtbaren Themen.
  • Anzeigen vollständiger Themen mit scrollbaren Beiträgen, einem fixierten Kopf-/Fußzeilenbereich und einer Beitragspositions-/Fortschrittsanzeige.
  • Erweitern ausgewählter Beiträge auf den vollständigen Inhalt; nicht ausgewählte Beiträge zeigen kompakte Auszüge.
  • Antworten auf ganze Themen oder bestimmte Beiträge.
  • Erstellen neuer Themen mit Titel, Kategorieauswahl und Inline-Body-Composer.
  • Liken/Entliken von Beiträgen mit visuellem Herzstatus pro Beitrag.
  • Durchsuchen von Beiträgen und direktes Springen zum entsprechenden Themen-/Beitrags-Kontext.
  • Der Inline-Composer unterstützt Cursorbewegung, Einfügen, neue Zeilen, Rücktaste und einen Live-Zähler für die Mindestlänge.
  • Markdown-fähiges Rendering, einschließlich umbrochener Links und Unterstützung für Inline-Bildvorschau (chafa / viu).
  • Emoji-Ersetzungen für gängige :emoji:-Tokens und :)-ähnliche Emoticons.
  • Unterstützung für Anmeldeinformationen für mehrere Sites über Umgebungsvariablen + credentials.yml pro Host (mit Aufforderung bei fehlenden Anmeldefeldern).
  • Cookie-Sitzungs-Anmeldung per Benutzername/Passwort mit MFA-Unterstützung (TOTP + Backup-Code) sowie API-Schlüssel-Fallback.
  • YAML-gesteuerte Thematisierung mit integrierten Optionen (default, slate, fairground) und lokalen Überschreibungen über theme.yml.
  • Reaktives Größenänderungs-Neuzeichnen mit konfigurierbarem Abrufintervall (TERMCOURSE_TICK_MS).
  • Optionale Debug-Protokollierung für HTTP/Authentifizierung und UI-Rendering-Diagnosen.

Schnellstart

Weitere Informationen finden Sie in der neuesten README

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

Benutzername/Passwort (empfohlen)

bundle exec bin/termcourse your.discourse.host

API-Schlüssel-Fallback

DISCOURSE_API_KEY=“your_key” DISCOURSE_API_USERNAME=“your_username” 
bundle exec bin/termcourse your.discourse.host

Authentifizierungshinweise

  • Die Anmeldung mit Benutzername/Passwort verwendet eine normale browserspezifische Sitzung.
  • MFA wird für TOTP und Backup-Codes unterstützt.
  • API-Schlüssel werden als Fallback unterstützt.

Sicherheit

  • Anmeldeinformationen werden nicht gespeichert; Cookies sind nur im Speicher.
  • Umgebungsvariablen oder die Beantwortung der bereitgestellten Aufforderung vermeiden Passwörter in der Shell-Historie.
  • Die Protokollierung ist opt-in und standardmäßig deaktiviert.

Einschränkungen

  • Einige Websites sind nicht mit Benutzername/Passwort kompatibel, da sie die Remote-Aufforderung verbieten
  • Es läuft im Terminal

Danksagungen

Teilweise inspiriert von Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 „Gefällt mir“

Damit Sie sich schnell bei mehreren Websites anmelden können (natürlich jeweils eine Sitzung pro Tab), habe ich folgende Verbesserungen vorgenommen:

Verbesserungen bei termcourse-Authentifizierung und -Konfiguration

  • Der Standard-Anmeldepfad ist jetzt Benutzername/Passwort.
  • Sie müssen https:// nicht mehr angeben – dies ist optional.
  • Fehlende Anmeldefelder werden interaktiv abgefragt (z. B. Benutzername bekannt, Passwort fehlt).
  • Die CLI-Hilfe enthält die wichtigsten Umgebungsvariablen und Speicherorte der Debug-Protokolldateien.

Anmeldeinformationen und ENV-Verhalten

  • Unterstützt host-zugeordnete Anmeldeinformationsdatei mit Suchreihenfolge:
    1. TERMCOURSE_CREDENTIALS_FILE (falls gesetzt)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • Authentifizierungs-Präzedenz:
    1. CLI-Flags
    2. Host-Anmeldeinformationen aus YAML
    3. Allgemeine DISCOURSE_* Umgebungsvariablen
    4. Interaktive Abfrage
  • Für die Authentifizierung: Fehlende Werte für Benutzername/Passwort werden abgefragt.
  • Für die API-Authentifizierung müssen sowohl der API-Benutzername als auch der Schlüssel zu nicht leeren Werten aufgelöst werden.

Debugging

  • HTTP/Auth-Debug: TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
  • UI-Rendering-Debug: TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt

Repository-Hygiene

  • credentials.example.yml und .env.example mit abgestimmten Beispielen hinzugefügt.
  • .gitignore-Einträge für lokale geheime Dateien hinzugefügt:
    • .env
    • credentials.yml
2 „Gefällt mir“

Das ist ziemlich Low-Fi, aber es funktioniert.

Sie müssen viu oder chafa installiert haben – was selbst schon ein Projekt sein kann :slight_smile:

Im High-Quality-Modus mit chafa oder mit viu ist das Windows Terminal dem MacOS Terminal überlegen, da es viel mehr Farben unterstützt (danke Microsoft!)

Versionshinweise: Bilddarstellung (im Terminal!)

Bilddarstellung

  • Inline-Vorschauen für Bilder mit Backend-Auswahl hinzugefügt:
    • Versucht zuerst chafa, dann viu.
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable: konservative Ausgabe für Terminal-Stabilität.
    • quality: detailliertere/farbige Symbol-Darstellung.
  • Steuerung der Vorschauhöhe hinzugefügt:
    • TERMCOURSE_IMAGE_LINES (Standard: 14)
    • Gilt für die Höhe der Vorschauzeilen; nützlich zur Anpassung der visuellen Dichte.
  • Verbessertes viu-Aspektverhalten:
    • Wechsel zu zeilenorientierter Darstellung (-h), um das Seitenverhältnis besser beizubehalten.
  • Steuerung für den Vorschauqualitätsfilter hinzugefügt:
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 filtert verrauschte, nur aus Blöcken bestehende Vorschauen.
    • Auf 0 setzen, um immer die Ausgabe des Renderers anzuzeigen.
  • Sicherheitslimit für Bild-Downloads hinzugefügt:
    • TERMCOURSE_IMAGE_MAX_BYTES (Standard: 5242880)
    • Verhindert, dass das Herunterladen übergroßer Bilder die Leistung beeinträchtigt.
  • Unterstützung für Discourse upload://… Bild-Links hinzugefügt:
    • Wird automatisch zu /uploads/short-url/… aufgelöst.
  • Terminal-Bereinigung/Stabilität verbessert:
    • Behält gültige SGR-Farb-Codes bei, wo nötig.
    • Entfernt destabilisierende Steuer-/Grafiksequenzen.
    • Verhindert, dass ANSI-Escape-Fragmente als reiner Text angezeigt werden.

Eine Anmerkung: Ich habe eine Seite gefunden, die Benutzername/Passwort-Anmeldungen aus der Ferne blockiert. Dieser Client funktioniert in dieser Situation also nicht (es sei denn, Sie besitzen die Seite und können einen API-Schlüssel festlegen!) – Vorschläge sind willkommen, aber derzeit gibt es in diesen Fällen keine Unterstützung.

Ich bin mir nicht sicher, ob ich das in der Praxis verwenden werde, ich sehe keinen Nutzen für mich, aber ich habe es ausprobiert und es ist entzückend. Ich liebe es, mit einer Forum-Plattform der nächsten Generation von einer Bare-Metal-, primitiven Oberfläche aus interagieren zu können.

In gewisser Weise ist es sehr ästhetisch ansprechend.

1 „Gefällt mir“

Ja, ich denke, es könnte nützlich sein, wenn:

  • Sie auf einer Low-Fi-Plattform sind
  • Sie auf einem Raspberry Pi herumspielen (noch nicht getestet, nur zur Info)
  • von einem Server aus, um zu prüfen, ob Sie online sind … oder ob der Frontend-Code abstürzt! :smiley:
  • für eine Discourse-Seite, die sehr textbasiert ist …
  • … und als technische Spielerei :slight_smile:

Ich wollte es schon auf meinem Handy mit Terminus testen …

3 „Gefällt mir“

OK wahrscheinlich letztes Update für heute:

  • Die Benutzeroberfläche reagiert jetzt auf Fenstergrößenänderungen :tada:
  • Verbesserungen des Inhalts in den Anweisungen der oberen Leiste
  • Die Tasten 1 bis (1)0 öffnen das entsprechende Thema in der Themenliste

Denken Sie daran, git pull auszuführen, um Updates zu erhalten.

2 „Gefällt mir“

Mann, jetzt muss ich mit meiner ASCII-Kunst anfangen!!
¯\_(ツ)_/¯

2 „Gefällt mir“

Ich habe ein vollständig anpassbares Theming-System hinzugefügt, dies ist „fairground“:

… und dies ist „slate“:

Details in der README :graduation_cap:

4 „Gefällt mir“

ok hier geht’s los, ein paar saftige :tangerine: Updates:

  • Unterstützung für private Nachrichten hinzugefügt - zweimal auf f tippen :tada:
  • zusätzliche Spalten für Kategorie, Benutzer, Ansichten hinzugefügt, progressiv bei erweiterter Breite
  • Theming für vertikale Trennlinien angepasst
  • README aktualisiert