این ایمکس دوست داشتنی (تعریف کلید میانبر)

کلید میانبر سراسری

منظور از کلید میانبر سراسری‌، کلید‌هایی است که در همهٔ Major-mode‌ها (مد‌های اصلی) به راحتی عمل می‌کنند. برای نمونه C-n  یک کلید میانبر سراسری است. در تمامی مد‌ها اعم از ویرایش متن معمولی و یا کد برنامهٔ C‌، این کلید میانبر‌، نشانگر را به خط بعد منتقل می‌کند. برای تعریف چنین کلید میانبری می‌توانیم از یکی از دو روش زیر بهره ببریم:

(global-set-key "KEY" 'FUNCTION_NAME)

(define-key global-map "KEY" 'FUNCTION_NAME)

برای کسب اطلاعات بیشتر در مورد هر کدام از این توابع می‌توانید از تابع describe-function  همراه ایمکس کمک بگیرید. برای مثال M-x describe-function RET global-set-key RET . یا از کلید میانبرش استفاده کنید C-h f . همین‌طور اگر نشان‌گرتان روی یک تابع ایمکس باشد‌، خود تابع می‌تواند آن را حدس بزند.

تابع اول که تقریبا سر راست است. global-set-key  همان‌طور که از نامش پیداست‌، یک کلید سراسری به اسم KEY که می‌تواند ترکیبی به صورت"‎\C-c f" باشد‌، برای تابع FUNCTION_NAME تعریف می‌کند. همان‌طور که احتمالا متوجه شده‌اید‌، من برای نشان‌دادن Ctrl  در کلید میانبرم از ‎‎\C  استفاده کردم. همین‌طور برای Alt  باید از ‎\M  استفاده کنم. تعریف کلید به این صورت شاید کمی خسته کننده و نا خوانا به نظر بیاید. برای راحتی بیشتر می‌توان از تابع kbd  استفاده کرد. برای نمونه طبق مثالمان‌، همچین چیزی خواهیم داشت:

(global-set-key (kbd "C-c f") 'FUNCTION_NAME)

خود تابع kbd  می‌داند که چطور این کلید را ترجمه کند. برای کسب اطلاعات بیشتر در این مورد می‌توانید باز هم از C-h f  یا تابع متناظرش استفاده کنید. باور کنید که اطلاعات خیلی بهتری به دست می‌آورید ;-)

در تابع دوم ما کار مشابهی را انجام دادیم‌، با این تفاوت که تابع define-key  نیاز به این دارد که بداند کلید میانبر را در کدام محیط اجرا کند. به عبارت دیگر‌، کلید میانبر در کدام Mode در دسترس باشد. از آن‌جایی که قصد ما تعریف کلید میانبر سراسری است به محیط global-map  اشاره می‌کنیم که به define-key  می‌فهماند کلید باید در همه جا در دسترس باشد.

کلید میابر محدود به مد خاص

با این توضیح آخر بخش قبل‌، فکر کنم موضوع کاملا روشن شده باشد. کافیست برای تعریف میانبر برای یک مد خاص‌، محیط مربوط به آن مد را به define-key  نشان دهیم. برای مثال اگر می‌خواهیم که کلید میانبر تنها در محیط متنی در دسترس باشد‌، به جای global-map  از text-mode-map  استفاده می‌کنیم. محیط‌های مربوط به هر مد اصلی‌، عموما به صورت mode-name-map  شناسایی می‌شوند و در هنگام تعریف کلید‌، کافیست نام map مد مورد نظر‌تان را کشف کنید ;-)

python ./share.py help
If you enjoyed it you can use following links to share this article:
  1. twitter
  2. google_plus
  3. facebook
ls ./tags

دیدگاه‌‌‌ها

Comments powered by Disqus