KakouneからFcitxのIM制御を行う

最近Big Sky :: Vim と日本語入力の話。という面白い読み物記事を読んで、 そういやkakouneでの日本語入力関連設定してないことを思い出したの。

「挿入モードでesc押したら通常モードに移行しつつIMEをオフにする」程度ならkakoneでも簡単そうだったので、そのあたりの設定方法をメモ。

 

kakoune自体の基本設定については、Kakouneビギナーズガイドという記事を以前書いたのでそちらをよろしくね。(宣伝)

スポンサーリンク

TL;DR

fcitx側設定が適切な場合は、お使いのkakrcに以下を記述すればたぶんオーケー。

map global insert <esc> '<esc>:iminactive<ret>'

define-command iminactive %{
    nop %sh{
        fcitx-remote -c
    }
}

以下解説。

fcitx側の設定

今更ながらfcitx-remoteとeskk.vimの使い方が分かるなどを見る限り、fcitx-remoteはfcitxの入力メソッド設定をきちんとしてないといけないみたい。

僕はもともとそういうふうに設定してたからスムーズにできたけど、入力メソッド設定が

  1. Keyboard - <お使いのキーボードに合った配列>
  2. Mozc

といった順序になっていない場合は、うまく動かない可能性大です。

kakouneからシェルコマンドを呼び出す方法

これはKakoune WikiのShell scriptingで解説されてる。
が、(記事投稿現在)ちとぶっきらぼうな書き方。

:で入れるコマンドモードにおいて、echo %sh{ echo "hello kak" }と打ち込めばkakouneステータスバーにhello kakと表示される……ってことなんだけど。

  • %sh {のように空白を入れるとエラーになる
  • 実行結果をステータスバーに出力したくない場合はnop %sh{ foo }とする

こういった仕様があることには注意。

kakrcにオレオレコマンドを登録する方法

公式readmeの7.12. Defining Commandsでちょびっとだけ書いてあるように、define-commandを使う。

例えば「現在時刻をステータスバーに表示する」コマンドを登録したい場合は、kakrcにこう記述すればいい。

define-command isodate %{
    echo %sh{
        date --iso-8601=seconds
    }
}

ちょっとひねって「現在時刻を編集中のテキストに書き込む」コマンドだとこうかな。

define-command isodate %{
    # execは`execute-keys`のalias
    exec i
    exec %sh{
        date --iso-8601=seconds
    }
    exec <esc>
    
    # 一行にまとめたいなら以下のように
    # exec i %sh{ date --iso-8601=seconds } <esc>
}

KakouneからFcitxのIM制御を行う(表題回収)

上にある三つの部分を組み合わせれば、本題である「esc押したらIMEをオフ」はすぐそこだ。

ついでにmapで挿入モード時のescキー操作内容を上書きして……できあがった完成品がこちら。

# <ret>はEnterキー入力のこと
map global insert <esc> '<esc>:iminactive<ret>'

define-command iminactive %{
    nop %sh{
        fcitx-remote -c
    }
}

要するにシェルからfcitx-remote呼び出してるだけ。

僕はあまり使わなさそうだから入れなかったけど、 「特定キー押すと挿入モードに変更 + IMEをオンにする」とかも簡単にできそうだね。