org-mode の #+BEGIN_HOGE 〜 #+END_HOGE 入力支援

追記 2011-05-03: "


追記: yasnippet 使うといいよ、とコメントで教えてもらいました。下記参照。


M-x my-wrap-org-block するとミニバッファで入力を求められるので、ブロックのタイプ(EXAMPLE、SRC など、小文字でOK)を入力すると

  • リージョンが設定されている場合はそれを挟むように #+BEGIN_HOGE、#+END_HOGE を挿入
  • リージョンが設定されていない場合はカーソル位置に #+BEGIN_HOGE、#+END_HOGE を挿入
(defun my-wrap-org-block (input-str)
  (interactive "sInput block type: ")
  (let ((type (upcase input-str)))
    (if (and transient-mark-mode mark-active)
        (save-excursion
          (goto-char (region-end))
          (insert "#+END_" type "\n")
          
          (goto-char (region-beginning))
          (insert "#+BEGIN_" type "\n"))
      (progn
        (insert "#+BEGIN_" type "\n\n"
                "#+END_" type "\n")
        (forward-line -2)))))

とても再発明くさい。