🤖

fcitx5-lua でお手軽 vi 協調モード

2021/02/26に公開

fcitx5 では fcitx5-lua で lua で fcitx5 の動作を拡張できるようになっています。これを使うといわゆる「vi 協調モード」を簡単に実現することが可能です。

https://github.com/fcitx/fcitx5-lua

以下が必要な設定ですが、ちゃんと動作させるためには fcitx5-lua の 5.0.3 以降が必要です(執筆時点の最新です)。Arch Linux なら pacman で普通に入ります。

まず、これから作成する addon の定義を書きます。

~/.local/share/fcitx5/addon/hotkey-extension.conf
[Addon]
Name=Hotkey extension
Comment=Hotkey extension
Category=Module
Type=Lua
OnDemand=False
Configurable=False
Library=main.lua

[Addon/Dependencies]
0=luaaddonloader

まあ、だいたいのものはなんでもいいと思います。次にスクリプト本体。

~/.local/share/fcitx5/lua/hotkey-extension/main.lua
local fcitx = require("fcitx")

fcitx.watchEvent(fcitx.EventType.KeyEvent, "handler")

function handler(sym, state, release)
    if ((sym == 65307 and state == 0) or (sym == 91 and state == 4)) and
        not release
    then
        fcitx.setCurrentInputMethod("keyboard-us")
    end
    return false
end

この例では Escape 単押しの場合と Ctrl-[ それぞれの場合に、input method を keyboard-us に変更しつつ、結果としては false を返しています。false を返すと入力がパススルーされるので、結果的に EscapeCtrl-[ が入力されると日本語入力モードがオフになった上に、入力したキーそのものは消費されることなく透過します。

keyboard-us のところは環境によって指定すべきものが違うかもしれませんが、ハンドラ関数内に print(fcitx.currentInputMethod()) とか入れてコマンドラインから fcitx5 を起動すれば何を指定すべきかは表示されると思うので、各自確認してください。

というわけでお手軽 vi 協調モードでした。fcitx5 の lua 拡張はアイデア次第ではいろいろ活用できそうです。

Discussion