termcourse: auf Discourse-Instanzen vom Terminal lesen & posten

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 erwägen Sie, 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 Website funktioniert.

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

Ü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-Websites.

Funktionen

  • Durchsuchen von Listen für Neueste / Beliebt / Neu / Ungelesen / Top-Themen, mit zyklischer Änderung der Top-Periode.
  • Öffnen von Themen über Pfeile + Enter oder Tastenkürzel (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-Min-Längen-Zähler.
  • Markdown-bewusstes Rendering, einschließlich umbrochener Links und Unterstützung für Inline-Bildvorschau (chafa / viu).
  • Emoji-Ersetzungen für gängige :emoji:-Tokens und :)-ähnliche Smileys.
  • Unterstützung für Anmeldeinformationen mehrerer Websites über Umgebungsvariablen + credentials.yml pro Host (mit Aufforderung bei fehlenden Anmeldefeldern).
  • Cookie-Sitzungs-Anmeldung mit Benutzername/Passwort und MFA-Unterstützung (TOTP + Backup-Code) sowie API-Schlüssel-Fallback.
  • YAML-gesteuerte Thematisierung mit integrierten Optionen (standard, 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

Anmerkungen zur Authentifizierung

  • 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 im Shell-Verlauf.
  • Die Protokollierung ist optional und standardmäßig deaktiviert.

Einschränkungen

  • Einige Websites sind nicht mit Benutzername/Passwort kompatibel, da sie geskriptete Remote-Anmelde-Flows verbieten.
  • Es läuft im Terminal

Danksagungen

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

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

3 „Gefällt mir“

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

3 „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:

5 „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

2 „Gefällt mir“

Ich habe dies gestern zusammengeführt:

  • Wenn Sie sich die Mühe machen, chafa oder viu zu installieren, werden Sie nun mit einer neuen Funktion belohnt: der Umschaltmöglichkeit „Ganzes Fenster“ für Beitragsbilder. Unter Windows ist dies besonders gut, da die Windows Terminal-App eine großzügige Farbtiefe unterstützt.

termcourse hat jetzt ein Pop-up für ungelesene PMs in der Statusleiste der Themenliste, und genau wie der Browser-Client sendet es gelesene Benachrichtigungen Beitrag für Beitrag zurück, während Sie den Cursor bewegen.

2 „Gefällt mir“

Ich habe Korrekturen für Themes unter macOS zusammengeführt

2 „Gefällt mir“

Schön… Läuft es auf einem Pip-Boy?

3 „Gefällt mir“

Fühlen Sie sich frei, das als PR einzureichen oder die Farb-Codes zu teilen, und ich werde sie zu den Beispiel-Themes in der yml hinzufügen :slight_smile:

2 „Gefällt mir“

Großartig! Zusammengeführt, danke!

2 „Gefällt mir“

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

Das Rendering war suuuuuuuper schlecht … also habe ich es behoben … die Benutzeroberfläche hat jetzt eine Diff-Darstellung, sodass sie viel schneller und flüssiger ist … sie malt nicht mehr den ganzen Bildschirm bei jeder Cursorbewegung.

Ich habe dies bisher nur unter Windows getestet, also meldet bitte alle Probleme zurück – aber es sollte langsamen Systemen erheblich helfen.

Ich habe auch einige Tests und GitHub CI hinzugefügt!

Hat jetzt ein Echtzeit-Benachrichtigungssystem, das auf MessageBus basiert, um Sie in der Statusleiste zu benachrichtigen, wenn die Themenliste neue Aktualisierungen hat (damit Sie g drücken können, um zu aktualisieren):

Werde wahrscheinlich als Nächstes an Themenlesezeichen arbeiten …

Das ist großartig!

Warum nicht dieselben Tastenkombinationen wie bei Discourse verwenden? Dann wäre die Erfahrung nahtloser :slight_smile:

1 „Gefällt mir“

Kein schlechter Gedanke … das ist definitiv wert, irgendwann einmal darauf zurückzukommen, um zu sehen, ob die Dinge sinnvoll näher zusammengeführt werden können :+1: … aber es gibt natürlich einige erhebliche Unterschiede im Medium, daher könnten einige Dinge unterschiedlich bleiben.

1 „Gefällt mir“