seyal zavira
seyal zavira
خواندن ۹ دقیقه·۱ سال پیش

تایپ سریع و آسان عربی

بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ

داستان از اون جایی شروع شد که میخواستم یه متن عربی نسبتا طولانی رو با اعراب گذاریش تایپ کنم اما خوب تایپ متن عربی با اعراب گذاری به روش معمول فرایند سخت و پیچیده ای به حساب میاد و خیلی باید حوصله داشته باشی که حتی حدود نیم صفحه رو تایپ کنی.

اما خوب برای هر مشکل راه های مختلفی وجود داره!

یک راهی که به ذهنم رسید این بود که خوب چطور میشه که اگه اول خود متن بدون اعراب رو تایپ کنیم و بعد اعراب گذاریش رو انجام بدیم؟ اینجور دیگه مجبور نیستیم وسط تایپ کردن مدام وقفه بندازیم. خوب این روش خوبی بود اما باز هم برای هر اعراب مدام باید کلید شیفت رو میگرفتی و خوب فرایند جذابی نبود. به فکرم رسید که از قابلیت sticky key استفاده کنم تا خودش شیفت رو نگه داره اما مشکل دیگه ای این وسط بود که وقتی میخواستی بین متن جا به جا بشی چون شیفت فعال بود متن رو هایلایت می کرد و در این حالت هایلایت هم اگه کاراکتری رو وارد می کردی متن هایلایت شده پاک می شد. ادیتورم رو عوض کردم و از emacs استفاده کردم تا این مشکل به وجود نیاد اما باز هم بعد چندوقت دیدم که مشکل ریشه ای تر از این حرفاست و به چیدمان کلید ها تو صفحه مربوط میشه که این همه سرعت تایپ رو پایین میاره.

حالا بعد این مقدمه طولانی خواستم بگم ممکنه هرکسی با پروژه ای مواجه بشه که نیاز به چیدمان خاصی از کاراکتر ها داشته باشه. ممکنه بخواد از ایموجی ها و یا کاراکتر هایی که تو صفحه کلید های رایج نیستند استفاده کنه و طوری چیدمان تغییر بده که دم دست باشن. اینجاست که تعریف کردن یک layout جدید لازممون میشه یعنی تنظیم چیدمان کلیدها روی صفحه کلید کامپیوتر.


خوب از اینجا به بعد آموزش مخصوص سیستم عامل گنو/لینوکس هست البته تو ویندوز هم اینکار امکان پذیره که شاید بعدا در موردش نوشتم.


برای اینکه یک layout جدید اضافه کنیم اول از همه باید یک فایل شامل مشخصات layout مد نظرمون رو درست کنیم. به جای اینکه از اول اینکار رو انجام بدیم میتونیم از layout هایی که موجوده کمک بگیریم و قسمت هاییش که نیاز داریم رو خودمون ویرایش کنیم. برای دسترسی به این layout ها وارد پوشه زیر بشید:

/usr/share/X11/xkb/symbols

خوب یکی از اونها رو کپی کنید. اسم فایلی که زبان فارسی رو داره ir هست برای فهمیدن اینکه هر فایل برای چه زبانی هست میتونید از این فایل کمک بگیرید:

/usr/share/X11/xkb/rules/base.lst


خوب حالا طبق نیازتون چیدمان رو تنظیم کنید. من برای تایپ متون عربی اعراب دار این چیدمان رو تنظیم کردم:

default partial alphanumeric_keys

