Cursor Editor Ctrl+N の衝突問題

## 問題

Chat欄でEmacsキーバインドの下方向カーソル移動`Ctrl+n`を押すと、チャットが新規作成されてしまうという問題があります。`Command+z`でUndoすれば元には戻るのですが、非常にストレスフルです。

以下のようにフォーラムで議論されているようですが、今日(2025年1月26日)時点では解決していないようです。

https://forum.cursor.com/t/macos-please-fix-keyboard-shortcut-to-cursordown-for-ctrl-n-in-composer/40134/2

## 応急処置的解決策：Karabiner-Elementsで上書き

**テンポラリーな解決策: Karabiner-Elementsを使ってCursorエディタ内で`Ctrl+n`を下矢印キーに変更する方法**

私自身もこの問題に困っていたので、Cursorが正式に対応するまでの**応急処置**として、Karabiner-Elementsを使った方法を共有したいと思います。この解決策では、`Ctrl+n`をCursorエディタ内でのみ下矢印キーとして動作させ、それ以外のアプリでは元の機能をそのまま維持することができます。

以下が私の設定です：

```json
{
    "description": "Ctrl+n to Down Arrow in Cursor Editor",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "n",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "down_arrow"
                }
            ],
            "type": "basic"
        }
    ]
}
```

`Ctrl+n`以外も修正したバージョン：

  - Ctrl+n → 下矢印
  - Ctrl+p → 上矢印
  - Ctrl+f → 右矢印
  - Ctrl+b → 左矢印
  - Ctrl+a → Home
  - Ctrl+e → End


```json
{
    "description": "Emacs-style Cursor Movement in Cursor Editor",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "n",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "down_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "p",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "up_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "f",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "right_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "b",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "left_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com.todesktop.<your bundle id>$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "a",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "home"
                }
            ],
            "type": "basic"
        }
    ]
}
```

---

### これができること：
- **Cursorエディタ内**: `Ctrl+n`が下矢印キーとして動作します（Emacsの下方向カーソル移動に相当）。  
- **それ以外のアプリ**: `Ctrl+n`は新規タブや新規ファイル作成など、元の動作をそのまま維持します。

---

### 使用手順：
1. このJSONコードをKarabiner-Elementsの設定に保存します（保存場所やファイル名はお任せします）。  
2. Karabiner-Elementsを開き、**Complex Modifications**タブで「Add Rule」をクリックしてルールを有効化します。

---

### 注意点：
1. **これはテンポラリーな解決策です。**  
   あくまで応急処置であり、正式なアップデートが提供されるまでの一時的な対応です。

2. **アプリのバンドルIDについて：**  
   この設定では`com.todesktop.<your bundle id>`というバンドルIDを使ってCursorエディタを特定しています。これは環境ごとに異なります。  
   自分の環境で正しいバンドルIDを確認するには：
   - Cursorをアクティブにした状態で**KarabinerのEvent Viewer**を開きます。
   - `frontmost_application`の項目に表示されるバンドルIDを確認してください。

3. **完全な解決ではありません。**  
   根本的な問題に対処するわけではありませんが、私が行き詰まったときに助けになった方法です。同じように困っている方の一助になれば幸いです。

---

### 最後に：
この投稿は、私が試した解決策を共有するためのものです。質問にはお答えできませんが、同じ問題で困っている方のお役に立てば嬉しいです 🙏  
早く正式な修正が行われることを願っています！