[includeme file=”inc-package-table.php” name=”bind-key” where=”melpa”]
John Wiegley氏謹製 bind-key.el はキー割り当ての 設定関数 define-key を完全に置き換えます。
昨日紹介したuse-package.el の内部で使われています。
これを使うことで以下のメリットがあります。
- 移行がすごい簡単
- 短くなる
- kbd によるEmacs記法が使える(bind-key)
- 個人用に割り当てたキーを列挙できる( M-x describe-personal-keybindings )
- 複数のキーをまとめて割り当てられる(bind-keys)
- メジャーモード・マイナーモードによらない最優先のキーバインドを定義できる(bind-key*, bind-keys*)
難しいことはすべてbind-key.elが請け負ってくれるのが嬉しいです。 [includeme file=”inc-package-install.php” name=”bind-key” where=”melpa”]
John Wiegley氏謹製 bind-key.el はキー割り当ての 設定関数 define-key を完全に置き換えます。
昨日紹介したuse-package.el の内部で使われています。
これを使うことで以下のメリットがあります。
- 移行がすごい簡単
- 短くなる
- kbd によるEmacs記法が使える(bind-key)
- 個人用に割り当てたキーを列挙できる( M-x describe-personal-keybindings )
- 複数のキーをまとめて割り当てられる(bind-keys)
- メジャーモード・マイナーモードによらない最優先のキーバインドを定義できる(bind-key*, bind-keys*)
難しいことはすべてbind-key.elが請け負ってくれるのが嬉しいです。
では、対比してみましょう。
(global-set-key (kbd "C-c x") 'my-ctrl-c-x-command)
↓
(bind-key "C-c x" 'my-ctrl-c-x-command)
(define-key some-other-mode-map (kbd "C-c x") 'my-ctrl-c-x-command)
↓
(bind-key "C-c x" 'my-ctrl-c-x-command some-other-mode-map)
重複もこんな感じで回避!
(define-key dired-mode-map "o" 'dired-omit-mode)
(define-key dired-mode-map "a" 'some-other-mode-map)
↓
(bind-keys :map dired-mode-map
("o" . dired-omit-mode)
("a" . some-custom-dired-function))
仮にC-tにother-windowを割り当てたとすると、 diredだとC-tがプレフィクスキーになってしまい other-windowが動いてくれません。
このような場合、モードによる上書きよりも 優先度が高いようにする必要があります。
この設定を書くのは minor-mode-map-alist だの minor-mode-overriding-map-alist だの emulation-mode-map-alists だの とてもややこしい問題になってきます。
そんな場合bind-key/bind-keysの代わりに bind-key* や bind-keys* を使えば解決です。
(bind-key* "C-t" 'other-window)
M-x describe-personal-keybindings は bind-keyなどで個人的に割り当てたキーバインドを 表示してくれます。
たとえば、以下の設定の場合、
(require 'bind-key)
(bind-key "C-x C-f" 'ffap)
(bind-key "C-c f" 'find-file)
(bind-key* "C-t" 'other-window)
このように表示されます。
Key name Command Comments
--------- --------------- ---------------------
C-t `other-window' was `transpose-chars'
C-c f `find-file'
C-x C-f `ffap' was `find-file'
use-package を使っていれば、自動的に M-x describe-personal-keybindingsも使えます。
[includeme file=”inc-package-relate.php” name=”bind-key”]