emacsでyatex-modeを使っているときに,日本語入力中でもドル記号を入力すれば,直接入力に切り替わりドル記号が2つ入力されて欲しい人間です.
mozc.elを使っているときには,mozc-mode-mapを書き換えることで
上記に対応していたのですが,mozc-imではキーマップが用意されていません.そこでキーイベントを拾う関数であるmozc-im-input-methodにアドバイスを定義することで上記を解決してみました.
(require 'mozc-im)
(setq default-input-method "japanese-mozc-im")
(defadvice mozc-im-input-method (around insert-dollars (event))
(if (and (eq major-mode 'yatex-mode)
(equal event ?$))
(YaTeX-insert-dollar)
ad-do-it))
(ad-activate 'mozc-im-input-method)
mozc.elでも,mozc-mode-mapを書き換える方法でなく,これと同様にmozc-handle-eventという関数にアドバイスを定義すれば同じ挙動を示します.
追記:defadviceは古いそうなので,advice-addを使用したものに書き換えてみました.
(require 'mozc-im)
(setq default-input-method "japanese-mozc-im")
(defun mozc-im-input-method--yatex-insert-dollars (orig-fun key)
(if (and (eq major-mode 'yatex-mode)
(equal key ?$))
(YaTeX-insert-dollar)
(funcall orig-fun key)))
(advice-add 'mozc-im-input-method :around #'mozc-im-input-method--yatex-insert-dollars)
追記:2020/03/13:キー入力の度に毎回メジャーモードの判定をするのもおかしいので,以下のように書き換えました.
(require 'mozc-im)
(setq default-input-method "japanese-mozc-im")
(defun mozc-im-input-method--yatex-insert-dollars (orig-fun key)
(if (equal key ?$)
(YaTeX-insert-dollar)
(funcall orig-fun key)))
(add-hook 'yatex-mode-hook
'(lambda ()
(advice-add 'mozc-im-input-method :around #'mozc-im-input-method--yatex-insert-dollars)))