arabic-support-on-linux-terminal
اختلافات
عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.
جانبي المراجعة السابقةالمراجعة السابقةالمراجعة التالية | المراجعة السابقة | ||
arabic-support-on-linux-terminal [2023/01/23 10:10] – mhsabbagh | arabic-support-on-linux-terminal [2023/12/20 17:08] (حالي) – تحرير خارجي 127.0.0.1 | ||
---|---|---|---|
سطر 11: | سطر 11: | ||
لحسن الحظّ يمكنك حل كلتا المشكلتين، ونعمل نحن في [[: | لحسن الحظّ يمكنك حل كلتا المشكلتين، ونعمل نحن في [[: | ||
- | |||
- | يمكنك إن شاء الله الحصول على الشكل التالي بعد تطبيق التعليمات في هذه الصفحة: | ||
- | |||
- | [[https:// | ||
===== تغيير الخط الافتراضي للطرفيّة ===== | ===== تغيير الخط الافتراضي للطرفيّة ===== | ||
سطر 22: | سطر 18: | ||
[[https:// | [[https:// | ||
- | بعدها ابحث عن خط اسمه Monospace من القائمة، واختر الحجم 11 كما في الصورة واضغط " | + | بعدها ابحث عن خط اسمه |
[[https:// | [[https:// | ||
سطر 30: | سطر 26: | ||
===== تفعيل التقاط الاتجاه التلقائي (Auto-detection) للنص في الطرفية ===== | ===== تفعيل التقاط الاتجاه التلقائي (Auto-detection) للنص في الطرفية ===== | ||
- | المشكلة الثانية التي تعاني منها الطرفية هي مشكلة الاتجاه. يجب أن تكون | + | المشكلة الثانية التي تعاني منها الطرفية هي مشكلة الاتجاه. يجب أن تُعرض |
في البداية عليك أن تفهم أن الكثير من برامج الطرفية (Terminal) مثل GNOME Terminal وXfce4-Terminal وغيرها تستعمل مكتبة برمجية اسمها VTE هي المسؤولة عن عرض الطرفية. أي أن هذه البرامج في الواقع هي مجرد نوافذ وقوائم، بينما محتوى الطرفية الحقيقي (الشاشة السوداء التي تكتب فيها الأوامر) هي قادمة من مكتبة VTE. وبالتالي المسؤول عن عرض النصوص داخل الطرفية هو هذه المكتبة وليس برامج الطرفية. | في البداية عليك أن تفهم أن الكثير من برامج الطرفية (Terminal) مثل GNOME Terminal وXfce4-Terminal وغيرها تستعمل مكتبة برمجية اسمها VTE هي المسؤولة عن عرض الطرفية. أي أن هذه البرامج في الواقع هي مجرد نوافذ وقوائم، بينما محتوى الطرفية الحقيقي (الشاشة السوداء التي تكتب فيها الأوامر) هي قادمة من مكتبة VTE. وبالتالي المسؤول عن عرض النصوص داخل الطرفية هو هذه المكتبة وليس برامج الطرفية. | ||
- | وبالتالي أيضًا فإن إصلاح مشاكل اللغة العربية داخل الطرفية يكون في هذه المكتبة ولا يكون من التطبيق نفسها. | + | وبالتالي أيضًا فإن إصلاح مشاكل اللغة العربية داخل الطرفية يكون في هذه المكتبة ولا يكون من التطبيق نفسه. |
لحسن الحظ وبعد بحثٍ وتنقيب اكتشفنا أن [[https:// | لحسن الحظ وبعد بحثٍ وتنقيب اكتشفنا أن [[https:// | ||
سطر 47: | سطر 43: | ||
</ | </ | ||
- | يمكنك إضافة الأمر المذكور إلى نهاية ملف <wrap hi> | + | وستلاحظ أن الطرفية صارت تدعم عرض النصوص العربية من اليمين إلى اليسار الآن: |
- | < | + | [[https:// |
- | وانزل إلى نهاية الملف واكتب الأمر السابق. | + | يمكنك إضافة الأمر المذكور إلى نهاية ملف <wrap hi> |
+ | < | ||
+ | |||
+ | nano ~/.bashrc | ||
+ | |||
+ | </ | ||
+ | |||
+ | وانزل إلى نهاية الملف واكتب الأمر السابق، ثم اخرج عبر الضغط على <wrap hi>Ctrl + X</ | ||
===== فرض اتجاه RTL في طرفية لينكس ===== | ===== فرض اتجاه RTL في طرفية لينكس ===== | ||
+ | |||
+ | هناك ميزة أخرى في طرفية VTE أكثر تطرفًا وهي إجبار جميع النصوص - بغض النظر عن كونها أجنبية أو عربية - على أن تكون من اليمين إلى اليسار. هذا الخيار ليس جيدًا ليكون هو الخيار الافتراضي لطرفية لينكس لأن معظم الأوامر والنصوص المعروضة في الطرفية تكون باللغات الأجنبية، وبالتالي لن تُعرض بشكل جيد إن أُجبرت على أن تكون باتجاه RTL، لكنه قد يكون خيارًا جيدًا إن كنت تريد تطوير تطبيقات سطر أوامر عربية 100%. حينها يمكنك أنت التحكّم بجميع النصوص ولا يهمّك المستخدمون الأجانب فالبرنامج عربي وموجّه للعرب، وبالتالي يمكنك إجبار عرض النصوص كـRTL في تطبيقك. | ||
+ | |||
+ | لفعل ذلك، أضف السطر التالي إلى نهاية ملف <wrap hi> | ||
+ | |||
+ | < | ||
+ | printf "\e[2 k" | ||
+ | |||
+ | </ | ||
+ | |||
+ | وافتح الطرفية من جديد، وستجد بعدها أن جميع النصوص صارت مجبورة على العرض كـRTL، مما قد يظهر لك بعض العلل المُضحكة في الطرفية: | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | تابع المثال التالي لرؤية كيفية تطوير تطبيق سطر أوامر عربي 100% باتجاه RTL. | ||
===== مثال برمجي على تطبيق طرفية عربي على لينكس ===== | ===== مثال برمجي على تطبيق طرفية عربي على لينكس ===== | ||
+ | |||
+ | إذا كان لديك تطبيق سطر أوامر مكتوب ببايثون (أو أي لغة أخرى) فأنت بحاجة إلى تفعيل هذه الميزات على طرفيّة المستخدم قبل أن تشغّل برنامجك. لكن بالطبع لا تريد أن تنشر هذه التعليمات لكل مستخدم وتطلب منه أن يفعل كذا وكذا لتفعيل هذه الميزات، بل تريد أن تكون افتراضية في برنامجك لأريحيّة المستخدم وسهولة الاستخدام. | ||
+ | |||
+ | الحل لفعل ذلك هو أن تكتب ملف سكربت (Shell Script)، يفعّل هذه الميزة في طرفية خارجية ثم بنفس الوقت يقوم بتشغيل برنامجك في تلك الطرفية التي تفرض اتجاه RTL. | ||
+ | |||
+ | سترى هنا مثالًا لبرنامج سطر أوامر مكتوب بمكتبة <wrap hi> | ||
+ | |||
+ | اعمل ملفًا جديدًا اسمه <wrap hi> | ||
+ | <file bash run.sh> | ||
+ | |||
+ | terms=(x-terminal-emulator gnome-terminal konsole xfce4-terminal xterm uxterm) | ||
+ | for t in ${terms[*]} | ||
+ | do | ||
+ | if [ $(command -v $t) ] | ||
+ | then | ||
+ | detected_term=$t | ||
+ | break | ||
+ | fi | ||
+ | done | ||
+ | $detected_term -e " | ||
+ | |||
+ | </ | ||
+ | |||
+ | واعمل ملفًا جديدًا اسمه <wrap hi> | ||
+ | |||
+ | <file python main.py> | ||
+ | # | ||
+ | import curses, time | ||
+ | import mishkal.tashkeel | ||
+ | |||
+ | # Curses interface. | ||
+ | stdscr = curses.initscr() | ||
+ | |||
+ | # Tashkeel library. | ||
+ | vocalizer = mishkal.tashkeel.TashkeelClass() | ||
+ | |||
+ | stdscr.clear() | ||
+ | |||
+ | curses.cbreak() | ||
+ | curses.echo() | ||
+ | stdscr.keypad(True) | ||
+ | |||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | |||
+ | input_string = stdscr.getstr() | ||
+ | |||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | |||
+ | stdscr.refresh() | ||
+ | |||
+ | x = input_string.decode(" | ||
+ | output_string = vocalizer.tashkeel(x)[1: | ||
+ | stdscr.addstr(output_string) | ||
+ | |||
+ | stdscr.addstr(" | ||
+ | stdscr.addstr(" | ||
+ | stdscr.refresh() | ||
+ | |||
+ | time.sleep(5) | ||
+ | curses.endwin() | ||
+ | |||
+ | </ | ||
+ | |||
+ | ثبّت هذه المكتبات التي نحتاجها ببايثون عبر الأمر <wrap hi> | ||
+ | |||
+ | < | ||
+ | git clone https:// | ||
+ | pip3 install -r miskal/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | لدينا كل ما نحتاجه الآن. | ||
+ | |||
+ | الفكرة هي أن المستخدم لن يشغّل البرنامج مباشرةً عبر أمر مثل <wrap hi> | ||
+ | |||
+ | ميزة هذه الطريقة هي أنك لا تتدخل بإعدادات المستخدم؛ ستبقى طرفية المستخدم على إعداداتها الأساسية حسبما يحدد المستخدم في ملف <wrap hi> | ||
+ | |||
+ | فقط اكتب الأمر التالي لتشغيل السكربت: | ||
+ | |||
+ | < | ||
+ | bash run.sh | ||
+ | |||
+ | </ | ||
+ | |||
+ | وستجد أن البرنامج يطلب منك إدخال الجملة باللغة العربية ويشكّلها لك فورًا، ثم ستُغلق النافذة تلقائيًا بعد 5 ثوانٍ: | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | بالطبع يمكنك تغيير البرنامج وتخصيصه حسب حاجتك، ولكن هذا مجرّد مثال ليريك طريقة عمل البرامج العربية من سطر أوامر لينكس. | ||
+ | |||
+ | <WRAP center round important 90%> | ||
+ | قد تكون هناك مشاكل بسيطة أثناء محاولة كتابة جملة طويلة في برنامج المثال الذي وفّرناه. لذلك لا تحاول مسح حرف بعد أن تكتبه (عبر زرّ Return مثلًا أو Delete) بل حاول أن تكتب جملة بسيطة فقط واضغط Enter للمتابعة. | ||
+ | </ | ||
+ | |||
+ | |||
+ | يمكنك الآن تطوير تطبيقات سطر أوامر عربية بمكتبة [[https:// | ||
arabic-support-on-linux-terminal.1674465039.txt.gz · آخر تعديل: 2023/12/20 17:08 (تحرير خارجي)