ChangeLogでtodoの管理
参考
カーソルを合わせて□■をtoggleできると便利
ものぐさなので、□(または■)にカーソルを合わせるのも面倒くさいと思った。
行だけカーソルを合わせれば十分なように変更。
(ただし、同じ行に複数のtodoをかけなくなった。)
elisp作成
(defun toggle-string (from to i &optional p) (when p (goto-char p)) (let ((prev (buffer-substring-no-properties p (+ p 1))) (replace (lambda (str) (delete-char i) (insert str) (backward-char i)))) (cond ((string-equal prev from) (funcall replace to)) ((string-equal prev to) (funcall replace from)) (t nil)))) (defun toggle-string-in-line (from to i) (save-excursion (dolist (pat (list from to)) (beginning-of-line) (when (re-search-forward pat (point-at-eol) t 1) (toggle-string from to i (1- (point))) (return))))) (define-key change-log-mode-map "\M-f" (lambda () (interactive) (toggle-string-in-line "□" "■" 1)))
M-fでtoggleできるようになった。
現在のtodoとかをみたい。
あと、手軽に現在作業しているbufferとChangeLogを行き来したいと思った。
(defun search-with-block (pat-for-block pat n) (let (result area) (save-excursion (dotimes (i (1+ n)) (push (re-search-forward pat-for-block nil t 1) area)) (unless (null (cdr area)) (let ((end (car area)) (start (nth n area))) (goto-char start) (while (re-search-forward pat end t 1) (push (buffer-substring (point-at-bol) (point-at-eol)) result)))) (nreverse result)))) (defun search-todo-contents (str n) (let ((reg (rx (repeat 4 num)"-"(repeat 2 num)"-"(repeat 2 num) (+ whitespace) (+ word) (+ whitespace) "<"))) (with-output-to-temp-buffer "*todo*" (dolist (todo (search-with-block reg str n)) (princ todo) (princ "\n") )))) (defvar MyChangeLog-prev-buffer nil) (defvar todo-path "~/ChangeLog") (defun MyChangeLog () (interactive) (let ((bn (buffer-name (current-buffer))) (clg "ChangeLog")) (cond ((string-equal bn clg) (switch-to-buffer MyChangeLog-prev-buffer)) (t (setq MyChangeLog-prev-buffer bn) (find-file (concat "~/" clg)))))) (defun todo-list (n) (interactive "p") (with-current-buffer (find-file-noselect todo-path) (goto-char (point-min)) (search-todo-contents "□" n))) ;;設定 (global-set-key "\C-cl" 'MyChangeLog) (global-set-key "\C-ct" 'todo-list)
C-c l でChangeLogに移動できるようになった
C-c t で現在存在するtodoを表示するようになった。(defaultでは1日だけ)
(3日分とか見たかったら、C-u 3 C-c t)