2014-10-01 , ,

Org2blogの設定

Org2blogの設定をしました。

下のelispで次のようなことをします。

  • M-x blog-newで投稿用バッファを作成します。
  • 投稿用バッファでC-x C-sしたときにファイル名を自動設定します。まだファイル名が決まっていないときに限り、ブログ用ディレクトリ設定や記事中のDATE、PERMALINK、TITLEからファイル名を生成し、ファイル名を設定するか尋ねます。
  • ブログ用ディレクトリ下のorgファイルを開くとき、org2blog/wp-modeマイナーモードを有効にします。
  • .org2blog.orgの保存先をブログ用ディレクトリにします。
  • ブログのテンプレートにPERMALINKを入れます。
;; ブログorgファイルのセーブ先
(setq my-blog-directory "~/org/blog/")

;; 投稿設定
(setq org2blog/wp-blog-alist
      `(("example"
         :url "http://example.jp/xmlrpc.php"
         :username "example-user"
         :default-title "NewEntry"
         :default-categories nil ;カテゴリーはデフォルト
         :track-posts (,(concat my-blog-directory ".org2blog.org") "Posts") ;.org2blogの保存先を変える
)))

(setq org2blog/wp-default-categories '()) ;カテゴリーは使わないので空

(setq org2blog/wp-buffer-template
      "#+DATE: %s
#+OPTIONS: toc:nil num:nil todo:nil pri:nil tags:nil ^:nil
#+CATEGORY: %s
#+TAGS: 
#+PERMALINK: 
#+TITLE: %s
\n") ;必ずPERMALINKを入れる


;; セーブ時のファイル名生成

(defun my-blog-get-buffer-post-file-name ()
  "現在のバッファのファイル名を作成します。directory/YYYY-MM-DD-permalink_or_title.orgの形式です。directoryはmy-blog-directory変数を使います。"
  (let* ((date (org2blog/wp-get-option "DATE"))
         (title (org2blog/wp-get-option "TITLE"))
         (permalink (org2blog/wp-get-option "PERMALINK"))
         (filename-date (format-time-string "%Y-%m-%d"
                                            (if date (apply #'encode-time (org-parse-time-string date))
                                              (current-time)))))
    (concat my-blog-directory filename-date "-" (if (> (length permalink) 0) permalink title) ".org")))

(defun my-blog-set-buffer-file-name ()
  "デフォルトのファイル名をバッファに設定します。"
  (if (not (buffer-file-name))
      (let ((filename (my-blog-get-buffer-post-file-name)))
        (if (y-or-n-p (format "set filename to '%s'?" filename))
            (set-visited-file-name filename)))))

(defun my-blog-save ()
  "バッファをセーブします。まだバッファにファイル名が設定されていないとき、セーブする前にデフォルトのファイル名を設定するかどうかを訪ねます。"
  (interactive)
  (my-blog-set-buffer-file-name)
  (save-buffer))

(defun blog-new ()
  "ブログの新しいエントリーを作成します。"
  (interactive)
  (org2blog/wp-new-entry)
  (local-set-key "\C-x\C-s" 'my-blog-save))

;; ブログディレクトリ下のファイルを開くときはorg2blogを有効にする。
(add-hook
 'org-mode-hook
 (lambda ()
   (if (and (buffer-file-name)
            (string-prefix-p (expand-file-name my-blog-directory) (buffer-file-name)))
       (org2blog/wp-mode t))))

最初はorg2blog/wp-kill-buffer-hookをdefadviceで書き換えたりしたのですが、いくつかのケースでうまく動かなかったためやめておきました。元々少し不具合があるみたいですし、ちゃんとやるならもっと色々手を入れないとダメそう。