bind-map adalah paket Emacs yang menyediakan makro bind-map
yang dapat digunakan untuk membuat peta kunci tersedia di berbagai “kunci pemimpin” termasuk yang terkait dengan keadaan jahat. Ini pada dasarnya adalah generalisasi dari gagasan kunci pemimpin seperti yang digunakan dalam vim atau paket pemimpin jahat Emacs, dan memungkinkan sejumlah "kunci pemimpin" yang berubah-ubah. Ini mungkin paling baik dijelaskan dengan sebuah contoh.
(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))
Ini akan membuat my-base-leader-map
(secara otomatis membuat peta jika belum ditentukan) tersedia di bawah awalan (atau pemimpin) Mm
dan SPC
, di mana yang terakhir hanya terikat dalam keadaan normal, gerak atau visual kejahatan. Deklarasi kedua membuat my-elisp-map
tersedia di bawah kunci yang ditentukan ketika salah satu mode utama yang ditentukan aktif. Dalam kasus kedua, keadaan jahat yang digunakan juga merupakan gerakan dan visual normal karena ini adalah default seperti yang ditentukan dalam bind-map-default-evil-states
. Dimungkinkan untuk membuat pengikatan tergantung pada mode minor yang dimuat, atau campuran mode mayor dan minor. Karena simbol mode digunakan, tidak perlu memastikan bahwa paket mode apa pun dimuat sebelum deklarasi ini. Lihat dokumen bind-map
untuk opsi lebih lanjut.
Paket ini hanya akan menggunakan kejahatan jika salah satu kata kunci terkait kejahatan ditentukan. Deklarasi ini, misalnya, tidak menggunakan paket jahat.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
Ide dibalik paket ini adalah Anda ingin mengatur binding pribadi Anda dalam serangkaian peta kunci yang terpisah dari peta mode bawaan. Anda cukup menambahkan kunci menggunakan define-key
bawaan ke my-elisp-map
misalnya, dan deklarasi seperti di atas akan memastikan bahwa pengikatan ini tersedia di tempat yang benar.
Anda dapat menggunakan define-key
bawaan yang akan berfungsi sebagaimana mestinya. bind-key
(bagian dari use-package) adalah pilihan lain. Bagi mereka yang menginginkan antarmuka yang berbeda, Anda dapat menggunakan kata kunci :bindings
di makro bind-map
atau dua fungsi yang disediakan bind-map-set-keys
dan bind-map-set-key-defaults
, yang keduanya hanya menggunakan define-key
secara internal, tetapi izinkan beberapa pengikatan tanpa banyak sintaksis.
(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))
; ; ...
Fungsi kedua hanya menambahkan pengikatan jika tidak ada pengikatan untuk kunci tersebut. Ini mungkin hanya berguna untuk konfigurasi bersama, di mana Anda ingin memberikan pengikatan default tetapi tidak ingin pengikatan itu menimpa pengikatan yang dibuat oleh pengguna. Perhatikan bahwa kunci di kedua fungsi adalah string yang diteruskan ke kbd
sebelum mengikatnya.
Jika Anda menggunakan beberapa deklarasi bind-map
Anda mungkin akan mengulangi properti seperti :evil-keys
dan :evil-states
. Anda dapat menggunakan bind-map-for-mode-inherit
untuk secara otomatis menarik properti ini dari peta induk seperti yang diilustrasikan oleh contoh berikut. Lihat dokumen untuk informasi lebih lanjut.
(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 ))