課題:マウスからキーボードに持ち替え続ける
MulmoTerminal で 9 枚のマスに AI を並べて動かしている。拡大しているマスから隣のマスへ移って様子を見るたびに、マウスで対象をクリックする。一日に何十回。
キーボードで切り替えたい、と思って設定を見る。keymap という項目はある。書き方の例もある。
ただし、既定値が一つも無い。
Cmd+T で新しいタブ、Cmd+W で閉じる。普通のアプリにはこれらが初めから入っている。MulmoTerminal は、空だ。
なぜ既定値を置かないのか
MulmoTerminal のターミナルで動くのは、ユーザーが選んだプログラムだ。シェル、vim、less、Claude Code、Codex。これらはあらゆるキーを使う。
- シェルは
Ctrl+A、Ctrl+E、Ctrl+Kを行頭移動・行末移動・行末まで削除に使う lessとvimはPageDown、PageUpでページ送り- エディタは
Ctrl+X、Ctrl+Sで切り取り・保存 - Claude Code 自身も矢印キーで選択肢を選ぶ
アプリ側がキーを取ると、その分だけ中のプログラムに届かなくなる。普通のアプリと違って、ターミナルを持つアプリでは「このキーは誰も使っていない」と仮定できない。
何が中で動いているかを知っているのは使っている人だけだ。だから既定値を置かず、割り当てを書いた人だけが「ターミナル側で何かが使えなくなる」という代償を払う形にしている。
設定の 2 つの入口
1. 設定画面から(推奨)
Settings → Keyboard shortcuts に全アクションが並ぶ。各行の「変更」を押してキーを押すと、そのまま保存される。すぐ効く。
- MulmoTerminal 自身の起動を止めてしまう割り当ては受け付けない
- ブラウザが先に奪うキー(Chrome の
Cmd+Tなど)は警告付きで保存される - 「おすすめのキー」ボタンを押すと、プラットフォーム向けの入門セットが一度に入る(まだ割り当ての無い動作と、使われていないキーだけに)
2 打のシーケンスと send 系(ターミナルへ任意のキー列を送る)はこの画面からは書けないので、ファイルで書く。
2. ~/.mulmoterminal/config.json を手で書く
{
"keymap": {
"zoom-next": "PageDown",
"zoom-prev": "Shift+PageUp"
}
}
書いたらアプリを再起動して、ブラウザのタブを再読み込みする。この手で書くルートが要る場面は、2 打のシーケンスと send、それと設定ファイルを git に入れて共有したいときだ。
割り当てを書いても、完全には奪わない
既定値ゼロの代わりに、割り当てた側にも「ターミナル内のプログラムが完全に使えなくなる」ことが起きないよう、4 つの逃げ道が用意されている。
Shift 併用は完全一致でしか奪わない
PageDown を割り当てても、Shift+PageDown は奪われない。ターミナルのスクロールバックはそちらで遡れる。「PageDown を割り当てたら less のページ送りが使えなくなった」が起きない。
IME 変換中は常に素通し
日本語の変換候補を PageDown でめくっている最中は、割り当てが一時的に無効化される。日本語で AI に指示を出すなら、ここは気になるポイント。
2 打のキーで、奪う範囲を狭くする
{
"keymap": {
"zoom-next": "Cmd+k j",
"zoom-prev": "Cmd+k k"
}
}
続けて 2 つのキーを押す形で割り当てられる。最初の 1 打(Cmd+k)だけを奪い、めったに使わないキーを選べば、実質的にほとんど何も奪わない。VS Code のキーマップに慣れている人には馴染みのある形。
衝突は起動時に警告として出る
1 つのキーに 2 つの動作を割り当てると、片方が勝つ。黙って片方を捨てずに、サーバの起動ログに動作名付きで警告が出る。「設定したのに効かない」で悩む時間が消える。
詳細・gotcha
拡大用と非拡大用を混同しない
よくある間違い。アクションは効く場面が決まっている:
| アクション | 効く場面 |
|---|---|
zoom-next / zoom-prev |
拡大しているときだけ(拡大対象を動かす) |
focus-next / focus-prev |
非拡大のグリッド表示でだけ(カーソルを動かす) |
next-attention |
拡大・非拡大の両方(入力待ち → 完了・未レビュー → idle の順で巡回) |
拡大版と非拡大版で別のキーを割り当てる。1 つのキーは 1 つの動作にしか解決されないので、両方に同じキーを書くと片方が負ける。どちらが負けたかは起動時の警告に出る。
端で止まる、巻き戻らない
zoom-next を末尾のマスで押しても、先頭には戻らない。先頭で zoom-prev を押しても末尾には行かない。環状にすると「いま何枚目か」が分からなくなるため、仕様として端で止まる。マスが 2 つしか無いときは押した回数の約半分が無反応に見えるので、挙動として知っておく。
Mac のノートには独立した PageUp / PageDown が無い
Fn + ↑ / Fn + ↓ で代用するが、この組み合わせを keymap に書いても OS が Fn を飲んでしまうためアプリまで届かない。Mac で使うなら:
- 矢印キーの別の組み合わせ(
Alt+ArrowDownなど) - ファンクションキー(
F8、F9) - 2 打のシーケンス
のどれかを選ぶ。
ブラウザが先に取るキーは、割り当てても何もしない
Cmd+T、Cmd+W、Cmd+N などタブ操作のキーは、focus-mode(集中モード)に入っている Chrome・Edge・Arc のとき以外は MulmoTerminal まで届かない。設定画面の該当行には「効かない」と出て、起動時にも「この OS で予約されているのはこの一覧」と警告が出る。
反映のタイミング
- 設定画面から変えた場合: すぐ効く
- ファイルを手で書いた場合: アプリを再起動して、ブラウザのタブを再読み込み
サーバ起動時に一度だけ config.json を読むため、手編集はアプリ再起動が要る。これは terminalSubmit と同じ注意点で、「設定したのに効かない」の典型原因になる。
使ってみる
MulmoTerminal の立ち上げ方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。既に動いていれば、設定画面でそのまま試せる。
動作確認の最小シナリオ:
- Settings → Keyboard shortcuts を開く
zoom-nextの「変更」を押し、PageDownを押す(Mac ならFn+Shift+↓のような別の組み合わせ)- 空いているマスをいくつか起動する
- 1 つを拡大して
PageDownを押し、拡大対象が隣のマスへ移れば成功
起動時に警告が出ていたら、同じキーを 2 つの動作に重ねている。設定画面の該当行が「効かない」になっていたら、ブラウザ予約キーに当てている。
やめるときは、設定画面の「外す」で解除するか、config.json の keymap ごと消す。既定値は無いので、空に戻る。
まとめ
- MulmoTerminal の
keymapに既定値が無いのは意図的な設計で、ターミナル内のプログラムから何を奪ってよいかを判断できるのは使っている人だけだから - 割り当てても
Shift併用と IME 変換中は素通しされるので、完全に失うわけではない - 2 打のキーにすれば、奪う範囲をさらに狭くできる
- 衝突とブラウザ予約キーは起動時に警告として出るので、「設定したのに効かない」で悩まない
- 拡大用(
zoom-*)と非拡大用(focus-*)は別のキーを割り当てる。Mac のノートではPageUp/PageDownが独立していない
関連: MulmoTerminal 公式ガイドのキーボードショートカット / MulmoTerminal のサイドペインから答える(questionPaneEnabled) / Cursor の代替としての MulmoTerminal


