bind-map عبارة عن حزمة Emacs توفر bind-map
الماكرو والتي يمكن استخدامها لجعل خريطة المفاتيح متاحة عبر "مفاتيح القائد" المختلفة بما في ذلك المفاتيح المرتبطة بالحالات الشريرة. إنه في الأساس تعميم لفكرة مفتاح القائد كما هو مستخدم في vim أو حزمة Emacs evil-leader، ويسمح بعدد عشوائي من "مفاتيح القائد". ربما يكون من الأفضل شرح ذلك بمثال.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:evil-keys ( " SPC m " " , " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
سيؤدي هذا إلى جعل my-base-leader-map
(إنشاء الخريطة تلقائيًا إذا لم يتم تعريفها بعد) متاحة تحت البادئات (أو القادة) Mm
و SPC
، حيث تكون الأخيرة مقيدة فقط بحالات الشر الطبيعية أو الحركية أو المرئية. الإعلان الثاني يجعل my-elisp-map
متاحًا ضمن المفاتيح المحددة عندما يكون أحد الأوضاع الرئيسية المحددة نشطًا. في الحالة الثانية، الحالات الشريرة المستخدمة هي أيضًا حالات حركية ومرئية عادية لأن هذا هو الوضع الافتراضي كما هو محدد في bind-map-default-evil-states
. من الممكن جعل الارتباطات مشروطة بتحميل الأوضاع الثانوية، أو مزيج من الأوضاع الرئيسية والثانوية. نظرًا لاستخدام رموز الأوضاع، فليس من الضروري التأكد من تحميل أي من حزم الأوضاع قبل هذا الإعلان. راجع مستندات bind-map
لمزيد من الخيارات.
لن تستخدم هذه الحزمة الشر إلا إذا تم تحديد إحدى الكلمات الرئيسية ذات الصلة بالشر. هذا الإعلان، على سبيل المثال، لا يستفيد من الحزمة الشريرة.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
الفكرة وراء هذه الحزمة هي أنك تريد تنظيم ارتباطاتك الشخصية في سلسلة من خرائط المفاتيح المنفصلة عن خرائط الوضع المضمنة. يمكنك ببساطة إضافة مفاتيح باستخدام define-key
المدمج إلى my-elisp-map
على سبيل المثال، وسيهتم إعلان مثل ذلك أعلاه بضمان توفر هذه الارتباطات في الأماكن الصحيحة.
يمكنك استخدام define-key
المدمج والذي سيعمل على النحو المنشود. يعد bind-key
(جزء من حزمة الاستخدام) خيارًا آخر. بالنسبة لأولئك الذين يريدون واجهة مختلفة، يمكنك إما استخدام الكلمة الأساسية :bindings
في ماكرو bind-map
أو الوظيفتين المقدمتين bind-map-set-keys
و bind-map-set-key-defaults
، وكلاهما يستخدمان define-key
فقط define-key
داخليا، ولكن يسمح بربطات متعددة دون الكثير من بناء الجملة.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual)
:bindings ( " c " 'compile
" C " 'check ))
(bind-map-set-keys my-base-leader-map
" c " 'compile
" C " 'check
; ; ...
)
; ; is the same as
; ; (define-key my-base-leader-map (kbd "c") 'compile)
; ; (define-key my-base-leader-map (kbd "C") 'check)
; ; ...
(bind-map-set-key-defaults my-base-leader-map
" c " 'compile
; ; ...
)
; ; is the same as
; ; (unless (lookup-key my-base-leader-map (kbd "c"))
; ; (define-key my-base-leader-map (kbd "c") 'compile))
; ; ...
تضيف الوظيفة الثانية الارتباطات فقط في حالة عدم وجود ربط موجود لهذا المفتاح. من المحتمل أن يكون مفيدًا فقط للتكوينات المشتركة، حيث تريد توفير ربط افتراضي ولكنك لا تريد أن يحل هذا الربط محل الرابط الذي أجراه المستخدم. لاحظ أن المفاتيح في كلتا الوظيفتين عبارة عن سلاسل يتم تمريرها إلى kbd
قبل ربطها.
إذا كنت تستخدم إعلانات bind-map
متعددة، فقد تجد نفسك تكرر خصائص مثل :evil-keys
و :evil-states
. يمكنك استخدام bind-map-for-mode-inherit
لسحب هذه الخصائص تلقائيًا من الخريطة الأصلية كما يوضح المثال التالي. راجع سلسلة الوثائق لمزيد من المعلومات.
(bind-map my-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map-for-mode-inherit my-markdown-map my-leader-map
:major-modes ( markdown-mode ))