以下のようなEmacs Lispを記述することで解決します(改善の余地がありそう)。
use-packageを使用していますが、使用していない方は適宜読み替えてください。
(defun mozc-mark-escape ()
"Temporarily disable mozc-mode because of region-bindings-mode."
(deactivate-input-method)
(add-hook 'deactivate-mark-hook 'toggle-input-method)
(add-hook 'input-method-activate-hook
(lambda ()
(remove-hook 'deactivate-mark-hook 'toggle-input-method))))
;;--- mozc
;; apt install emacs-mozc
(use-package mozc-popup)
(use-package mozc
:bind
(("C-0" . toggle-input-method))
:config
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(setq mozc-candidate-style 'popup)
(add-hook 'input-method-activate-hook
(lambda ()
(add-hook 'activate-mark-hook 'mozc-mark-escape)))
(add-hook 'input-method-inactivate-hook
(lambda ()
(remove-hook 'activate-mark-hook 'mozc-mark-escape))))
事の起こり
タイトルの通り、mozc-modeでregion-bindings-modeがまともに使えなかったことが原因なのですが、もう少し詳しく説明したいと思います。
mozc-modeについて
mozc-modeとは、Emacsでmozcによる日本語入力を可能にするモードです。
日本人でEmacsを使用している方はほぼほぼ利用しているのではないでしょうか。
そういうわけで詳細な説明は省きます。
region-bindings-modeについて
mozc-modeに比べるとマイナーなパッケージですので少しばかり紹介します。
region-bindings-modeを導入すると、範囲選択中にのみ有効なキーバインドを設定することができます。
あまり嬉しさが伝わらないかもしれないので具体例を挙げます。
例えば、選択している範囲をkill ringに登録するコマンド(kill-ring-saveのこと。いわゆるコピー)はデフォルトで“M-w”に割り当てられていますが、もう少し押しやすいキーに割り当てたいと思ったことはないでしょうか。
そこで、region-bindings-modeを導入します。
(use-package region-bindings-mode
:config
(region-bindings-mode-enable))
(define-key region-bindings-mode-map (kbd "c") 'kill-ring-save)
これで、範囲選択中に“c”を押すだけでコピーを実行することが出来ます。
そもそも範囲選択中に文字を入力することはないので、CtrlとかMetaとかを組み合わせる必要がないよね?というわけです。
region-bindings-modeは、expand-regionやmultiple-cursorsといったパッケージと組み合わせることで更に効力を発揮します。導入されていない方はこれらのパッケージもおすすめです。
それで何が問題だったのか
日々ありがたくmozc-modeやregion-bindings-modeを使わせて頂いていたのですが、あることに気が付きました。

範囲選択中に“c”を入力することでコピーを行えるように設定しているのですが、mozc-modeでは全角の“c”が入力されていまい、コピーを行うことが出来ないのです…。
これは不便です。
mozc-modeでregion-bindings-modeの利点を活かすことが全く出来ません。
解決方法
全角文字もキーバインドに登録してしまうとか、やり方は色々あると思いますが、とりあえずシンプルな方法として、mozc-modeで範囲選択が実行されたときのみ入力モードをデフォルトに切り替える方法を考えました。
以下がその記述になります。
(defun mozc-mark-escape ()
"Temporarily disable mozc-mode because of region-bindings-mode."
(deactivate-input-method)
(add-hook 'deactivate-mark-hook 'toggle-input-method)
(add-hook 'input-method-activate-hook
(lambda ()
(remove-hook 'deactivate-mark-hook 'toggle-input-method))))
(add-hook 'input-method-activate-hook
(lambda ()
(add-hook 'activate-mark-hook 'mozc-mark-escape)))
(add-hook 'input-method-inactivate-hook
(lambda ()
(remove-hook 'activate-mark-hook 'mozc-mark-escape)))
- “input-method-activate-hook”
- “input-method-inactivate-hook”
- “activate-mark-hook”
- “deactivate-mark-hook”
この4つのhookをいい感じに組み合わせることで、mozc-modeで範囲選択が実行されたときのみ入力モードをデフォルトに切り替えることが出来ます。
“input-method-hogehoge-hook”は入力メソッドの有効・無効の切り替わり時に呼ばれるhookで、“hogehoge-mark-hook”は範囲選択の活性・不活性時に呼ばれるhookです。
見て分かる通り、中々トリッキーな記述になってしまいました。
バグの原因になりそうなので、もっと良いやり方があれば教えていただけると助かります。