2019年12月24日火曜日

yatex-modeでmozc-im使用時に,ドル記号入力で直接入力に切り替える.

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

2019年4月9日火曜日

mozc-tempを使ってみた。

ac-mozcの後継であるmozc-tempというものがあるということで使ってみました。
英字を直接入力して、変換したい文字列の直後でAlt-nを打鍵することで変換候補が表示されます。

少し利用してみたところ、yatex-modeでは直接入力でしか使わないような変換してほしくない記号も変換されて不便なので、以下のように変換候補の文字に関する正規表現を変更してみました。

;;mozc-temp 

;;(global-set-key (kbd "M-n") #'mozc-temp-convert-dwim)
(global-set-key (kbd "M-n") #'mozc-temp-convert)

;;mozc-tempの変換候補文字に関する正規表現を変更する
(add-hook 'yatex-mode-hook
   '(lambda ()
      (custom-set-variables '(mozc-temp-prefix-regexp
        (let ((convertibles "][,.:0-9A-Za-z-"))
          (format "\\(?:^\\|[^%s]\\)\\([%s]+\\)\\=" convertibles convertibles)))
       )))

使用していて気になる点は、

  • ひらがなやカタカナに変換するときにAlt-nの後でCtrl-H, Ctrl-Kを打鍵する必要があり、打鍵回数が増えるので、ひらがな・カタカナに直接変換するキー割り当てが欲しい。
  • mozc.elを使って入力をしているときには、変換候補が表示されているときに続けて文字を打ち込むと変換確定扱いになるのに対し、mozc-tempではEnterを押して決定しないと変換確定にならないので、やはり打鍵回数が増えて不便.
といったところでしょうか。後者がかなり気にかかるので使用頻度が減ってしまいましたが、日本語入力モードに切り替えるのを忘れて文字列を打ってしまった後に変換可能なのでその用途で使っています。