> termcourse: اقرأ وانشر على خوادم Discourse من الطرفية

هذا تطبيق واجهة طرفية (TUI)، مجرد تسلٍّ بسيط… وفي مرحلة تجريبية بعض الشيء حتى الآن!

:information_source: ملخص واجهة طرفية لتصفح المنتديات على Discourse والنشر فيها، مع قوائم المواضيع، وعرض كامل للمواضيع، والردود، والإعجابات، والبحث، ومحرر مدمج.
:hammer_and_wrench: رابط المستودع GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token) · GitHub
:open_book: دليل التثبيت ملف README.md في المستودع (قسم البدء السريع)
:heart: الرعاية يُرجى النظر في أن تصبح راعيًا مستمرًا لأعمالي مفتوحة المصدر (Sponsor @merefield on GitHub Sponsors · GitHub) بمستوى يناسب مواردك أو موارد مؤسستك واحتياجاتك، لضمان حصول هذا المشروع على الصيانة التي يستحقها ومواصلة عمله لموقعك في المستقبل.

هل تستمتع بـ termcourse؟ يُرجى إعطاؤه :star: على GitHub

نظرة عامة

termcourse هو عميل Discourse مبني على الطرفية، أُعيد بناؤه كملف تنفيذي واحد بلغة Go. يمكنه استخدام جلسة كوكيز خفيفة تشبه المتصفح باستخدام اسم المستخدم/البريد الإلكتروني وكلمة المرور، بما في ذلك MFA باستخدام TOTP ورموز النسخ الاحتياطي. تتوفر المصادقة عبر مفتاح API للمواقع التي لا تناسبها تسجيل الدخول التفاعلي.

تستخدم الواجهة حزمة Charm الحالية وتعمل مع لوحة المفاتيح والفأرة. صُممت تنقلها بنمط المجلدات، والفلاتر السياقية، واللوحات المتجاوبة، والعناصر ذات السمة، وعرض Markdown، والصور المضمنة لجعل تصفح المنتديات مريحًا دون مغادرة الطرفية.

الميزات

  • تصفح قوائم المواضيع لأحدث، وأحلى، وجديد، وغير مقروء، وأفضل، ورسائل خاصة، مع تبديل فترات “الأفضل”.
  • التنقل بين مجلدات المواضيع الدائمة، والبحث، والإشعارات، والتأليف، مع فلاتر سياقية من المستوى الثاني.
  • استخدام لوحة المفاتيح طوال الوقت، أو النقر على التبويبات وصفوف المواضيع وعناصر التذييل والأزرار المُبرزة عند التحويم.
  • فتح المواضيع الظاهرة بزر Enter أو مفاتيح الأرقام 10.
  • قراءة المواضيع الكاملة مع تحميل تدريجي للمشاركات، ومقتضبات مضغوطة، ومشاركات محددة موسعة، وتمرير متجاوب.
  • انقر على مسار تقدم الموضوع للقفز مباشرة إلى تلك النقطة في تدفق المشاركات.
  • إنشاء مواضيع، واختيار فئات، والرد على المواضيع أو مشاركات فردية، والإعجاب أو إلغاء الإعجاب بالمشاركات.
  • البحث في المشاركات والقفز مباشرة إلى المشاركة المطابقة في سياق موضوعها.
  • تصفح الإشعارات وتصفيتها، بما في ذلك شارات غير المقروء والرسائل الخاصة.
  • تأليف محتوى متعدد الأسطر مع حركة المؤشر، والإدراج، واللف، ودعم اللصق، والتحقق الفوري.
  • عرض Markdown (GFM) بما في ذلك الروابط، والقوائم، والاقتباسات، والرمز، وقوائم المهام، والجداول.
  • عرض صور مضمنة وبملء الشاشة عالية الجودة باستخدام بروتوكول Kitty graphics، مع رموز chafa الملونة أو viu كبديل قابل للنقل.
  • استلام تحديثات فورية لقوائم المواضيع، والمواضيع، والإشعارات، والرسائل الخاصة عند استخدام جلسة كوكيز.
  • استخدام بيانات اعتماد لكل موقع من متغيرات البيئة أو credentials.yml، مع طلب إدخال حقول تسجيل الدخول الناقصة.
  • الاختيار من سمات default وslate وfairground وrust وhacker، وإضافة سمات YAML، وتبديل السمات أثناء تشغيل التطبيق.
  • استخدام إخراج Truecolor أو 256 لونًا أو 16 لونًا مع كشف تلقائي لقدرات الطرفية.
  • تشغيل الواجهة باللغة الإنجليزية أو الفرنسية أو الألمانية أو الإسبانية.
  • تغيير حجم الطرفية بحرية: تتجاوب التخطيطات والألوان وقوائم المواضيع وصور Kitty مع المساحة المتاحة.
  • رؤية توقيت إعادة المحاولة الذي يوفره الخادم عندما يفرض Discourse حدودًا معدودة على إجراء، مع تشخيصات اختيارية لـ HTTP والواجهة والصور.

التثبيت والتشغيل

