org-multiple-keymap.el v0.2 をリリースしました
- 2015.03.22
- Emacs

先日公開しました org-multiple-keymap.el、個人的には大変便利に使わせていただいております。
MELPA のダウンロード数などを見ましても、爆発的ヒット作とは程遠い感じですが、るびきちさんにもレビューいただき大変ありがたい限りです。
あれから、いろいろと変更を加えましたので、ご紹介しておきます。
新しく作った要素にもキーマップが適用されるようになりました。
この問題はるびきちさんのレビューでも指摘されていた点ですが、 after-change-functions
というフックポイントに更新関数をひっかけることによって 自動でキーマップが適用されるようになりました。
eieioによる構造化
中身を eieio
を使って全面的に書き直しました。アクセッサーなど共通部分をスーパークラスとして、その下にtimestampなどの各要素を単位としたクラスを生成しています。 こんなに短いコードで果して eieio
を使う必要があったのかというと、あまりない気もしますが見通しはとても良くなったと思います。
情報源による拡張
eieioにより構造化されたことで、機能の拡張が容易になりました。auto-completeやHelmのように情報源を定義することで独自に要素とキーマップを紐づけることができます。
使用する情報源は、 org-mukey-source-list
というリストにより管理されていますので、 新しく作ったクラスを追加することで org-multiple-keymap-minor-mode
が有効になる際にインスタンスが生成され、キーマップが有効となります。
例えば、 org-mukey-source-hoge
というクラス定義を新たに作ったのであれば、以下のように書くと良いでしょう。Org-modeの使い方は千差万別だと思いますので、新しい情報源を定義するなり、使用する情報源を変えるなり、使いやすいようにカスタマイズしてもらえれば幸いです。
(push org-mukey-source-hoge org-mukey-source-list)
情報源の定義には、新しいクラスを定義して各スロットに必要な情報を与えることになります。以下は、timestamp sourceのクラス定義です。
(defclass org-mukey-source-timestamp (org-mukey-source) ((region :initform 'org-mukey-make-timestamp-alist) (keymap :initform org-mukey-timestamp-map) (parse-function :initform 'org-mukey-timestamp-refresh)))
各スロットは、以下のとおり。
region スロット
キーマップを適用するポイントの値からなる連想リストを返す関数を格納します。carが先頭、cdrが末尾となります。
keymap スロット
使いたいキーマップを格納します。
parse-function スロット
新たにできた要素を判定して、キーマップを適用させる関数を格納します。
新たな要素の追加
これまで、キーマップが適用される要素はtimestampとpriorityの二つだけでしたが、新たにheadingも追加しました。見出しの先頭にあるアスタリスクでキーマップが適用されます。キーマップは次のとおりです。
key | command |
---|---|
a | org-archive-subtree |
b | org-do-promote |
d | org-mukey-todo-done |
f | org-do-demote |
n | org-next-visible-heading |
p | org-previous-visible-heading |
u | outline-up-heading |
-
前の記事
Org-mode上のカーソルの位置でキーバインドをDWIMに変えてくれる org-multiple-keymap.elを作りました 2015.03.15
-
次の記事
org-gcal.elにグーグルカレンダーとOrgファイルを同期するコマンドを追加しました 2015.03.29