أدوات المستخدم

أدوات الموقع


arabic-support-on-linux-terminal

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقةالمراجعة السابقة
المراجعة التالية
المراجعة السابقة
arabic-support-on-linux-terminal [2023/01/23 10:24] mhsabbagharabic-support-on-linux-terminal [2023/12/20 17:08] (حالي) – تحرير خارجي 127.0.0.1
سطر 74: سطر 74:
  
 ===== مثال برمجي على تطبيق طرفية عربي على لينكس ===== ===== مثال برمجي على تطبيق طرفية عربي على لينكس =====
 +
 +إذا كان لديك تطبيق سطر أوامر مكتوب ببايثون (أو أي لغة أخرى) فأنت بحاجة إلى تفعيل هذه الميزات على طرفيّة المستخدم قبل أن تشغّل برنامجك. لكن بالطبع لا تريد أن تنشر هذه التعليمات لكل مستخدم وتطلب منه أن يفعل كذا وكذا لتفعيل هذه الميزات، بل تريد أن تكون افتراضية في برنامجك لأريحيّة المستخدم وسهولة الاستخدام.
 +
 +الحل لفعل ذلك هو أن تكتب ملف سكربت (Shell Script)، يفعّل هذه الميزة في طرفية خارجية ثم بنفس الوقت يقوم بتشغيل برنامجك في تلك الطرفية التي تفرض اتجاه RTL.
 +
 +سترى هنا مثالًا لبرنامج سطر أوامر مكتوب بمكتبة <wrap hi>curses</wrap> لبايثون. يقوم هذا البرنامج بتشكيل أي جملة عربية تدخلها عبر [[https://github.com/linuxscout/mishkal|مكتبة مِشكَال من تطوير د. طه زروقي]].
 +
 +اعمل ملفًا جديدًا اسمه <wrap hi>run.sh</wrap> وضع هذه المحتويات داخله:
 +<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 "printf '\e[2 k' && python3 main.py"
 +
 +</file>
 +
 +واعمل ملفًا جديدًا اسمه <wrap hi>main.py</wrap> وضع هذه المحتويات داخله:
 +
 +<file python main.py>
 +#!/usr/bin/python3
 +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("\n\n\n")
 +stdscr.addstr("من تأليف فريق تقويم واعتمادًا على مكتبات خارجية. \n")
 +stdscr.addstr("جميع الحقوق غير محفوظة، 2023م، ولا يوجد حقوق أصلًا :)\n")
 +stdscr.addstr("---------------------------------------\n")
 +stdscr.addstr("أخبرنا، ما هو النص الذي تريد تشكيله؟ اكتبه بالأسفل:\n \n")
 +
 +input_string = stdscr.getstr()
 +
 +stdscr.addstr("\n")
 +stdscr.addstr("النتيجة:\n")
 +
 +stdscr.refresh()
 +
 +x = input_string.decode("utf-8")
 +output_string = vocalizer.tashkeel(x)[1:]
 +stdscr.addstr(output_string)
 +
 +stdscr.addstr("\n\n")
 +stdscr.addstr("سيُغلق البرنامج تلقائيًا بعد خمس ثوان!")
 +stdscr.refresh()
 +
 +time.sleep(5)
 +curses.endwin()
 +
 +</file>
 +
 +ثبّت هذه المكتبات التي نحتاجها ببايثون عبر الأمر <wrap hi>pip</wrap> أو <wrap hi>pip3</wrap>:
 +
 +<code>
 +git clone https://github.com/linuxscout/mishkal.git
 +pip3 install -r miskal/requirements.txt
 +
 +</code>
 +
 +لدينا كل ما نحتاجه الآن.
 +
 +الفكرة هي أن المستخدم لن يشغّل البرنامج مباشرةً عبر أمر مثل <wrap hi>python3 main.py</wrap>، بل سيشغّل الشل سكربت وسيقوم هذا الشل سكربت بدوره بالتعرّف على برامج الطرفية المثبّتة على النظام، ثم يختار واحدًا منها، ثم يفتحه ويطبّق الأمر المطلوب لتفعيل ميزة فرض اتجاه RTL فيها، ثم يقوم بتشغيل ملف البايثون داخل تلك الطرفية التي صارت تدعم اتجاه RTL.
 +
 +ميزة هذه الطريقة هي أنك لا تتدخل بإعدادات المستخدم؛ ستبقى طرفية المستخدم على إعداداتها الأساسية حسبما يحدد المستخدم في ملف <wrap hi>.bashrc</wrap> الخاص به (أو على الإعدادات الافتراضية التي هي LTR)، وفي نفس الوقت تضمن أن تطبيقك سيُعرض للمستخدم باتجاه RTL بالكامل، مما يوفر تجربة استخدام جميلة جدًا للغة العربية في الطرفية.
 +
 +فقط اكتب الأمر التالي لتشغيل السكربت:
 +
 +<code>
 +bash run.sh
 +
 +</code>
 +
 +وستجد أن البرنامج يطلب منك إدخال الجملة باللغة العربية ويشكّلها لك فورًا، ثم ستُغلق النافذة تلقائيًا بعد 5 ثوانٍ:
 +
 +[[https://linux-2-day.com/lib/exe/fetch.php?tok=250388&media=https://linux-2-day.com/lib/plugins/ckgedit/fckeditor/userfiles/image/command-line-arabic-program-rtl.png|{{  https://linux-2-day.com/lib/plugins/ckgedit/fckeditor/userfiles/image/command-line-arabic-program-rtl.png?direct&942x621  }}]]
 +
 +بالطبع يمكنك تغيير البرنامج وتخصيصه حسب حاجتك، ولكن هذا مجرّد مثال ليريك طريقة عمل البرامج العربية من سطر أوامر لينكس.
 +
 +<WRAP center round important 90%>
 +قد تكون هناك مشاكل بسيطة أثناء محاولة كتابة جملة طويلة في برنامج المثال الذي وفّرناه. لذلك لا تحاول مسح حرف بعد أن تكتبه (عبر زرّ Return مثلًا أو Delete) بل حاول أن تكتب جملة بسيطة فقط واضغط Enter للمتابعة.
 +</WRAP>
 +
 +
 +يمكنك الآن تطوير تطبيقات سطر أوامر عربية بمكتبة [[https://docs.python.org/3/howto/curses.html|curses]] أو أي مكتبة برمجية أخرى تريدها، فكل ما تحتاجه أن تكون الطرفية تدعم اتجاه RTL كما شرحنا.
  
  
arabic-support-on-linux-terminal.1674465867.txt.gz · آخر تعديل: 2023/12/20 17:08 (تحرير خارجي)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki