月別アーカイブ: 2015年12月

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

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

 

visual-regexp-steroids がいつのまにか使えなくなった(emacs24.3)

emacsでPerl風の正規表現を使うやつ で導入して快適に使用していた visual-regexp-steroids 、いつのまにかエラーが出るようになっていた。

void-function pcre2el error

pcre2elは問題なくインストールされている。んんん…?
と思っていたら、ちょっと前にパッケージのアップグレードをした際にpcre2elがアップグレードされており、
その中で with-eval-after-load が使われていたのでした。。。

これ、どうやらemacs24.4から使えるマクロらしい。
私のemacsは24.3。うん、これが原因っぽい。

というわけでpcre2elをダウングレード。無事動くようになりました。
こういうことがあるからアップグレードの際は古いパッケージを消さずに残しておくべきですね。
(package.elでバージョン固定とかの管理がうまいことできればいいんだけどなー)
(というかそろそろemacs24.4を入れるべきか)