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



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



## تنظیم aspell


خوشبختانه [Emacs](http://shahinism.github.io/categories/emacs.html) به صورت پیش‌فرض بستهٔ [ispell](http://www.emacswiki.org/emacs/InteractiveSpell#toc5) را همراه دارد که قرار است کمک‌مان
کند. اول از همه با دستور زیر برنامهٔ غلط‌گیر املایی مورد نظرم را جایگزین برنامهٔ
پیش‌فرض [ispell](http://www.emacswiki.org/emacs/InteractiveSpell#toc5) می‌کنم.



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

```


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




## چرا aspell؟


خوشبختانه این برنامه‌، به زحمت [آلن باغومیان](https://fa.wikipedia.org/wiki/%D8%A2%D9%84%D9%86_%D8%A8%D8%A7%D8%BA%D9%88%D9%85%DB%8C%D8%A7%D9%86)
عزیز‌، صاحب یک دیکشنری به درد بخور فارسی هم شده. این دیکشنری را که احتمالا همراه
[aspell](http://aspell.net/) روی سیستم‌تان نصب نمی‌شود را می‌توانید از [این‌جا](ftp://ftp.gnu.org/gnu/aspell/dict/0index.html) بگیرید. راهنمای کامپایل و نصبش
همراه خود بسته است (عملا یک **‎./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](http://www.emacswiki.org/emacs/InteractiveSpell#toc5)
این قابلیت را دارد که از روی سر خط فایل‌، زبان آن را تشخیص دهد. این یعنی این که
اگر متنی با زبان فارسی دارم‌، کافیست در خط اول آن یک همچین متنی داشته باشم:



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

```

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




## مشکلات حاضر


مشکل این است که نمی‌توان دیکشنری را به صورت دو زبانه و همزمان داشت. از طرفی در
صفحهٔ ویکی [ispell](http://www.emacswiki.org/emacs/InteractiveSpell#toc5) به غلط‌گیر [Hunspell](http://wiki.openoffice.org/wiki/Main_Page) اشاره شده که روش خوبی هم برای بررسی متن و
تغییر خودکار زبان غلط‌گیر دارد. با توجه به استفاده از این دیکشنری در OpenOffice‌ها
خیلی وسوسه شده‌ام که آن را هم تست کنم. به زودی در مورد آن‌ها هم خواهم نوشت.





