日本語入力の切り替えをトグルからステートレスに切り替えました
日本語入力の切り替え方式を変えることにしました
私はUSキーボード使いでなおかつDvorak使いなので,
Ctrlキーに近いC-;
で日本語入力をトグルしていました.
しかし, 日本語入力をトグルする形式は, 既に日本語なのに日本語状態に入ろうとして解除してしまうなどの切り替えミスがよく発生してしまいます.
一応トグルであることのメリットも存在して,
使うキーが少なくキーバインドを圧迫しないことがメリットなのですが.
最もキーを使うFirefoxやEmacsでC-.
を使ってなかったり,
C-,
があまり使われないコマンドに割り当てられてたり,
メリットを享受出来ていませんでした.
前からトグルじゃないほうが良いなとは思っていたのですが, 最近これが強迫的に気になるようになってきてしまったので, 日本語入力をトグルではなくステートレスに切り替えようと思いました.
どのキーを切り替えに使うか
JISキーボードだと無変換変換キーを使う人が多いのですが, まずUSキーボードなのでそれはダメです.
USキーボード使いの他の人は右のAltキーやWindowsキーを割り当てる人が結構居るみたいですが, 私は右のAltやWindowsキーも使うのでダメです.
よってあまりアプリケーションのショートカットに使われておらず,
Dvorakで比較的押しやすく,
DvorakでもQwertyでも隣り合っている,.
を切り替えに使うことにしました.
設定した後にSlackがショートカットに使っていることに気が付きましたがまあ良いか.
どうやって設定するか
私はGNU/LinuxでもWindowsでもMozc/Google日本語入力を使っているのでMozcのキーマップとして定義してやれば問題ないです.
後はEmacsの設定をちょっと変えれば問題ないですね.
Mozc
これまでC-;
に以下のようにMozcでトグルでIME切り替えを割り当てていたのを変更します.
DirectInput Ctrl ; IMEOn
Precomposition Ctrl ; IMEOff
Composition Ctrl ; IMEOff
Conversion Ctrl ; IMEOff
Suggestion Ctrl ; IMEOff
Prediction Ctrl ; IMEOff
ここで詰まったのは, 何故かこれをそのまま
DirectInput Ctrl . IMEOn
のように変えてもC-.
で日本語入力モードにならないことで悩んでいたのですが,
Mozcをタスクバーから再起動したら治りました.
切り替え関係のはコアなので再起動しないと変更されないんですかね?
後はDvorakなので',.py
が上に順に並んでいるので,
カンマは変換中にもIMEOffを入れるので抜かして,
順番に英数, ひらがな, カタカナ, 半角カタカナ変換を入れて終わり.
当初はC-.
がIMEOnになった分これまで変換に使ってたキーが足りなくなると思いましたが,
IMEOnにする機能は変換中には要らないのでひらがな変換に割り当てて問題ないですね.
Composition Ctrl ' ConvertToHalfAlphanumeric
Conversion Ctrl ' ConvertToHalfAlphanumeric
DirectInput Ctrl , IMEOff
Precomposition Ctrl , IMEOff
Composition Ctrl , IMEOff
Conversion Ctrl , IMEOff
Suggestion Ctrl , IMEOff
Prediction Ctrl , IMEOff
DirectInput Ctrl . IMEOn
Precomposition Ctrl . IMEOn
Prediction Ctrl . IMEOn
Composition Ctrl . ConvertToHiragana
Conversion Ctrl . ConvertToHiragana
Composition Ctrl p ConvertToFullKatakana
Conversion Ctrl p ConvertToFullKatakana
Composition Ctrl y ConvertToHalfKatakana
Conversion Ctrl y ConvertToHalfKatakana
Emacs
toggle-input-method
はあるのに何故か直接のオンオフの関数がないので定義してあげます.
(defun off-input-method ()
(interactive)
(deactivate-input-method))
(defun on-input-method ()
(interactive)
(activate-input-method default-input-method))
後はC-,
, C-.
に定義されてたコマンドを避難させて終わり.
と思ったらこのデスクトップマシンだとIBusのMozcで入力が可能になっていて, EmacsのMozcを介さずに入力が可能なのですよね.
再現条件は不明でラップトップだとEmacs上でIBusは有効にならないので, この状態を無効化する方法が分からない. 再現条件を確定させれば設定例として役に立つと思うのですが.
まあIBusを利用する方法はEmacsが表示をコントロールする方法に比べて, Mozcの変化予測の表示が高速でそれはそれで良いのですが. 問題点はIBus上でMozcを有効にしていても, IMEの有効化キーを押すとEmacs上でも有効になって多重に有効になってしまうことですね.
Precomposition Ctrl . IMEOn
Prediction Ctrl . IMEOn
を追加することでIME有効時にもEmacsにキー入力を渡さないことで解決しました.
Slack
SlackがC-,
に設定画面を開くキーショートカットを割り当てています.
テキストボックスにフォーカスしていない時なら分かるのですが, テキストボックスにフォーカスして入力状態になっている時も開いてしまいます.
せっかく気兼ねなく日本語オフキーを押せる設定にしたのに気楽に押せなくなってしまいました.
DirectInput Muhenkan IMEOff
Precomposition Muhenkan IMEOff
Composition Muhenkan IMEOff
Conversion Muhenkan IMEOff
Suggestion Muhenkan IMEOff
Prediction Muhenkan IMEOff
DirectInput Henkan IMEOn
Precomposition Henkan IMEOn
Composition Henkan IMEOn
Conversion Henkan IMEOn
Suggestion Henkan IMEOn
Prediction Henkan IMEOn
で無変換変換でIME切り替えできるようにして,
xkeysnailでC-,
をSlackでは無変換に割り当てるようにして解決です.
define_keymap(re.compile("Slack"), {
K("C-w"): K("MUHENKAN"),
}, "C-,のショートカットを無効化しつつIMEオフを維持する")
IMEオフにするだけのC-,
だから無変換に単純に割り当てられました.
C-.
で似たようなことが起きたらどうするかは起きてから悩みます.