macOS 版の Notion アプリで ctrl-m (return), ctrl-i (tab) , ctrl-[ (escape) に対応する : Notion Tips (150)

はじめに

Notion Tips の第150回目は、Notion アプリで ctrl-m, ctrl-i, ctrl-[ を利用する方法を解説します。

デフォルトで使えるキーバインド

macOS 版の Notion アプリでは、Emacs キーバインドのいくつかが使えるようになっています。

  • ctrl-p: (↑)
  • ctrl-n: (↓)
  • ctrl-b: (←)
  • ctrl-f: (→)
  • ctrl-a: (行頭)
  • ctrl-e: (行末)
  • ctrl-h: (カーソルの左を削除)
  • ctrl-d: (カーソルの右を削除)
  • ctrl-k: (行末まで削除)
  • ctrl-v: (1ページ下)

Windows 版でどこまで使えるのかは、自宅に環境がないので試していません。私自身は vim ユーザなのですが、以前は emacs も利用していましたし、macOS のターミナルでもこれらは使えるので、手が馴染んでいます。

ただ、Notion を使っていて以下の 3 つのキーが対応しておらず、悔しい思いをしておりました。

  • ctrl-m: (return)
  • ctrl-i: (tab)
  • ctrl-[: (escape)

これらをタイプしてから反応しないのを確認してから、return, tab, escape などに手を伸ばすのが面倒に感じていました。

Karabiner elements で対応

現在、研究室では 7sPro Max のプロトタイプを使っておりますが、それまでは 2 台の HHKB を左手用と右手用に別々に利用していました。この時、右側のキーボードで Shift key を押し、左側のキーボードで a をタイプしても、デフォルトの状態では大文字になりません。ここで、Karabiner elements というソフトウェアを利用すると、複数のキーボードをこのソフトウェアが管理してくれるようになり、別々のキーボードのモディファイアキーが有効になります。

さらに Karabiner elements では、Complex Modifications という設定で、とあるキーボード操作から複数のストロークを実行することも可能になります。私の Complex Modifications は以下のようになっています。

Complex Modifications

下三つは Karabiner elements のサイトから取得したものです。

  • 「Ctrl-[ を押した時に、英数キーも送信する」「esc キーを押した時に、英数キーも送信する」
    • vim のコマンドは半角入力が必要なので、入力モードを終了しコマンドモードに移行する ctrl-[ や esc が押された時には、かな入力をキャンセルするようにしています。
  • 「Map Left Option plus h/j/k/l to Arrows」
    • Emacs キーバインドも使えますが、やはり hjkl の方が慣れているので、Option + h/j/k/l でカーソルキーに対応するようにしています。

return, tab, escape の対応

上の画面で「Edit」をクリックすると、以下のように JSON で設定を変更することができます。

return, tab, escape の対応

JSON ファイルは以下のようになっています。

{
    "description": "Map ctrl-m,i,[ to return, tab, and escape",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^notion\\.id$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "m",
                "modifiers": {
                    "mandatory": ["left_control"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "return_or_enter",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^notion\\.id$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "i",
                "modifiers": {
                    "mandatory": ["left_control"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "tab",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^notion\\.id$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "open_bracket",
                "modifiers": {
                    "mandatory": ["left_control"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "escape",
                    "modifiers": []
                }
            ],
            "type": "basic"
        }
    ]
}

中身は見ればだいたいわかると思いますが、今回のキーバインドでは conditions にて、最も前に出ているアプリが Notion アプリ (^notion\\.id$)であることを確認しています。それ以外のアプリの時にこれらが発動しないようにするためです。最近データベースが重くなってきていて、アプリ版をメインで使い出したのですが、さらにこの設定でキーボード入力に対する不満がなくなり、ますますブラウザ版を使わなくなりました。

なお、Notion アプリ自体ではあまり esc を使う頻度は多くないのですが、このキーバインドで esc が押されたことになると、自動的に上で解説した「英数キー」も押されたことになり、必ず英数モードになります。最近は、英数を入力するために ctrl-[ をタイプすることが多いので、これも対応できたので、非常に助かっています。

おわりに

ネタ的には Notion というより、macOS のネタでした。ただ、Notion 使いの vim ユーザの方で同じ悩みを抱えている人もいるかもしれないと思い、記事にしてみました。あとは、Notion が用意している ctrl-h と delete キーの挙動が少し違うので、これもマッピングした方がいいのではと感じています。

hkob.notion.site