بیشک GNU Emacs یکی از قدرتمندترین ویرایشگرهای متنی موجود است و از آنجایی که یکی از دلایلی که بنده آن را انتخاب کردم، نوشتن متون پارسی و قابلیت دوسویهنویسی (Bidirectional Editing) آن بود، لازم دانستم نوشته کوچکی آماده کنم تا این مسیر را برای آیندگان آسودهتر سازم.
به طور پیشفرض تمامی متون در Emacs به صورت چپچین نوشته میشوند به برای فعال سازی الگوریتم دوسویهنویسی نیاز است که ابتدا متغیر bidi-display-reordering
به غیر از nil
و در ادامه bidi-paragraph-direction
به غیر از left-to-right
یا right-to-left
تنظیم شود1:
(setq-default bidi-display-reordering t
bidi-paragraph-direction nil)
همانطور که از اسم متغیر bidi-paragraph-direction
پیداست، این متغیر جهت متن را کنترل میکند و وقتی آن را به nil
تغییر دهیم Emacs به طور پاراگراف-به-پاراگراف در خصوص جهت متن تصمیمگیری میکند. (برای تغییر جهت اجباری متن تنها کافیست این متغیر را به left-to-right
یا right-to-left
تغییر دهید. آگاه باشید که این مقدار ها symbol هستند و نه string.)
همانند هر ویرایشگر هوشمند دیگری، الگوریتم دوسویهنویسی Emacs از روی اولین حرف موجود در خط تصمیم میگیرد که پاراگراف را چگونه نمایش دهد؛ ولی با توجه به اینکه لاتک و یا HTML به خطوط جدید حساس هستند و در برخی دستورات و برچسبها را نمیتوان به سادگی فاصله ایجاد کرد، به نظر من منطقیتر است که الگوریتم دوسویهنویسی به صورت خط به خط اعمال شود. طراحان Emacs دو متغیر
bidi-paragraph-start-re
و
bidi-paragraph-separate-re
را برای تغییر شروع و پایان دوسویهنویسی در پاراگرافها در اختیار ما کاربران گذاشتهاند، ازاینرو میتوان با پیکربندی زیر از آنها برای رسیدن به مقصودمان استفاده کرد:
(setq-default bidi-paragraph-start-re "^"
bidi-paragraph-separate-re "^")
همانگونه که مشاهده کردید، با چندین لاین کد emacs-lisp
به سادگی الگوریتم دوسویهنویسی را همانطور که میخواستیم شخصیسازی کردیم. یکی از برتریهای Emacs نسبت به ویرایشگرهای دیگر همین قابلیت شخصیسازی آن است، ازاینرو لازم میدانم به کاربران جدید این ویرایشگرِ قدرتمند گویم که Emacs بهراستی "میتواند" چیزی باشد که به آن نیاز دارید، تنها باید مستندات آن را مطالعه کرده و طبق نیازهای خود آن را پیکربندی و شخصیسازی کنید.
-
از آنجایی که این متغیر buffer-local است، لازم است از تابع
setq-default
استفاده شود. ↩