これはターミナルアプリ(TUI)です。少しの遊び心と、現時点での実験的な要素を含んでいます。
| サマリー | トピック一覧、トピック全体の表示、返信、いいね、検索、組み込みエディタを備えた、Discourseフォーラムの閲覧と投稿のためのターミナルUI。 | |
| リポジトリリンク | GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token) · GitHub | |
| インストールガイド | リポジトリ内のREADME.md(クイックスタートセクション) | |
| スポンサーシップ | 私のオープンソース活動への継続的なスポンサーとして、あなたやあなたの組織のリソースやニーズに合ったレベルで支援を検討してください。これにより、このプロジェクトが適切なメンテナンスを受け、将来もあなたのサイトで機能し続けることが保証されます(https://github.com/sponsors/merefield)。 |
termcourseを楽しんでいますか?GitHubで:star:をお願いします。
概要
termcourseは、単一のGo実行ファイルとして再構築されたターミナルベースのDiscourseクライアントです。ユーザー名/メールアドレスとパスワードによる軽量なブラウザ風クッキーセッションを使用でき、TOTPおよびバックアップコードによるMFAにも対応しています。対話的なログインが不適切なサイトでは、APIキーによる認証も利用可能です。
インターフェースは現在のCharmスタックを使用し、キーボードとマウス両方で操作できます。フォルダ風のナビゲーション、コンテキストフィルタ、レスポンシブなパネル、テーマ付きコントロール、Markdownレンダリング、インライン画像は、ターミナルから離れずにフォーラムを快適に閲覧できるように設計されています。
機能
- Latest、Hot、New、Unread、Top、Private Messageのトピック一覧を閲覧し、Top期間を切り替えられます。
- 永続的なTopics、Search、Notifications、Composeフォルダをナビゲートし、コンテキストに応じた2階層フィルタを使用できます。
- 全体でキーボードを使用するか、タブ、トピック行、フッターコントロール、ホバーハイライトされたボタンをクリックできます。
- Enterキーまたは数字キー
1–0で表示中のトピックを開きます。 - レイジーローディング、コンパクトな抜粋、選択された投稿の展開、レスポンシブなスクロールにより、完全なトピックを読み取れます。
- トピックの進捗トラックをクリックして、投稿ストリーム内のそのポイントに直接ジャンプできます。
- トピックを作成し、カテゴリを選択し、トピックや個別の投稿に返信し、投稿にいいねをつけたり外したりできます。
- 投稿を検索し、そのトピックのコンテキスト内で該当する投稿に直接ジャンプできます。
- 未読やプライベートメッセージのバッジを含む通知を閲覧・フィルタリングできます。
- カーソル移動、挿入、折り返し、ペーストサポート、ライブバリデーションを使用して、複数行のコンテンツを作成できます。
- リンク、リスト、引用、コード、タスクリスト、テーブルを含むGFM Markdownをレンダリングします。
- Kittyグラフィックスプロトコルを使用して高品質なインラインおよびフルスクリーン画像を表示し、ポータブルなフォールバックとしてカラー付き
chafaシンボルまたはviuを使用します。 - クッキーセッションを使用している場合、リアルタイムでトピック一覧、トピック、通知、プライベートメッセージの更新を受信します。
- 環境変数または
credentials.ymlからのサイト別認証情報を使用し、欠落したログイン項目にはプロンプトが表示されます。 default、slate、fairground、rust、hackerテーマから選択し、YAMLテーマを追加し、アプリ実行中にテーマを切り替えられます。- 自動的なターミナル機能検出により、トゥルーカラー、256色、16色の出力を使用できます。
- インターフェースを英語、フランス語、ドイツ語、スペイン語で実行できます。
- ターミナルを自由にリサイズできます:レイアウト、カラー、トピック一覧、Kitty画像は利用可能なスペースに反応します。
- Discourseがアクションをレート制限した場合、サーバーが提供するリトライタイミングを表示し、オプションでHTTP、UI、画像の診断情報を表示します。
インストールと実行
LinuxまたはmacOSでは、推奨されるインストーラーは現在のOSとアーキテクチャ向けの事前構築リリースをダウンロードし、SHA-256チェックサムと報告されたバージョンを検証してからインストールします:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh | sh
termcourse your.discourse.host
認証情報がまだ設定されていない場合、Termcourseはユーザー名とパスワードの入力を求めます。パスワード入力は非表示になります。
インストールされたセマンティックバージョンを表示するにはtermcourse --versionを使用します。同じバージョンは広いターミナルのマストヘッドにも表示されます。
sudoを必要としないユーザーローカルなインストールを行うには:
curl -fsSL https://raw.githubusercontent.com/merefield/termcourse/master/install-release.sh |
TERMCOURSE_BIN_DIR="$HOME/.local/bin" sh
各GitHubリリースには、AMD64とARM64向けのLinux、macOS、Windows用のSHA-256チェックサムと事前構築アーカイブが提供されています。Linux/macOSは.tar.gz、Windowsは.zipを使用します。事前構築リリースにはGoは不要です。
Windowsでは、インストーラーをダウンロードして検査し、マシン全体の実行ポリシーを変更せずに実行します:
Invoke-WebRequest https://raw.githubusercontent.com/merefield/termcourse/master/install-release.ps1 -OutFile install-release.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-release.ps1
デフォルトでは%LOCALAPPDATA%\Programs\termcourse\binにインストールされ、同じチェックサムとバージョン検証が行われます。インストーラーは--versionまたは-Versionを使用してリリースを固定することもできます。ソースからインストールする場合のみ、Go 1.26.6以降が必要です。
代わりにチェックアウトからローカル実行ファイルをビルドするには:
git clone https://github.com/merefield/termcourse.git
cd termcourse
make build
./termcourse your.discourse.host
繰り返し使用する場合、ログイン情報をローカルの.envに格納するか、READMEで説明されているホスト別のcredentials.ymlを使用してください。
ユーザー名/パスワードログイン(推奨)
ユーザー名/パスワードログインはリアルタイム更新を有効にします:
DISCOURSE_USERNAME="you@example.com" \
DISCOURSE_PASSWORD="your_password" \
termcourse your.discourse.host
APIキーフォールバック
DISCOURSE_API_KEY="your_key" \
DISCOURSE_API_USERNAME="your_username" \
termcourse your.discourse.host
設定、テーマ、コントロール、画像バックエンド、トラブルシューティングについては、最新のREADMEを参照してください。
認証に関する注記
- ユーザー名/パスワードログインはDiscourseのCSRFおよびクッキーフローに従い、リアルタイムのMessageBus更新を有効にします。
- TOTPおよびバックアップコードによるMFAに対応しています。
- APIキー認証はHTTP機能を保持しますが、リアルタイムのブラウザセッションは確立されません。
- スクリプトによるユーザー名/パスワードログインを無効化または制限しているサイトがあります。そのようなサイトでは、API認証情報がフォールバックとなります。
セキュリティ
- Termcourseはプロンプトされた認証情報やセッションクッキーをディスクに書き込みません。セッションクッキーはメモリ内に保持されます。
- パスワードプロンプトにより、パスワードがシェル履歴に残るのを防ぎます。
- 永続的な認証情報はオプションであり、環境変数またはYAMLファイル内でユーザーの管理下にあります。
- 診断ログはオプトイン方式で、デフォルトでは無効化されており、認証情報やレスポンスボディを記録しません。
制限事項
- リモートログインフローを禁止しているサイトでは、APIキー認証が必要になる場合があります。
- リアルタイム更新にはユーザー名/パスワードによるクッキー認証が必要です。
- ネイティブなインライン画像の品質はターミナルのサポートに依存します。Kittyが優先されますが、他の場所ではシンボルレンダリングが利用可能です。
- ターミナル内に存在します。

クレジット
一部はDumbcourse: old browser friendly UI at dumb/d-pad/small screensに着想を得ています。![]()





