ChangeLog で Todo 管理

EmacsのChangeLog で todo を管理するときにちょっとだけ楽しく - higepon blogを真似て
僕も □(やる)と ■(おわった)で Todo を管理しています。
リンク先のひげぽんさんの作った elisp を使うと
□ や ■ の上にカーソルを置いて C-t で相互に切り替えができて便利です。
しかし、僕はこれをしばらく使っているうちに
カーソルを □ の位置まで移動するのが煩わしくなってきました。
なので、C-t したらその行の □ と ■ が切り替わるように
elisp を少し改良してみました。

(add-hook 'change-log-mode-hook
    '(lambda ()
       (define-key change-log-mode-map "\C-t" 'toggle-todo-box-at-line)))

(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)))))

(defun toggle-todo-box-at-line ()
  (interactive "*")
  (save-excursion
    (let ((line-end nil))
      (move-end-of-line 1)
      (setq line-end (point))
      (back-to-indentation)
      (while (< (point) line-end)
        (swap-char-at-point "□" "■")
        (forward-char 1))
      )))