Skip to content

feat: macOS で Command+左矢印 / 右矢印 / Delete の Command が無視され、修飾なしのキーと同じ動きになる(設定できることに気づく手がかりもない) #1858

Description

@Taka499

Before you submit

  • I described the situation I was in and what got in the way, rather than a design.
  • This issue contains no code, no patch and no difference against a file.
  • I checked the guide and Settings, and this is not something I can already configure.
  • I searched the existing issues, open and closed, and this is not one of them.

What were you trying to get done

macOS で MulmoTerminal のセルに、コーディングエージェント宛てのプロンプトを書いていました。途中の単語を直すために行頭へ戻り、また行末へ飛んで続きを書きたい、という編集です。このマシンの
ほかのテキスト入力欄で普段どおりに使っている Command+左矢印 と Command+右矢印 を押し、行を消して書き直す
ために Command+Delete を押しました。

What got in the way

Command が無視されました。カーソルは動きます。ただし動き方が、Command を押していないときとまったく同じ
です。行頭へ飛ぶつもりで Command+左矢印 を押すと、左へ 1 文字だけ進みます。修飾キーだけが落ちて、矢印
キーの素の動作がそのまま通っている、という挙動です。Command+Delete も同じで、行をまとめて消すつもりで
押すと、修飾なしの Delete と同じく 1 文字だけ消えます。

これは何も起きないより厄介でした。反応がないのなら「このキーは効かない」と分かります。でも 1 文字だけ
動くと、キーが効いていないのか、自分の押し方が悪いのか、そもそも行頭ジャンプという機能が無いのかの区別
がつきません。エラーも警告も出ないので、手がかりが何もありません。

一方で Option+左矢印 / Option+右矢印 / Option+Delete は、どれも単語単位できちんと動きます。つまり
キーボード入力自体はターミナルに届いていて、Command のときだけ修飾が素通りしている、ということになります。

そこで設定画面を開き、キーボードショートカットのセクションで Command+左矢印 が何に割り当てられているかを
確かめようとしました。このセクションには 9 つのアクションが並び、それぞれ「未設定」と表示されています。
おかげで「その 9 つが存在すること」と「自分がどれも割り当てていないこと」は分かりました。しかしこの画面に
は、ターミナルへキー列を送る仕組みについての表示が何もありません。そのため私は、リポジトリをcloneしました。

Claude Codeを使って、実際には設定できることがわかりました。ターミナルへキー列を送る仕組みはバージョン 2.5.3 から存在していて、設定ファイルに 3 行書いたら 3 つのキーとも即座に解決しました。

What you do about it today

いまは ~/.mulmoterminal/config.json を手で編集して解決していて、望んだとおりに動いています。

ただしこの回避策には前提があります。「ターミナルへキー列を送れる」機能が存在すると知っていること、その
機能の名前を知っていること、送るべき制御文字を知っていること、そして設定ファイルを手で開くことです。
どれも、この 3 つのキーが効かない理由を画面上で探している人には出てこない情報です。私自身、たどり着いた
のは設定ガイドをエージェントと一緒に読んだからで、アプリの中を見ていて見つけたわけではありません。

How often you run into this

Several times a day

If you already have an idea, it goes here

案は 2 つあります。案 2 が主で、案 1 が見送られても単独で成り立ちます。

案 1: macOS では、この 3 キーが最初から効いていてもよいのではないか。
いま私が ~/.mulmoterminal/config.json に書いているのは次の 3 行で、これがそのまま既定になっているイメージです。

{
  "keymap": {
    "send": [
      { "key": "Cmd+ArrowLeft",  "bytes": "\u0001" },
      { "key": "Cmd+ArrowRight", "bytes": "\u0005" },
      { "key": "Cmd+Backspace",  "bytes": "\u0015" }
    ]
  }
}

\u0001 / \u0005 / \u0015 はそれぞれ Ctrl+A(行頭へ)、Ctrl+E(行末へ)、Ctrl+U(行頭まで削除)です。

ショートカットが意図的にオプトインで、その理由が「ターミナルの中で動いているプログラムからキーを奪わない
ため」であることは理解しています。ただしこの 3 キーについては、今ターミナルに送られているものが修飾なしの
矢印キーや Delete と同じなので、既定で割り当てても失われる操作はありません。影響するのはブラウザの
「戻る」「進む」で、それもカーソルがターミナルの中にある間だけです。既定にするかどうかは判断をお任せ
します。既定にする場合は、オフにする手段があるとよいと思います。

案 2: 「ターミナルへキー列を送れる」ことを、設定画面から分かるようにしてほしい。
キーボードショートカットのセクションは、9 つのアクションを未割り当てのときでも「未設定」として見せて
います。キー列送信も同じように 1 行あれば、存在に気づけます。今回はその表示が無かったため、設定で解決
できると知るまでにリポジトリを clone して Claude Code に読んでもらう必要がありました。設定ファイルに
3 行書けば済むことなので、そこまでしないと辿り着けないのはもったいないと思います。

Anything else

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions