Emacs24+Howm+Org

Emacs24に移行したらHowmでエラーが出るようになったので、Howmのバージョンを上げる。

howm-1.4.0rc2はEmacs24に対応しているので、これをインストールする。ElispファイルをDropboxに置いて共有しているので、configureのオプションで置き場所を指定する。

$ ./configure --prefix=~/Dropbox/ --with-lispdir=~/Dropbox/share/emacs/lisp/

ついでにHowmのファイルをOrgで書くようにする。OrgとHowmでアウトラインに使う記号やキーバインディングが違うので、共存できるように設定しなければいけない。

;; HOWM
(add-to-list 'load-path "~/Dropbox/share/emacs/lisp/howm")

; C-c , がOrgとぶつかるので、C-x , に変更。
(global-set-key "\C-x,," 'howm-menu)
(setq howm-prefix "\C-x,")

(autoload 'howm-menu "howm" "Hitori Otegaru Wiki Modoki" t)
(setq howm-directory "~/Dropbox/Howm/")
(setq howm-history-file "~/Dropbox/Howm/.howm-history")
(setq howm-keyword-file "~/Dropbox/Howm/.howm-keys")

; 新しくメモを作る時は、先頭の「=タイトル」だけ挿入。
(setq howm-template "= %title%cursor\n\n")

(add-hook 'howm-mode-hook
	  (function (lambda () 
; Orgは見出しに*を使う。Howmも*を使うようにできるが、そうすると今まで書いたメモがタイトル無しになって悲しいので、Howmは=のままにする。
; outline-mode的には*と=の両方を見出しとして扱うようにする。Orgの中でoutline-modeの関数を呼んでいるところがあるため。
		      (setq outline-regexp "[*=]+")
; Dropboxでバックアップがあるので、バックアップファイルは作らなくてもいいだろう。
		      (set (make-local-variable 'backup-inhibited) t))))

(add-hook 'howm-after-save-hook
	  (function (lambda ()
; 内容が空の場合はファイルを削除する。
		      (if (= (point-min) (point-max))
			  (delete-file (buffer-file-name (current-buffer)))))))

; 完了済みのtodoを未完了に戻す。
(fset 'howm-revive-todo
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([1 19 46 13 6 23 19 58 13 backspace 2 2] 0 "%d")) arg)))

;; ORG
; .txtを全部org-modeにするのもアレなので、Dropbox/Howmの下の.howmか.txtのファイルのみorg-modeにする。
(add-to-list 'auto-mode-alist '("Dropbox/Howm/.+\\.howm$" . org-mode))
(add-to-list 'auto-mode-alist '("Dropbox/Howm/.+\\.txt$" . org-mode))

; Dropbox/Howmの下でorg-modeで編集する場合はhowm-modeを追加。
(add-hook 'org-mode-hook 
	  (function (lambda ()
		      (if (string-match "Dropbox/Howm" buffer-file-name)
			  (howm-mode)))))