Org-mode上のカーソルの位置でキーバインドをDWIMに変えてくれる org-multiple-keymap.elを作りました


Org-modeとキーバインド

Org-modeは、僕にとってEmacsを薦める理由の一つと言えるほど、重要なアプリです。単なるメモだけでなく、スケジュールの管理やタスクの管理もOrg-modeを使っています。

ただ、日常的に使っていても慣れることができないのが、Org-modeのキーバインドです。一般的なキーバインドだけでも これだけあります。

さらに、キーバインドを覚えにくくさせているのが、複雑なプレフィックスキーです。これはEmacsの宿命でもあるわけですがキーバインドが増えれば必然的にプレフィックスキーも長く複雑になってしまいます。

こういった問題を回避するために、以前 smartrep.el というものを作りました。

myuhe/smartrep.el

連続操作を素敵にするsmartrep.el作った – sheephead

smartrep.el は、プレフィックスキーを押す手間を劇的に軽減してくれる素敵elispだったのですが、そもそもプレフィックスキー自体いらないんじゃないか、という発想のもとで作ったのが、 org-multiple-keymap.el です。

org-multiple-keymap.elとは

Org-modeは、ヘッダーやタイムスタンプ、タグなど複数の要素から構成されていて、各要素にはそれぞれ関連性の高いコマンドが定義されています。それら要素とコマンドを短いキーバインドで結びつけるのが org-multiple-keymap.el です。

myuhe/org-multiple-keymap.el

org-multiple-keymap.el は、org-modeを構成する要素上で、特定のキーマップをセットするマイナーモードを提供します。 現在のところ、タイムスタンプ、またはプライオリティ上にカーソルがある場合、プレフィックスキーを入力せずにワンキーで任意の関数を実行することができます。

使い方は非常にシンプル。Orgファイルを開いて M-x org-multiple-keymap-minor-mode でマイナーモードを有効にするだけです。

M-x org-multiple-keymap-minor-mode を有効にすることで、以下のキーマップが有効になります。

timestamp上のキーマップ

key command
N org-timestamp-down-day
P org-timestamp-up-day
n org-timestamp-down
p org-timestamp-up
o org-open-at-point

priority上のキーマップ

key command
n org-priority-down
p org-priority-up

今後の予定

今のところ、タイムスタンプ、プライオリティにしか対応できてないので、他の要素にも随時対応していきたいと思っています。 個人的にはソースコードブロックに適用できると素敵ではないかと思っています。

他に何か面白いアイデアなどありましたら、ここのコメントかGitHubのissueで教えてください。