header

2015年1月8日木曜日

Emacs org-modeのちょっと便利な関数

Emacs advent calender用に書いたのですが、エントリーするの遅れて更新してなかった記事です。さてorg−modeですがこのブログを書くのに利用したり何かメモするのに使ったりしてます。で、たくさんありすぎて困るorg-modeの機能ですが僕はよく使う機能はカーソルの位置によっていくつかの機能を切り分けて実行する関数を書いてひとつのキーで利用しています。今回はその便利関数の紹介です。

機能

今回紹介する関数の機能の要約は

  • カーソルがソースブロックテーブル上では、別バッファを開く
  • org-src-edit-bufferでは(上の別バッファのこと)そのバッファを閉じる
  • org-table上では折りたたまれてる内容を展開する
  • *(アスタリスク)のヘッダー行の場合,TODO,DONEなどのラベル選択を出す
  • チェックボックス(-[])ではXと無入力のトグル動作
  • link部分ではlinkの参照
  • 何もマッチしないときは、org-drawerでタンス作成

ちょっと機能がてんこもりで形容するのが難しいので、名前はorg-dwimとしました。(ちなみに DWIM はDo What I Meanの略らしい)

以下がコードです。適当にあなたの.emacsとかに貼りつけてください。(gist版もあるよ)

(defun org-dwim ()
"My convinience function for `org-mode'."
(interactive)
(cond
((org-in-block-p '("src"))
(org-edit-special))
((org-src-edit-buffer-p)
(org-edit-src-exit))
((org-table-p)
(org-table-edit-field 4))
((org-on-heading-p)
(org-todo))
((org-at-item-checkbox-p)
(org-toggle-checkbox))
((and org-return-follows-link
(let ((tprop (get-text-property (point) 'face)))
(or (eq tprop 'org-link)
(and (listp tprop) (memq 'org-link tprop)))))
(org-open-at-point))
(t (org-insert-drawer))))

各機能の説明とこの関数の説明とかをします。

link

下のような形式でURLとそのエイリアスを書くと、そのエイリアスで表示してくれる機能がorg-modeにはありますが、カーソルがそのリンク上にあるとorg-dwimで開くことができます。

ただ、デフォルトでRETキーでリンクに飛べる。のでこの機能はカレーに入っている福神漬のようにあまり意味はありません。(じゃあいれんなよ)

[[URL][ALIAS]]




table

パイプで区切ることでorg-mode上でExcelのセルとカラムのようなことができるますが、使ってると文字がながくなってきて省略したいときがあります。

で、省略したいときは下の<N>のような書き方でNに数字を入れるとその数以上は折りたたんでくれる。

| <3> |  <4> |   <5> |
| 1=> | 12=> | 12345 |



それでorg-dwim関数はカーソルがその場所にあればこの折りたたまれた状態から展開してくれます。(僕のような、キーバインド覚えられない人はここから折りただんだテーブルを展開できなくて詰む)

src block

org-mode上で特定のプログラミング言語を埋めこむことができます。埋めこみ方は下のようにbegin_srcとend_srcで囲みます。(小文字でも大丈夫です)

#+BEGIN_SRC emacs-lisp
(message "hoge")
#+END_SRC



正式名称謎ですが、このbegin_srcとend_srcの間をソースブロックって便宜上よびますね。でこのソースブロックの中で、org-dwimを呼び出すと別バッファが開いてそこでそのプログラミング言語のメジャーモードで編集できます。編集が終わったら、またorg-dwim関数を呼べばもとのorg-modeのファイルへ戻れます。

注意点として、flycheckなどのシンタックスチェッカーがあると問題がある場合もあります。その場合は`(org-src-edit-buffer-p)`関数で場合わけする必要があります。

checkbox

org-modeには以下のような感じで書くチェックボックス機能があります。

- [ ] Todo
- [X] Done


しかしながら、C-c C-x C-bというcheck boxをon, offするキーバインドが覚えられなかったので、今回のorg-dwimに追加しました。

Drawers

org-mode manualみてたらこんな機能があった。

Names of drawers.  Drawers are not opened by cycling on the headline above.
Drawers only open with a TAB on the drawer line itself.



Drawerってタンスって意味らしい、説明のとおりシフト+tabで折り畳み展開を繰り返してもタンスの中身までは展開されない。どれくらい有用かよくわかっていないけどデフォルトの関数がなかったので追加してみた。

書き方

:RESULTS:
たんす
:END:





おわり

あまりorg-mode使いこなせてるわけではありませんが、デフォルトのキーバインド覚えるよりはいくぶんましかと思います。よかったら使ってみてください。

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news