termcourse: ターミナルからDiscourseインスタンスを読み込み、投稿する

これはターミナルアプリ (TUI) であり、ちょっとした楽しみであり、現段階では実験的なものです!

:information_source: 概要 トピックリスト、完全なトピック表示、返信、いいね、検索、および組み込みのコンポーザーを備えた、Discourseフォーラムを閲覧および投稿するためのターミナルUI。
:hammer_and_wrench: リポジトリリンク GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: インストールガイド リポジトリ内のREADME.md(クイックスタートセクション)
:heart: スポンサーシップ このプロジェクトが当然受けるべきメンテナンスを受け、将来的にあなたのサイトで機能し続けることを保証するために、あなたの、またはあなたの組織のリソースとニーズに合ったレベルで、私のオープンソース作業の継続的なスポンサーになることをご検討ください (Sponsor @merefield on GitHub Sponsors · GitHub)。

termcourseを楽しんでいますか? GitHubで :star: してください

概要

> termcourse はDiscourse用のターミナルベースのクライアントです。これは軽量なブラウザセッションのように動作し、Cookieベースのログイン(ユーザー名/メールアドレス + パスワード)をサポートし、MFAのためにTOTP/バックアップコードをサポートします。ロックダウンされているサイトやSSOのみのサイトのためにAPIキーのフォールバックもあります。

特徴

  • トピックリスト(最新/ホット/新規/未読/トップ)の閲覧、トップ期間の循環。
  • 矢印キー + Enter、または最初の10件の表示トピックに対する番号ホットキー (1-0) でトピックを開く。
  • スクロール可能な投稿、スティッキーなヘッダー/フッター、投稿位置/進捗バーを備えた完全なトピック表示。
  • 選択された投稿を完全なコンテンツに展開。選択されていない投稿はコンパクトな抜粋を表示。
  • トピック全体または特定の投稿への返信。
  • タイトル、カテゴリピッカー、インライン本文コンポーザーを備えた新規トピックの作成。
  • 投稿ごとの視覚的なハートの状態によるいいね/いいね解除。
  • 投稿の検索と、一致するトピック/投稿のコンテキストへの直接ジャンプ。
  • インラインコンポーザーは、カーソル移動、挿入、改行、バックスペース、およびライブ最小文字数カウンターをサポート。
  • リンクの折り返しとインライン画像プレビューのサポート (chafa / viu) を含むMarkdown対応レンダリング。
  • 一般的な :emoji: トークンと :)-スタイルのスマイルの絵文字置換。
  • 環境変数 + ホストごとのcredentials.ymlによるマルチサイト認証情報サポート(不足しているログインフィールドのプロンプト付き)。
  • MFAサポート(TOTP + バックアップコード)付きのCookieセッションのユーザー名/パスワードログイン、およびAPIキーフォールバック。
  • YAML駆動のテーマ設定(組み込み(デフォルト、スレート、フェアグラウンド)およびローカルオーバーライド(theme.yml経由))。
  • 設定可能なポーリング間隔 (TERMCOURSE_TICK_MS) を備えたリアクティブなリサイズ再描画。
  • HTTP/認証およびUIレンダリング診断のためのオプションのデバッグロギング。

クイックスタート

詳細については、最新のREADMEを参照してください

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

ユーザー名/パスワード(推奨)

bundle exec bin/termcourse your.discourse.host

APIキーフォールバック

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

認証に関する注意

  • ユーザー名/パスワードログインは通常のブラウザスタイルのセッションを使用します。
  • MFAはTOTPとバックアップコードでサポートされています。
  • APIキーはフォールバックとしてサポートされています。

セキュリティ

  • 認証情報は保存されません。Cookieはインメモリのみです。
  • 環境変数を使用するか、提供されたプロンプトに応答することで、パスワードがシェル履歴に残るのを回避できます。
  • ロギングはオプトインであり、デフォルトでは無効です。

制限事項

  • リモートプロンプトを禁止しているため、一部のサイトはユーザー名/パスワードと互換性がありません。
  • ターミナル内に存在します。

クレジット

Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) に部分的に触発されました :clap:

「いいね!」 16

複数のサイトに素早くログインできるように(もちろんタブごとに1セッション)、以下の改善を行いました。

termcourse 認証と設定の改善

  • ユーザー名/パスワードがデフォルトのログインパスになりました。
  • https:// を含める必要がなくなりました(オプションです)。
  • 不足しているログインフィールドは対話形式で求められます(例:ユーザー名はわかっているがパスワードが不足している場合)。
  • CLIヘルプにコア環境変数とデバッグログファイルの位置が含まれるようになりました。

