EmacsのChangeLog で todo を管理するときにちょっとだけ楽しく

僕は ChangeLog で todo を管理しています。
以下の様に箇条書きで、終わっていないものは□、終わったものは■(塗りつぶし)で書いています。(この方式は id:kambara に教わりました。)

-□括弧の数の対応をチェック
-□現状把握をして優先度を決める
-□すべてのファイルにヘッダをつける
-■match.yml/unmatch.yml, translate.yml
-■beginで囲まないとテストにならない
-■マクロをNodeに変換する
-■Node::equalsを実装する

todo を入力するときはコピペか、「やる→□」という対応を IME に登録しておいて入力するのが良いでしょう。


そして todo が完了したら□を塗りつぶすイメージで■にするんですが、そのときの入力が面倒!
と思ったので、以下のような Emacs Lisp を書いてみました。


□の上にカーソルをおいて C-t をすると■になります。(もういちど c-t すると□になります。)
これで todo 消化が楽しくなるかも!

(defun delete-insert-char(c)
  (interactive)
  (progn (delete-char 1 nil) (insert c) (backward-char 1)))

(defun swap-char-at-point(a b)
  (let ((c (char-to-string (char-after))))
    (cond
     ((string-equal c a) (delete-insert-char b))
     ((string-equal c b) (delete-insert-char a)))))

;; change log mode
(add-hook 'change-log-mode-hook
    '(lambda()
       (define-key change-log-mode-map "\C-t" '(lambda () (interactive) (swap-char-at-point "□" "■")))))