Omarchy環境でHerdrのprefixキーを押したら日本語入力から英語入力に切り替える

コーディングエージェントな時代になって LazyVim を使うようになり、ターミナルマルチプレクサも tmux だったり zellij だったりを渡り歩いてきた。
zellij でもそんなに不満はなかったんだけど、Herdr を試してみたら「これいいじゃん」ってなって乗り換えた。
ただ一つだけストレスがあった。
日本語入力のまま prefix キー (Ctrl+B) を押すと、そのあとのキーが IME に食われて Herdr の操作ができないのだ。いちいち英語入力に切り替えてから prefix を押すのは地味に面倒くさい。
そこで、Omarchy (Hyprland) のキーバインドで prefix を押した瞬間に日本語入力を off にする ようにしてみた。
# ~/.config/hypr/keybinds.conf
# herdr prefix (Ctrl+B) を押したら fcitx5 を直接入力(英語)に切り替える
# bindn = 非消費バインド: コマンド実行後もキーはそのままターミナルへ届く
# Alacritty がアクティブなときだけ発火(他アプリの Ctrl+B には影響させない)
bindn = CTRL, B, exec, sh -c '[ "$(hyprctl activewindow -j | jq -r .class)" = "Alacritty" ] && fcitx5-remote -c'
ポイントは bindn。普通の bind だとキーが消費されて Ctrl+B がターミナルに届かなくなってしまうが、bindn なら fcitx5 の切り替えコマンドを実行しつつ、キーはそのまま Herdr まで届く。さらに Alacritty がアクティブなときだけ発火するようにしてあるので、ブラウザとかで使う Ctrl+B には影響しない。
これで日本語を打ってる途中でも、何も考えずに prefix を押せば Herdr の操作に入れる。地味だけど快適になった。
追記: Omarchy 更新後に効かなくなった場合
(2026/08/18)
Omarchy のアップデート後、Hyprland の設定が *.conf ではなく Lua ベースの *.lua を読む構成になっている場合がある。
その場合は ~/.config/hypr/keybinds.conf ではなく、~/.config/hypr/bindings.lua に以下のように書く。
-- herdr prefix (Ctrl+B) を押したら fcitx5 を直接入力(英語)に切り替える
-- non_consuming: コマンド実行後もキーはそのままターミナルへ届く
-- Omarchy のターミナルがアクティブなときだけ発火(他アプリの Ctrl+B には影響させない)
o.bind(
"CTRL + B",
nil,
[[sh -c 'case "$(hyprctl activewindow -j | jq -r .class)" in Alacritty|foot|kitty|ghostty|com.mitchellh.ghostty) fcitx5-remote -c ;; esac']],
{ non_consuming = true }
)
以前の例では Alacritty のみを対象にしていたが、Omarchy のアップデート後に既定ターミナルが foot になっている環境では条件に一致せず、fcitx5-remote -c が実行されない。
今使っているターミナルの class は以下で確認できる。
$ hyprctl activewindow -j | jq -r .class
設定を変更したら、以下で反映とエラー確認をする。
$ hyprctl reload
$ hyprctl configerrors