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

·

2 min read

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

منظور از کلید میانبر سراسری‌، کلید‌هایی است که در همهٔ 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 مد مورد نظر‌تان را کشف کنید ;-)