> 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)
:open_book: دليل التثبيت README.md في المستودع (قسم البدء السريع)
:heart: الرعاية يرجى التفكير في أن تصبح راعياً مستمراً لعملي في المصادر المفتوحة (Sponsor @merefield on GitHub Sponsors · GitHub) بمستوى يناسب مواردك أو موارد مؤسستك واحتياجاتها لضمان حصول هذا المشروع على الصيانة التي يستحقها ويستمر في العمل لموقعك في المستقبل.

هل تستمتع بـ termcourse؟ يرجى عمل :star: له على GitHub

نظرة عامة

\u003e termcourse هو عميل قائم على الطرفية لـ Discourse. يتصرف مثل جلسة متصفح خفيفة الوزن مع تسجيل دخول قائم على ملفات تعريف الارتباط (اسم المستخدم/البريد الإلكتروني + كلمة المرور) ويدعم TOTP/رموز النسخ الاحتياطي للمصادقة متعددة العوامل (MFA). يوجد أيضًا خيار احتياطي لمفتاح واجهة برمجة التطبيقات (API) للمواقع المقيدة أو التي تستخدم تسجيل الدخول الموحد (SSO) فقط.

الميزات

  • تصفح قوائم المواضيع الأحدث / الشائعة / الجديدة / غير المقروءة / الأعلى، مع تدوير فترة “الأعلى”.
  • فتح المواضيع عبر الأسهم + Enter، أو اختصارات لوحة المفاتيح الرقمية (1-0) لأول 10 مواضيع مرئية.
  • عرض المواضيع الكاملة مع مشاركات قابلة للتمرير، ورأس/تذييل ثابت، وشريط تقدم/موضع المشاركة.
  • توسيع المشاركات المحددة إلى المحتوى الكامل؛ المشاركات غير المحددة تعرض مقتطفات مضغوطة.
  • الرد على المواضيع بأكملها أو مشاركات محددة.
  • إنشاء مواضيع جديدة مع عنوان، ومحدد فئة، ومحرر نص مضمن.
  • الإعجاب/إلغاء الإعجاب بالمشاركات مع حالة مرئية لقلب الإعجاب لكل مشاركة.
  • البحث في المشاركات والانتقال مباشرة إلى سياق الموضوع/المشاركة المطابق.
  • يدعم المحرر المضمن حركة المؤشر، والإدراج، والأسطر الجديدة، والمسافة الخلفية، وعداد الحد الأدنى للطول المباشر.
  • عرض واعٍ لـ Markdown، بما في ذلك الروابط الملتفة ودعم معاينة الصور المضمنة (chafa / viu).
  • استبدال الرموز التعبيرية لرموز :emoji: الشائعة والوجوه المبتسمة من نوع :)-style.
  • دعم بيانات اعتماد مواقع متعددة عبر متغيرات البيئة + ملف credentials.yml لكل مضيف (مع مطالبة بحقول تسجيل الدخول المفقودة).
  • تسجيل دخول باسم المستخدم/كلمة المرور بجلسة ملفات تعريف الارتباط مع دعم MFA (TOTP + رمز احتياطي)، بالإضافة إلى خيار احتياطي لمفتاح API.
  • تصميم قائم على YAML مع مدمجات (افتراضي، رمادي داكن، أرضية عادلة) وتجاوزات محلية عبر theme.yml.
  • إعادة رسم تغيير الحجم التفاعلي مع فاصل استقصاء قابل للتكوين (TERMCOURSE_TICK_MS).
  • تسجيل اختياري لتشخيصات HTTP/المصادقة وعرض واجهة المستخدم.

البدء السريع

راجع أحدث 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 كخيار احتياطي.

الأمان

  • لا يتم تخزين بيانات الاعتماد؛ ملفات تعريف الارتباط في الذاكرة فقط.
  • تتجنب متغيرات البيئة أو الرد على المطالبة المقدمة كلمات المرور في سجلات الصدفة (shell history).
  • التسجيل اختياري ومعطل افتراضيًا.

القيود

  • بعض المواقع غير متوافقة مع اسم المستخدم/كلمة المرور لأنها تمنع المطالبة عن بعد
  • إنه يعيش في الطرفية

شكر وتقدير

مستوحى جزئيًا من Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 إعجابًا

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

تحسينات المصادقة والإعدادات لـ 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
إعجابَين (2)

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

تحتاج إلى تثبيت 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 للحصول على التحديثات.

إعجابَين (2)

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

إعجابَين (2)

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

… وهذا هو “slate”:

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

4 إعجابات

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

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