xkb_symbols "basic" {

//This is a layout that is constructed for arabic fast typing!

//Arabic fasttyping!

name[Group1]= "arf"

key.type[Group1]="FOUR_LEVEL"


key <AE01> { [ Arabic_1, UFD40, exclam, UFD4F ]};

key <AE02> { [ Arabic_2, UFD41, at, UFD42 ]};

key <AE03> { [ Arabic_3, UFD4C, numbersign, UFD46 ]};

key <AE04> { [ Arabic_4, UFD47, dollar, UFD4D ]};

key <AE05> { [ Arabic_5, U066A, percent, UFD43 ]};

key <AE06> { [ Arabic_6, U060D, asciicircum, UFD4A ]};

key <AE07> { [ Arabic_7, U0653, ampersand, UFD4B ]};

key <AE08> { [ Arabic_8, U0654, asterisk, UFDCF ]};

key <AE09> { [ Arabic_9, U0655, parenright, UFDFA ]};

key <AE10> { [ Arabic_0, U0656, parenleft, UFD45 ]};

key <AE11> { [ minus, underscore, UFD49 ]};

key <AE12> { [ equal, plus, U06DE ]};

key <TLDE> { [ UFD4E, UFDFB, UFDFE, UFDFF ] };

key <AD01> { [ Arabic_dad, U0618 ] };

key <AD02> { [ Arabic_sad, U061A ] };

key <AD03> { [ Arabic_theh, U0619 ] };

key <AD04> { [ Arabic_qaf, U065A ] };

key <AD05> { [ Arabic_feh, U065B ] };

key <AD06> { [ Arabic_ghain, apostrophe ] };

key <AD07> { [ Arabic_ain, Arabic_hamzaonalef, U203A ] };

key <AD08> { [ Arabic_ha, U200E, U2039 ] };

key <AD09> { [ Arabic_khah, U2019, U201D ] };

key <AD10> { [ Arabic_hah, U2018, U201C ] };

key <AD11> { [ Arabic_jeem, braceright, bracketright ] };

key <AD12> { [ UFDFD, braceleft, bracketleft ] };

key <AC01> { [ Arabic_sheen, guillemotright ] };

key <AC02> { [ Arabic_seen, guillemotleft ] };

key <AC03> { [ Arabic_yeh, Arabic_alefmaksura ] };

key <AC04> { [ Arabic_beh, Arabic_hamzaonyeh ] };

key <AC05> { [ Arabic_lam, U200C ] };

key <AC06> { [ Arabic_alef, U0671 ] };

key <AC07> { [ Arabic_teh, Arabic_tehmarbuta ] };

key <AC08> { [ Arabic_noon, U200F ] };

key <AC09> { [ Arabic_meem, VoidSymbol ] };

key <AC10> { [ Arabic_kaf, colon ] };

key <AC11> { [ Arabic_comma, quotedbl ] };

key <BKSL> { [ backslash, bar ] };

key <LSGT> { [ Arabic_tatweel, VoidSymbol ] };

key <AB01> { [ Arabic_zah, VoidSymbol ] };

key <AB02> { [ Arabic_tah, VoidSymbol ] };

key <AB03> { [ Arabic_zain, VoidSymbol ] };

key <AB04> { [ Arabic_ra, VoidSymbol ] };

key <AB05> { [ Arabic_thal, Arabic_maddaonalef ] };

key <AB06> { [ Arabic_dal, Arabic_hamzaunderalef ] };

key <AB07> { [ Arabic_hamza, VoidSymbol ] };

key <AB08> { [ Arabic_waw, Arabic_hamzaonwaw, greater ] };

key <AB09> { [ period, Arabic_semicolon, less ] };

key <AB10> { [ slash, Arabic_question_mark, U2038 ] };

include "level3(ralt_switch)"

include "arf(digits_arabfast)"

};


xkb_symbols "digits_arabfast" {

key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD"

key <KP7> { [ KP_Home, Arabic_fathatan, 7, NoSymbol ] };

key <KP8> { [ KP_Up, Arabic_kasratan, 8, NoSymbol ] };

key <KP9> { [ KP_Prior, Arabic_dammatan, 9, NoSymbol ] };

key <KP4> { [ KP_Left, Arabic_fatha, 4, NoSymbol ] };

key <KP5> { [ KP_Begin, Arabic_kasra, 5, NoSymbol ] };

key <KP6> { [ KP_Right, Arabic_damma, 6, NoSymbol ] };

key <KP1> { [ KP_End, U0640, 1, NoSymbol ] };

key <KP2> { [ KP_Down, Arabic_shadda, 2, NoSymbol ] };

key <KP3> { [ KP_Next, U0670, 3, NoSymbol ] };


key <KP0> { [ KP_Insert, Arabic_sukun, 0, NoSymbol ] };

};


