LinuxのIME制御: fcitxとVimとEmacs with evil-mode
( ´_ゝ`)ノシ
yoshitiaです。
Qiitaの2014アドベントカレンダーエントリ追加できなくなっちゃったけどこの記事はEvil Advent Calender 2014の11日目の記事のつもりです。
どれだけいるかわからない
Linux使っててimeにfcitx使ってて Vim使ってて Emacsでevil-mode使ってる方向けに 一つの記事でVimとevil-modeそれぞれの esc押してノーマルモード(ステート)になる時、 imeオフにする設定を紹介します。
これができると日本語入力した後 ノーマルモードでテキスト編集しようと思ったら ひらがなコマンドはないよって VimやEmacsに怒られなくて済みます。
1 どんな設定が必要なの?
2 Vim編
http://blog.goo.ne.jp/ikunya/e/68dfba9591660b04f98c1bec66aaf9c3 で紹介されていたページのvimscriptから 「esc押してノーマルモード(ステート)になる時、 imeオフにする設定」だけを抜粋してます。
どなたか知らないけど謎の中国人さんありがとう。 感謝しつつ~/.vimrcに以下の設定を書きます。
"##### auto fcitx ########### function! Fcitx2en() let s:input_status = system("fcitx-remote") if s:input_status == 2 let l:a = system("fcitx-remote -c") endif endfunction set ttimeoutlen=150 "退出插入模式 autocmd InsertLeave * call Fcitx2en() "##### auto fcitx end ######
紹介されてるページのvimscriptを全部丸写しすると もれなくインサートモードに入ると同時にimeオンになる設定もついてきます。
3 Evil編
evil-modeの場合です。 Vim編で使われていたfcitx-remoteをここでも使います。
$ fcitx-remote
で現在のime状態を数値で教えてくれます
$ fcitx-remote -c
だとimeがオフされます。 この2つを利用した設定を~/.emacs.d/init.elに書きます。 http://d.hatena.ne.jp/syohex/20121230/1356850677 syohexさんの記事でshell-command-to-stringの存在知りました。 便利。
(add-hook 'evil-normal-state-entry-hook (lambda () (if (string= "2\n" (shell-command-to-string "fcitx-remote")) (shell-command "fcitx-remote -c"))))