Dies ist eine Terminal-App (TUI), einfach ein bisschen Spaß … und in dieser Phase noch etwas experimentell!
| Zusammenfassung | Eine Terminal-UI zum Durchsuchen und Posten in Discourse-Foren mit Themenlisten, vollständigen Themenansichten, Antworten, Likes, Suche und einem integrierten Composer. | |
| Repository-Link | GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token) · GitHub | |
| Installationsanleitung | README.md im Repository (Abschnitt Quickstart) | |
| Sponsoring | Bitte erwäge, ein dauerhafter Sponsor meiner Open-Source-Arbeit zu werden (Sponsor @merefield on GitHub Sponsors · GitHub) – auf einer Ebene, die zu den Ressourcen und Bedürfnissen deiner Person oder deiner Organisation passt, um sicherzustellen, dass dieses Projekt die Wartung erhält, die es verdient, und in Zukunft weiterhin für deine Seite funktioniert. |
Nimmst du gerne termcourse? Bitte gib ihm einen
auf GitHub
Übersicht
termcourse ist ein terminalbasierter Discourse-Client, der als einzelne Go-Executable neu aufgebaut wurde. Er kann eine leichte, browserähnliche Cookie-Session mit Benutzername/E-Mail und Passwort verwenden, einschließlich TOTP und Backup-Code-MFA. Die Authentifizierung per API-Schlüssel ist für Seiten verfügbar, für die ein interaktiver Login ungeeignet ist.
Die Oberfläche verwendet den aktuellen Charm-Stack und funktioniert sowohl mit Tastatur als auch mit Maus. Die ordnerbasierte Navigation, kontextabhängigen Filter, reaktiven Panels, thematisierten Steuerelemente, Markdown-Rendering und Inline-Bilder sind so konzipiert, dass das Durchsuchen eines Forums bequem möglich ist, ohne das Terminal zu verlassen.
Funktionen
- Durchsuchen der Themenlisten Latest, Hot, New, Unread, Top und Private Message, mit Zyklieren der Top-Periode.
- Navigieren in den persistenten Ordnern Topics, Search, Notifications und Compose, mit kontextabhängigen Zweitstufen-Filtern.
- Durchgehend die Tastatur verwenden oder auf Tabs, Themenzeilen, Fußzeilen-Steuerelemente und hervorgehobene Buttons klicken.
- Sichtbare Themen mit Enter oder den Zifferntasten
1–0öffnen. - Vollständige Themen mit Lazy-Post-Loading, kompakten Auszügen, erweiterten ausgewählten Posts und reaktivem Scrolling lesen.
- Auf den Fortschrittsbalken eines Themas klicken, um direkt zu diesem Punkt im Post-Stream zu springen.
- Themen erstellen, Kategorien auswählen, auf Themen oder einzelne Posts antworten und Posts liken oder den Like entfernen.
- Posts durchsuchen und direkt zum passenden Post in seinem Themenkontext springen.
- Benachrichtigungen durchsuchen und filtern, einschließlich ungelesener und privater Nachrichten-Badges.
- Mehrzeiligen Inhalt mit Cursorbewegung, Einfügen, Zeilenumbruch, Paste-Unterstützung und Live-Validierung erstellen.
- GFM-Markdown rendern, einschließlich Links, Listen, Zitate, Code, Aufgabenlisten und Tabellen.
- Hochwertige Inline- und Vollbildbilder mit dem Kitty-Grafikprotokoll anzeigen, mit farbigen
chafa-Symbolen oderviuals portablen Fallbacks. - Echtzeit-Updates für Themenlisten, Themen, Benachrichtigungen und private Nachrichten erhalten, wenn eine Cookie-Session verwendet wird.
- Seiten-spezifische Anmeldedaten aus der Umgebung oder
credentials.ymlverwenden, mit Eingabeaufforderungen für fehlende Login-Felder. - Aus den Themen
default,slate,fairground,rustundhackerwählen, YAML-Themen hinzufügen und Themen während der Laufzeit der App wechseln. - Truecolor-, 256-Farb- oder 16-Farb-Ausgabe mit automatischer Erkennung der Terminalfähigkeiten verwenden.
- Die Oberfläche auf Englisch, Französisch, Deutsch oder Spanisch ausführen.
- Das Terminal frei vergrößern: Layouts, Farben, Themenlisten und Kitty-Bilder reagieren auf den verfügbaren Platz.
- Vom Server bereitgestellte Wiederholungszeiten anzeigen, wenn Discourse eine Aktion rate-limitet, mit optionalen HTTP-, UI- und Bild-Diagnosen.
Installation und Ausführung
Auf Linux oder macOS lädt der empfohlene Installer die vorab gebaute Release-Version für das aktuelle Betriebssystem und die Architektur herunter, verifiziert dessen SHA-256-Prüfsumme und die gemeldete Version und installiert sie dann:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh | sh
termcourse your.discourse.host
Termcourse fragt nach Benutzernamen und Passwort, wenn die Anmeldedaten noch nicht konfiguriert wurden. Die Passworteingabe wird ausgeblendet.
Verwende termcourse --version, um die installierte semantische Version anzuzeigen; dieselbe Version erscheint in der breiten Terminal-Kopfzeile.
Für eine benutzerlokale Installation, die kein sudo erfordert:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh |
TERMCOURSE_BIN_DIR="$HOME/.local/bin" sh
Jedes GitHub-Release bietet SHA-256-Prüfsummen und vorab gebaute Archive für Linux, macOS und Windows auf AMD64 und ARM64. Linux/macOS verwenden .tar.gz; Windows verwendet .zip. Vorab gebaute Releases erfordern kein Go.
Auf Windows den Installer herunterladen und inspizieren, dann ausführen, ohne die maschinenweite Ausführungspolitik zu ändern:
Invoke-WebRequest https://raw.githubusercontent.com/merefield/termcourse/master/install-release.ps1 -OutFile install-release.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-release.ps1
Standardmäßig wird in %LOCALAPPDATA%\Programs\termcourse\bin installiert und dieselbe Prüfsummen- und Versionsverifizierung durchgeführt. Die Installer können auch eine Release-Version mit --version oder -Version festlegen. Go 1.26.6 oder neuer ist nur erforderlich, wenn aus dem Quellcode installiert wird.
Um stattdessen eine lokale Executable aus einem Checkout zu erstellen:
git clone https://github.com/merefield/termcourse.git
cd termcourse
make build
./termcourse your.discourse.host
Für wiederholte Verwendung die Anmeldeinformationen in einer lokalen .env ablegen oder die im README beschriebene host-spezifische credentials.yml verwenden.
Login mit Benutzername/Passwort (empfohlen)
Der Login mit Benutzername/Passwort aktiviert Echtzeit-Updates:
DISCOURSE_USERNAME="you@example.com" \
DISCOURSE_PASSWORD="your_password" \
termcourse your.discourse.host
Fallback mit API-Schlüssel
DISCOURSE_API_KEY="your_key" \
DISCOURSE_API_USERNAME="your_username" \
termcourse your.discourse.host
Siehe das aktuelle README für Konfiguration, Themen, Steuerelemente, Bild-Backends und Fehlerbehebung.
Hinweise zur Authentifizierung
- Der Login mit Benutzername/Passwort folgt dem CSRF- und Cookie-Flow von Discourse und aktiviert Echtzeit-MessageBus-Updates.
- TOTP- und Backup-Code-MFA werden unterstützt.
- Die Authentifizierung per API-Schlüssel behält die HTTP-Funktionalität bei, stellt aber keine Echtzeit-Browser-Session her.
- Einige Seiten deaktivieren oder beschränken skriptbasierte Logins mit Benutzername/Passwort; API-Anmeldedaten sind der Fallback für diese Seiten.
Sicherheit
- Termcourse schreibt abgefragte Anmeldedaten oder Session-Cookies nicht auf die Festplatte; Session-Cookies bleiben im Speicher.
- Die Passworteingabe hält das Passwort aus der Shell-Verlaufshistorie heraus.
- Persistente Anmeldedaten sind optional und bleiben unter der Kontrolle des Benutzers in Umgebungs- oder YAML-Dateien.
- Diagnose-Logging ist optional, standardmäßig deaktiviert und protokolliert keine Anmeldedaten oder Antwortkörper.
Einschränkungen
- Seiten, die Remote-Login-Flows verbieten, erfordern möglicherweise die Authentifizierung per API-Schlüssel.
- Echtzeit-Updates erfordern die Cookie-Authentifizierung mit Benutzername/Passwort.
- Die Qualität nativer Inline-Bilder hängt von der Terminal-Unterstützung ab; Kitty wird bevorzugt, mit Symbol-Rendering als Alternative.
- Es lebt im Terminal.

Credits
Teilweise inspiriert von Dumbcourse: alte browserfreundliche UI auf dummen/d-Pad/kleinen Bildschirmen. ![]()