認証情報と環境変数 (ENV) の動作

  • ホストマッピングされた認証ファイルに対応し、検索順序は以下の通りです。
    1. TERMCOURSE_CREDENTIALS_FILE(設定されている場合)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • 認証の優先順位:
    1. CLIフラグ
    2. YAMLからのホスト認証情報
    3. 一般的な DISCOURSE_* 環境変数
    4. 対話型プロンプト
  • 認証の場合、ログイン時にユーザー名やパスワードの値が不足している場合はプロンプトが表示されます。
  • API認証の場合、APIユーザー名とキーの両方が空でない値に解決される必要があります。

デバッグ

  • HTTP/認証デバッグ: TERMCOURSE_HTTP_DEBUG=1/tmp/termcourse_http_debug.txt
  • UIレンダリングデバッグ: TERMCOURSE_DEBUG=1/tmp/termcourse_debug.txt

リポジトリの衛生管理

  • 整列された例を含む credentials.example.yml.env.example を追加しました。
  • ローカルのシークレットファイル用の .gitignore エントリを追加しました。
    • .env
    • credentials.yml
「いいね!」 2

これはかなりローファイですが、動作します。

viu または chafa をインストールする必要があります。それ自体がプロジェクトになる可能性がありますね :slight_smile:

chafa の高画質モードまたは viu では、Windows Terminal の方が MacOS terminal よりも優れています。なぜなら、サポートする色数がはるかに多いからです(Microsoft に感謝!)。

リリースノート: 画像レンダリング(ターミナル内!)

画像レンダリング

  • バックエンド選択によるインライン投稿画像プレビューの追加:
    • まず chafa を試し、次に viu を試みます。
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable: ターミナル安定性のための控えめな出力。
    • quality: より高精細/高彩度のシンボルレンダリング。
  • プレビュー高さ制御の追加:
    • TERMCOURSE_IMAGE_LINES (デフォルト: 14)
    • プレビューの行の高さに適用され、視覚的な密度を調整するのに役立ちます。
  • viu のアスペクト動作の改善:
    • アスペクト比をより良く維持するために、行ターゲットレンダリング (-h) に切り替えました。
  • プレビュー品質フィルター制御の追加:
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 は、ノイズの多いブロックのみのプレビューをフィルターします。
    • レンダラー出力を常に表示するには、0 に設定します。
  • 画像ダウンロードの安全制限の追加:
    • TERMCOURSE_IMAGE_MAX_BYTES (デフォルト: 5242880)
    • パフォーマンスへの影響を防ぐため、大きすぎる画像ダウンロードを防止します。
  • Discourse の upload://... 画像リンクのサポート追加:
    • /uploads/short-url/... に自動的に解決されます。
  • ターミナルのサニタイズ/安定性の改善:
    • 必要な場所で有効な SGR カラーコードを保持します。
    • 不安定な制御/グラフィックシーケンスを削除します。
    • ANSI エスケープフラグメントが生のテキストとして表示されるのを防ぎます。

注:リモートのユーザー名/パスワードをブロックするサイトが1つ見つかりました。そのため、その状況ではこのクライアントは機能しません(ご自身で所有していてAPIキーを設定できる場合を除く!)。ご提案は歓迎しますが、現時点ではそのようなケースのサポートはありません。

これを実世界で使うかどうかは分かりませんし、私にとっての使い道は見えませんが、試してみたところ、とても楽しいです。ベアメタルで原始的なインターフェースから次世代のフォーラムプラットフォームと対話できるのが気に入っています。

ある意味、美的に非常に優れています。

「いいね!」 1

ええ、以下のような場合に役立つかもしれません。

  • 低いファイ環境にいるとき
  • ラズベリーパイでいじっているとき(未テスト FYI)
  • サーバーから稼働状況を確認するとき…あるいはフロントエンドのコードがクラッシュしていないか確認するとき!:smiley:
  • 非常にテキストベースのDiscourseサイトで…
  • …そして技術的な好奇心として :slight_smile:

Terminusを使って携帯電話でテストしてみようと思っていました…

「いいね!」 3

OK、おそらく今日最後のアップデートです:

  • ウィンドウサイズ変更にインターフェースが応答するようになりました :tada:
  • トップバーの指示のコンテンツが改善されました
  • キー1から(1)0でトピックリストのその番号のトピックが開きます

アップデートを取得するにはgit pullを忘れないでください。

「いいね!」 2

やれやれ、これでアスキーアートの制作に取り掛からなきゃ!
¯\_(ツ)_/¯

「いいね!」 2

完全にカスタマイズ可能なテーマシステムを追加しました。これが「fairground」(遊園地)です。

…そしてこれが「slate」(スレート)です。

詳細はREADMEをご覧ください :graduation_cap:

「いいね!」 4

さあ、皆さん、注目の :tangerine: アップデートです:

  • プライベートメッセージのサポートを追加 - fを2回タップ :tada:
  • 幅が展開されるにつれて、カテゴリ、ユーザー、ビューの追加列を追加
  • 垂直セパレーターのテーマを調整
  • READMEを更新