きっかけは re-builder で組み立てた正規表現を kill ring に保存しようとしたとき C-c C-w が上書きされていたこと。
eyebrowse というパッケージが C-c C-w を奪っていた
eyebrowse が C-c C-w を占有しているのはマナー違反とみなされるらしく、別のキーバインドに逃す方法が紹介されていた。
- Spacemacsに乗り換えてみた(4)ウェブ制作編 - Qiita
- eyebrowse.el : ウィンドウ構成を保存・切替える新しくシンプルな実装
- Emacs の Prefix Key とお約束ごと - Qiita
- Key Binding Conventions - GNU Emacs Lisp Reference Manual
Sequences consisting of C-c followed by a control character or a digit are reserved for major modes.
が C-c C-w を奪うのがダメな根拠と思われる
この問題をめぐる顛末
- default spacemacs config has bound C-c C-w keybinding to eyebrowse rather than org-mode refile. · Issue #10729 · syl20bnr/spacemacs · GitHub
- 2018-05-23 Spacemacs 側にイシューが立つ。 eyebrowse 側の問題ということで別のキーバインドに逃す workaround が紹介される。
- Overrides keybinding for org-refile · Issue #86 · wasamasa/eyebrowse · GitHub
- 2018-05-25 eyebrowse 側にイシューが立つ。「prefix 変えろ」と冷たくあしらわれる。
- なんか感じ悪いなと思ったので自分の Spacemacs 内では eyebrowse に一切キーバインドを渡さないことにした。やり方は後述。
- 2018-05-25 eyebrowse 側にイシューが立つ。「prefix 変えろ」と冷たくあしらわれる。
- Alternative keybinding recommendation · Issue #84 · wasamasa/eyebrowse · GitHub
- 2018-05-11 eyebrowse 側に prefix キー変更の提案イシューが立つ。 org-refill とかぶるから、とのこと。
- Clarify README on customizing keymap prefix · wasamasa/eyebrowse@dfeea9e · GitHub
- 2018-05-15 eyebrowse の作者が README に prefix 変更にまつわる説明を追記する。↑のイシューを立てた人が「同じ問題に遭遇した人はこれが初めてではないから」との理由。
作者の立場からすると、つい最近ドキュメントを修正したばかりの箇所についてまた同じイシューが立ったのでイラッとしたのだろう。気持ちは分からなくもないが...。
C-c C-w を取り戻す
C-c w に逃してもいいけど、使うつもりがないので*1キーバインドを割り当てたくない。で、こうした。
(defun dotspacemacs/user-init () (setq eyebrowse-keymap-prefix "") )
空文字列を渡せばいけた。 nil を渡したら Spacemacs の起動時にエラーが出た。
失敗談
最初は bind-key で reb-mode-map 内だけで C-c C-w を書き換えた。動くは動いたが which-key が出すキーバインド一覧からも消えてしまった。
(defun dotspacemacs/user-config () (bind-key* "C-c C-w" 'reb-copy reb-mode-map) )
C-c C-w を忘れる可能性もあるので、ちゃんと出てきて欲しい。ここに再び登場させるための設定方法を探したりもしたが、そもそも C-c C-w はどこで定義されてるの?という筋から追って、 prefix を変える方法にたどり着いた。 prefix を変えたら which-key にもちゃんと reb-copy が現れるようになった。めでたしめでたし。
*1:そもそも何をするパッケージなのかも知らない