use-package で prefix つきのキーマップを定義する

init.elを徐々にuse-packageで書き直していて、
キーバインドはbind-keyの機能を使って

(use-package hoge
  :bind(("C-c 1" . func1)
        ("C-c 2" . func2))
)

みたいに書けたりするんだけど、これだとglobal-mapへの割り当てしかできない。

ローカルなマップに割り当てたいときは:bindじゃなくて:initを使うといいらしい。

(use-package multiple-cursors
  :commands (mc/mark-next-like-this mc/mark-previous-like-this mc/mark-all-dwim)
  :init
  (bind-keys :map mode-specific-map
             ("C->" . mc/mark-next-like-this)
             ("C-< " . mc/mark-previous-like-this)
             ("M-R" . mc/mark-all-dwim))
  :config
  ;; multiple-cursorsの設定
  )

(参考:Emacs - use-packageで可読性の高いinit.elを書く - Qiita)

さらにこれにプレフィクスキーを使ったマップを設定したい。
bind-keyを使わない場合、

(defvar my-original-map (make-sparse-keymap) "My original keymap binded to C-q.")
(defalias 'my-original-prefix my-original-map)
(define-key global-map (kbd "C-q") 'my-original-prefix)

(参考:Emacs は外部 elisp がなくても強い (Emacs Advent Calendar jp: 2011 5日目) – 備忘録)

これをbind-keyでやる場合、:prefix-map を使う。

(use-package hoge
  :init
  (defvar hoge-map (make-sparse-keymap))
  (bind-keys :prefix-map hoge-map
             :prefix "<f8>"
             ("1" . func1)
             ("2" . func2)
             ))

うーん。なんかいろんなやりかたがあってややこしいなー。

 

コメントを残す

メールアドレスが公開されることはありません。