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オフにする設定を紹介します。

 

これができると日本語入力した後 ノーマルモードでテキスト編集しようと思ったら ひらがなコマンドはないよって VimEmacsに怒られなくて済みます。

1 どんな設定が必要なの?

1 今imeがオンかオフかをVimEmacsに教える設定 2 1で結果がオンだったらimeをオフにする設定 3 escキー押した時に2を使うようにする設定

ちょっとしたプログラミングですね。 VimEmacs単体でやるのではなく fcitxのコマンド、fcitx-remoteと VimEmacsからシェルコマンドを実行させる機能を利用します。

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

これでLinuxVimEmacsのevil-modeでビィムビィムできます。

日々の生活にVimEmacsをEvilを。 Happy Evil life!