على Linux أو macOS، يقوم المثبّت الموصى به بتنزيل الإصدار المصنوع مسبقًا للنظام operativo المعمارية الحالية، والتحقق من مجموع التحقق 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 مجاميع تحقق SHA-256 وأرشيفات مصنوعة مسبقًا لـ Linux وmacOS وWindows على معماريات AMD64 وARM64. يستخدم 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 محلي أو استخدم credentials.yml لكل مضيف كما هو موضح في README.

تسجيل الدخول باسم المستخدم/كلمة المرور (موصى به)

يتيح تسجيل الدخول باسم المستخدم/كلمة المرور التحديثات الفورية:

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 للتكوين والسمات والتحكم وخلفيات الصور واستكشاف الأخطاء وإصلاحها.

ملاحظات المصادقة

  • يتبع تسجيل الدخول باسم المستخدم/كلمة المرور تدفق CSRF وكوكيز الخاص بـ Discourse ويُمكّن تحديثات MessageBus الفورية.
  • يتم دعم MFA باستخدام TOTP ورموز النسخ الاحتياطي.
  • تحافظ المصادقة عبر مفتاح API على وظائف HTTP لكنها لا تُنشئ جلسة متصفح فورية.
  • تعطل بعض المواقع أو تقيد تسجيل الدخول التلقائي باسم المستخدم/كلمة المرور؛ بيانات اعتماد API هي البديل لتلك المواقع.

الأمان

  • لا يكتب Termcourse بيانات الاعتماد المطلوبة أو كوكيز الجلسة على القرص؛ تبقى كوكيز الجلسة في الذاكرة.

  • يحافظ طلب كلمة المرور على إبقاء كلمة المرور خارج سجل الطرفية (shell history).

  • بيانات الاعتماد الدائمة اختيارية وتبقى تحت سيطرة المستخدم في ملفات البيئة أو YAML.

  • التسجيل التشخيصي اختياري (opt-in)، ومعطل افتراضيًا، ولا يسجل بيانات الاعتماد أو أجسام الاستجابة.

القيود

  • قد تتطلب المواقع التي تمنع تدفقات تسجيل الدخول عن بُعد المصادقة عبر مفتاح API.
  • تتطلب التحديثات الفورية المصادقة بكوكيز اسم المستخدم/كلمة المرور.
  • يعتمد جودة الصور المضمنة الأصلية على دعم الطرفية؛ يُفضل Kitty، مع توفر عرض رموز في أماكن أخرى.
  • إنه يعيش في الطرفية. :slight_smile:

الإحاطات

مستوحى جزئيًا من Dumbcourse: واجهة متصفح قديمة صديقة للشاشات الصغيرة/لوحة D-pad. :clap:

27 إعجابًا

حتى تتمكن من تسجيل الدخول بسرعة إلى مواقع متعددة (جلسة واحدة في كل علامة تبويب بالطبع)، أجريت التحسينات التالية:

تحسينات المصادقة والإعدادات لـ termcourse

  • أصبح اسم المستخدم/كلمة المرور هو مسار تسجيل الدخول الافتراضي.
  • لم تعد بحاجة إلى تضمين https:// - هذا اختياري
  • تتم المطالبة بالحقول المفقودة لتسجيل الدخول بشكل تفاعلي (على سبيل المثال: اسم المستخدم معروف، كلمة المرور مفقودة).
  • تتضمن مساعدة واجهة سطر الأوامر (CLI) متغيرات البيئة الأساسية ومواقع ملفات سجل التصحيح.

بيانات الاعتماد وسلوك متغيرات البيئة (ENV)

  • يدعم ملف بيانات اعتماد مُعيَّن حسب المضيف مع ترتيب البحث:
    1. TERMCOURSE_CREDENTIALS_FILE (إذا تم تعيينه)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • أسبقية المصادقة:
    1. علامات واجهة سطر الأوامر (CLI flags)
    2. بيانات اعتماد المضيف من ملف YAML
    3. متغيرات البيئة العامة DISCOURSE_*
    4. مطالبة تفاعلية
  • للمصادقة: تتم المطالبة بقيم اسم المستخدم/كلمة المرور المفقودة لتسجيل الدخول.
  • لمصادقة واجهة برمجة التطبيقات (API)، يجب أن يؤدي كل من اسم مستخدم واجهة برمجة التطبيقات والمفتاح إلى قيم غير فارغة.

تصحيح الأخطاء (Debugging)

  • تصحيح أخطاء HTTP/المصادقة: TERMCOURSE_HTTP_DEBUG=1/tmp/termcourse_http_debug.txt
  • تصحيح أخطاء عرض واجهة المستخدم (UI): TERMCOURSE_DEBUG=1/tmp/termcourse_debug.txt

نظافة المستودع (Repo hygiene)

  • تمت إضافة credentials.example.yml و .env.example مع أمثلة متطابقة.
  • تمت إضافة إدخالات .gitignore لملفات الأسرار المحلية:
    • .env
    • credentials.yml
3 إعجابات

هذا منخفض الجودة إلى حد ما ولكنه يعمل.

