summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Berman <stephen.berman@gmx.net>2016-03-26 23:14:50 +0100
committerStephen Berman <stephen.berman@gmx.net>2016-03-26 23:14:50 +0100
commite5c17f46785e2eca165ccd5aa890f212c6a61ca1 (patch)
treed7380a4fc823d2f736974329ccedc406bc2f6e53
parentbc70fda2c9f93a30351c7c79a2b5763bbbd7bbc6 (diff)
Fix todo-mode category movement
* lisp/calendar/todo-mode.el (todo-move-category): Use moved category's existing categories sexp instead of invoking todo-update-categories-sexp in file moved to, in order to take archived items into account. If the moved category has archived items, handle the source archive buffer properly. Remove superfluous code.
-rw-r--r--lisp/calendar/todo-mode.el25
1 files changed, 18 insertions, 7 deletions
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 94cd08eaa4..9574c03043 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -1414,7 +1414,12 @@ the archive of the file moved to, creating it if it does not exist."
(setq todo-files (funcall todo-files-function))
(todo-reevaluate-filelist-defcustoms))
(dolist (buf buffers)
+ ;; Make sure archive file is in Todo Archive mode so that
+ ;; todo-categories has correct value.
(with-current-buffer (find-file-noselect buf)
+ (when (equal (file-name-extension (buffer-file-name)) "toda")
+ (unless (derived-mode-p 'todo-archive-mode)
+ (todo-archive-mode)))
(widen)
(goto-char (point-max))
(let* ((beg (re-search-backward
@@ -1466,10 +1471,18 @@ the archive of the file moved to, creating it if it does not exist."
(re-search-backward
(concat "^" (regexp-quote todo-category-beg)
"\\(" (regexp-quote cat) "\\)$") nil t)
- (replace-match new nil nil nil 1)))
- (setq todo-categories
- (append todo-categories (list (cons (or new cat) counts))))
- (todo-update-categories-sexp)
+ (replace-match new nil nil nil 1))
+ (setq todo-categories
+ (append todo-categories (list (cons (or new cat) counts))))
+ (goto-char (point-min))
+ (if (looking-at "((\"")
+ ;; Delete existing sexp.
+ (delete-region (line-beginning-position) (line-end-position))
+ ;; Otherwise, file is new, so make space for categories sexp.
+ (insert "\n")
+ (goto-char (point-min)))
+ ;; Insert (new or updated) sexp.
+ (prin1 todo-categories (current-buffer)))
;; If archive was just created, save it to avoid "File
;; <xyz> no longer exists!" message on invoking
;; `todo-view-archived-items'.
@@ -1500,9 +1513,7 @@ the archive of the file moved to, creating it if it does not exist."
(setq todo-category-number 1))
(todo-category-select)))))
(set-window-buffer (selected-window)
- (set-buffer (find-file-noselect nfile)))
- (todo-category-number (or new cat))
- (todo-category-select))))
+ (set-buffer (find-file-noselect nfile))))))
(defun todo-merge-category (&optional file)
"Merge current category into another existing category.