Skip to content

Latest commit

 

History

History
127 lines (103 loc) · 5 KB

1409101130.bind-key.org

File metadata and controls

127 lines (103 loc) · 5 KB

bind-key.el : define-keyを直接書くのは時代遅れ!Emacsの重鎮が行っているスタイリッシュキー割り当て管理術!

[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が請け負ってくれるのが嬉しいです。

bind-key vs define-key(global-set-key)

では、対比してみましょう。

(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)

bind-key/bind-keysで割り当てたキーバインドをリストする

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.elで!

use-package を使っていれば、自動的に M-x describe-personal-keybindingsも使えます。

[includeme file=”inc-package-relate.php” name=”bind-key”]