تحتاج إلى تثبيت viu أو chafa - وهذا بحد ذاته يمكن أن يكون مشروعًا :slight_smile:

في وضع الجودة العالية على chafa أو باستخدام viu، يتفوق Windows Terminal على طرفية MacOS لأنه يدعم ألوانًا أكثر بكثير (شكرًا مايكروسوفت!)

ملاحظات الإصدار: عرض الصور (في الطرفية!)

عرض الصور

  • تمت إضافة معاينات صور ما بعد التضمين مع اختيار الواجهة الخلفية:
    • يجرب 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)

نعم، أعتقد أنه قد يكون مفيدًا عندما:

  • تكون على منصة منخفضة الدقة (low fi)
  • تعبث بجهاز راسبيري باي (لم يتم اختباره بعد للعلم)
  • من خادم للتحقق من أنك متصل … أو إذا كان كود الواجهة الأمامية يتعطل! :smiley:
  • لموقع ديسكورس (Discourse) يعتمد بشكل كبير على النصوص …
  • … وكفضول تقني :slight_smile:

لقد كنت أنوي اختباره على هاتفي باستخدام تيرمينوس (Terminus) …

3 إعجابات

حسنًا، ربما يكون هذا هو آخر تحديث لهذا اليوم:

  • أصبحت الواجهة الآن متجاوبة مع تغيير حجم النافذة :tada:
  • تحسينات على المحتوى في تعليمات الشريط العلوي
  • المفاتيح من 1 إلى (1)0 تفتح الآن موضوع ذلك الرقم في قائمة المواضيع

تذكر أن تستخدم git pull للحصول على التحديثات.

3 إعجابات

يا رجل، الآن يجب أن أبدأ العمل على أعمالي الفنية بأسكي!!
¯\_(ツ)_/¯

3 إعجابات

لقد أضفت نظام ثيمات قابل للتخصيص بالكامل، هذا هو “fairground”:

… وهذا هو “slate”:

التفاصيل في ملف README :graduation_cap:

5 إعجابات

حسناً، إليكم يا رفاق، بعض التحديثات المثيرة :tangerine: :

  • إضافة دعم للرسائل الخاصة - اضغط على f مرتين :tada:
  • إضافة أعمدة إضافية للفئة، والمستخدمين، والمشاهدات، بشكل تدريجي عند توسيع العرض
  • تعديل السمة للفواصل العمودية
  • تحديث ملف README

إعجابَين (2)

لقد دمجت هذا بالأمس:

  • إذا بذلت جهدًا لتثبيت chafa أو viu، فسيتم مكافأتك الآن بميزة جديدة: تبديل “النافذة الكاملة” لصور المنشورات. على نظام ويندوز (Windows)، يعد هذا جيدًا بشكل خاص بسبب دعم عمق الألوان السخي في تطبيق طرفية ويندوز (Windows Terminal).

يحتوي termcourse الآن على نافذة منبثقة لحالة الرسائل الخاصة غير المقروءة في شريط حالة قائمة المواضيع، ومثل عميل المتصفح، سيقوم بنشر إشعارات القراءة تلو الأخرى أثناء تحريك المؤشر.

إعجابَين (2)

لقد دمجت إصلاحات للسمات على نظام التشغيل ماك أو إس

إعجابَين (2)

جميل… هل يعمل على جهاز بيب-بوي (Pip-Boy)؟

3 إعجابات

لا تتردد في تقديم طلب سحب (PR) لذلك أو مشاركة رموز الألوان وسأضيفها إلى ملف themes.yml الخاص بالأمثلة :slight_smile:

إعجابَين (2)

أحببته! تم الدمج، شكرًا لك!

إعجابَين (2)

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

كان العرض سيئًا للغاية… لذلك قمت بإصلاحه… الواجهة الآن تعرض الاختلافات، لذا فهي أسرع وأكثر سلاسة بكثير… لم تعد ترسم الشاشة بأكملها مع كل حركة للمؤشر.

لقد اختبرت هذا فقط على نظام ويندوز حتى الآن، لذا يرجى إبلاغي بأي مشاكل - ولكن يجب أن يساعد الأنظمة الأبطأ بشكل كبير.

لقد أضفت أيضًا بعض الاختبارات و GitHub CI!

لديه الآن نظام إشعارات فوري يعتمد على MessageBus لإعلامك في شريط الحالة عند تحديث قائمة المواضيع (حتى تتمكن من الضغط على g للتحديث):

من المحتمل أن أعمل على شارات قراءة المواضيع بعد ذلك…

هذا رائع!

لماذا لا تستخدمون اختصارات لوحة المفاتيح نفسها المستخدمة في ديs course؟ لكي تكون التجربة أكثر سلاسة :slight_smile:

إعجاب واحد (1)

ليست فكرة سيئة … هذه بالتأكيد تستحق محاولة في مرحلة ما لمعرفة ما إذا كان يمكن تقريب الأشياء بشكل معقول :+1: … ولكن هناك بالطبع بعض الاختلافات الكبيرة في الوسيط لذا قد يظل بعض الأشياء مختلفة.

إعجاب واحد (1)