bind-key 20161218.1520(in MELPA)
A simple way to manage personal keybindings

概要

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

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてbind-keyを使う方は
以下のコマンドを実行します。

M-x package-install bind-key

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name bind-key

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も使えます。

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。