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

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

カテゴリ