برای اینکه بفهمید هر اسمی مربوط به کدوم کلید هست از این عکس کمک بگیرید:


حالا چند نکته در مورد ادیت فایل بالا:

علامت // نشان دهنده کامنت هست و یعنی بعد اون هرچی وارد کنید تو اون لاین نادیده گرفته میشه.
اگه دقت کنید میبینید که مثلا برای مورد کلید <AE01> چهار کاراکتر مختلف تعریف شده که هرکدوم با یک کاما از همدیگه جدا شدن. این چهار مورد به ترتیب سطح اون کلید رو نشون میدن مثلا اگه خود کلید به تنهایی وارد بشه کاراکتر اول وارد میشه، اگه شیفت( یعنی همون کلید فعالگر سطح دوم) هم با اون کلید نگه داشته بشه کاراکتر دومی، اگه کلید alt سمت راست(فعالگر سطح سوم) باهاش نگه داشته بشه کاراکتر سومی وارد میشه و به همین ترتیب میتونید تا ۵ سطح تعریف کنید. برای تنظیم این مورد هم که کلید فعالگر هر سطح چه کلیدی باشه میتونید از نرم افزار tweak استفاده کنید که بحثش جداست.
برای اینکه بفهمید که به چه کاراکتر هایی نیاز دارید و کد مربوط به هرکدومشون چیه میتونید از سایت زیر وارد کنید. مثلا با جستجوی عبارت arabic کاراکتر های زبان عربی و کد یونیکد مربوط به اونها رو بهتون نشون میده. مثلا کد حرف ذ U+0000 هست برای اینکه توی این فایل استفاده کنید کافیه بنویسید U0000
در مورد سایر نکات مربوط به ادیت این فایل رو هم میتونید در این لینک بخونید.


و اما ویژگی های مهم این چیدمان:


  • سطح اول:
علائم تنوین و فتحه و کسره و ... در قسمت numlock قرار داده شده تا به راحتی بشه اعراب گذاری رو بعد یا در حین نوشتن یک پاراگراف انجام داد.
حروف الفبای اصلی طبق حروف الفبای صفحه کلید فارسی قرار داده شده تا هنگام سوییچ کردن به این چیدمان گیج نشید.


  • سطح دوم:
در قسمت اعداد بالای کیبورد از اعداد ۱ تا ۴ سمبل های مذهبی پر کاربرد و از اعداد ۵ تا ۹ علائم مهم دیگه قرار داده شده.
الف های مختلف در کلید های u و h و n و b کنار هم هست تا به راحتی هنگام تایپ استفاده بشن.
ت موصوله در کلید j هست.
حرف ؤ و ئ به ترتیب در کلید کاما و کلید f هست.
کاراکتر نیم فاصله در کلید g هست.
کلید k و i به ترتیب مربوط به Right-To-Left Mark و Left-To-Right Mark هستن. این دو یونیکد رو اولش خودم هم نمیدونستم هستن ولی کاربرد خیلی مهمی دارند. احتمالا واستون پیش اومده که وقتی مثلا توی تلگرام کلیت متن شما راست چین هست اما وقتی یک حرف انگلیسی رو اول تایپ میکنید اون خط چپ چین میشه. با استفاده از این یونیکد ها میشه از این کار جلوگیری کرد. تصویر زیر این مفهوم رو به خوبی نشون داده.
سایر علامت های مهم هم هستن که میتونید با نگاه به کد بالا و جستجوی یونیکد ازشون مطلع بشید.
کاربرد مهم یونیکد U+200F
کاربرد مهم یونیکد U+200F


  • سطح سوم:
