این ایمکس دوست داشتنی (غلط‌گیر املایی)

May 20, 2013·

3 min read

وقتی که بچه‌تر بودم‌، به بالا بودن نمرات املایم افتخار می‌کردم. ولی خوب انگار آن‌ها ربط مستقیمی به دایرهٔ لغات مورد استفاده‌ام در آن زمان‌ها داشت. به هر حال الان خیلی پیش می‌آید که غلط بنویسم‌! با وسط آمدن پای زبان انگلیسی این مشکل بیشتر خود‌نمایی می‌کند. به هر حال‌، خیلی خوب می‌شود که ویرایشگر محبوبم‌، در درست نوشتن‌هایم کمکم کند.

تنظیم aspell

خوشبختانه Emacs به صورت پیش‌فرض بستهٔ ispell را همراه دارد که قرار است کمک‌مان کند. اول از همه با دستور زیر برنامهٔ غلط‌گیر املایی مورد نظرم را جایگزین برنامهٔ پیش‌فرض ispell می‌کنم.

(setq ispell-program-name "aspell")
(setq ispell-list-command "list")

دستور اول متغیر برنامهٔ غلط‌گیر املایی را به aspell تغییر می‌دهد و دستور دوم دستور لیستی که همراه با برنامه استفاده می‌شود را مشخص می‌کند. به صورت پیش‌فرض این مقدار برابر ‎-l است که همتای آن در برنامهٔ aspell مقدار list است.

چرا aspell؟

خوشبختانه این برنامه‌، به زحمت آلن باغومیان عزیز‌، صاحب یک دیکشنری به درد بخور فارسی هم شده. این دیکشنری را که احتمالا همراه aspell روی سیستم‌تان نصب نمی‌شود را می‌توانید از این‌جا بگیرید. راهنمای کامپایل و نصبش همراه خود بسته است (عملا یک ‎./configure && make && make install ساده باید کارتان را راه بیاندازد.).

نحوهٔ کار

در عمل شما می‌توانید به چند روش از این غلط‌گیر استفاده کنید. اما اول از همه باید تعیین کنید که از چه زبانی استفاده می‌کنید. زبان پیش‌فرض انگلیسی است. اما شما می‌توانید با فراخوانی تابع ispell-change-dictionary (یادتان که نرفته‌، M-x) و وارد کردن اسم دیکشنری (مثل خیلی دیگر از دستورات فراخوانی شده با این روش‌، با tab قابلیت تکمیل خودکار دارد) دیکشنری مد نظر‌تان را صدا کنید. مثلا برای زبان فارسی همچین کاری می‌کنیم:

M-x ispell-change-dictionary fa

البته دیکشنری‌های متفاوتی با نصب بستهٔ فارسی ispell اضافه می‌شود که بسته به نیاز‌تان (من نفهمیدم فرق‌شان چیست‌، اگر می‌دانید بگویید که ممنون‌تان شوم) یکی را انتخاب کنید.

flyspell-mode

با فراخوانی این مد‌، کل بافر را تحت تاثیر قرار می‌دهید. در صورت بر خورد با هر غلط املایی‌، لغت تغییر رنگ داده و می‌توانید با کلیک وسط ماوس آن پیشنهاد‌های سیستم‌را انتخاب کنید.

### ispell-word ispell-word

این دستور‌، به درد موقعی می‌خورد که نمی‌خواهید یک flyspell-mode را صدا کنید. به هر حال این مد همیشه هم آن‌قدر که باید خوب عمل نمی‌کند (بیشترین تاثیر را زمانی دارد که کلمه بعد از فراخوانی مد تایپ شود). البته برای رفع مشکلات این مد می‌توانید از flyspell-region که محدودهٔ انتخاب شده را بررسی می‌کند استفاده کنید. ولی گاها دوست دارید که تنها یک کلمه که مطمئن نیستید را بررسی کنید. آن وقت است که ispell-word دستور مورد نظرتان است. تنها کافیست نشان‌گر را روی لغت ببرید و این دستور را بزنید.

کلید‌های میانبر

بدیهی است که بهتر است برای این دستورات‌، کلید‌های میانبر تعریف کنیم. مثلا کلید‌های مورد استفادهٔ من این‌ها هستن د:

(global-set-key (kbd "<f8>") 'ispell-word)
(global-set-key (kbd "C-S-<f8>") 'flyspell-mode)

همین‌کار را می‌توانید برای ispell-change-dictionary هم انجام دهید. ولی ispell این قابلیت را دارد که از روی سر خط فایل‌، زبان آن را تشخیص دهد. این یعنی این که اگر متنی با زبان فارسی دارم‌، کافیست در خط اول آن یک همچین متنی داشته باشم:

-\*- ispell-dictionary: "fa" -\*-

تا زبان تنها برای همین بافر حاضر به فارسی تغییر کند. به هر حال این انتخاب‌ها اختیاری است.

مشکلات حاضر

مشکل این است که نمی‌توان دیکشنری را به صورت دو زبانه و همزمان داشت. از طرفی در صفحهٔ ویکی ispell به غلط‌گیر Hunspell اشاره شده که روش خوبی هم برای بررسی متن و تغییر خودکار زبان غلط‌گیر دارد. با توجه به استفاده از این دیکشنری در OpenOffice‌ها خیلی وسوسه شده‌ام که آن را هم تست کنم. به زودی در مورد آن‌ها هم خواهم نوشت.