کلید های 1 تا 9 بالای صفحه علامت هایی مثل هشتگ و درصد و ...
در قسمت numlock اعداد 1 تا 9 انگلیسی قرار داده شده.
همچنین علامت های دیگه هم هست.


  • سطح چهارم:
برای استفاده از سطح چهارم باید از ترکیب فعالساز سطح دوم و سومی که تعریف کردید استفاده کنید یعنی به طور پیشفرض باید از کلید ترکیبی shift+ right alt استفاده کنید.(میدونید که تو لینوکس از این ترکیب برای تغییر زبان استفاده نمیشه).
کلید های 1 تا 9 بالای صفحه سایر سمبل های مذهبی پرکاربرد هست.
در مورد این سمبل های مذهبی نکته ای که هست اینه که فعلا بیشتر فونت ها این سمبل ها رو نشون نمیدن. برای اینکه اونا رو ببینید باید از فونتی که از اونها پشتیبانی میکنه رو استفاده کنید مثلا فونت unifont این علایم رو داره.


خوب حالا نحوه استفاده از چیدمان جدیدی که نوشتیم:

بعد نوشتن چیدمان اونو توی یک فایل بدون پسوند با اسم دلخواهمون(در اینجا arf) ذخیره میکنیم. برای انتقال این فایل به پوشه مد نظرمون باید دسترسی root داشته باشیم دستور زیر رو وارد کنید:

sudo nautilus

این فایل رو باید تو پوشه زیر قرار بدید:

/usr/share/X11/xkb/symbols

تو مرحله بعدی باید این تکه کد رو توی فایلهایی که میگم قرار بدید:

<layout>

<configItem>

<name>arf</name>

<shortDescription>arf</shortDescription>

<description>Arabic fasttyping</description>

<languageList><iso639Id>EG</iso639Id></languageList>

</configItem>

<variantList/>

</layout>

چند نکته در مورد این کد بالا:

این کد به زبان xml هست.
در قسمت <name>arf</name> مخفف اسم چیدمانتون رو قرار میدید که اینجا arf هست.
قسمت <description></description> اسم دلخواهتون وارد کنید.
قسمت بعدی یعنی <languageList> هم مشخص میکنه که چیدمان جدیدتون در دسته بندی چه زبانی قرار بگیره.


خوب حالا این کد رو باید توی هر دو فایل base.xml و endev.xml قرار بدید که توی این پوشه قرار دارند:

/usr/share/X11/xkb/rules/


حالا باز این تکه کد رو در نظر بگیرید:

arf Arabic fasttyping

قسمت اول این خط نشون دهنده نام خلاصه و قسمت دوم نشان دهنده نام نمایشی ای هست که چیدمانتون توی منوی انتخاب layout ها خواهد داشت. این خط رو توی هر دو فایل base.lst و endev.lst بعد از آخرین لاین قسمت ‎ ! layoutقرار بدید.


حالا دیگه کارمون تقریبا تموم شده.

تو محیط ترمینال دستور زیر رو اجرا کنید:

gsettings set org.gnome.desktop.input-sources show-all-sources true

از توی تنظیمات کیبورد، اسم چیدمانتون رو جستجو کنید و اون رو به input source اضافه کنید.

و حالا یکبار از سیستمتون logout و login کنید.

تبریک میگم! الان میتونید از چیدمان جدیدی که تعریف کردید به خوبی استفاده کنید. همچنین از فایلای بالا یک بکاپ هم تهیه کنید چون ممکنه بعد بروزرسانی سیستم اونا جایگزین بشن و نیاز باشه که دوباره تنظیمشون کنید.

تایپ عربیتایپ سریعdefine layoutاعراب گذاریkey lt
شاید از این پست‌ها خوشتان بیاید