]> code.delx.au - gnu-emacs/commitdiff
Fix todo-mode category movement
authorStephen Berman <stephen.berman@gmx.net>
Sat, 26 Mar 2016 22:14:50 +0000 (23:14 +0100)
committerStephen Berman <stephen.berman@gmx.net>
Sat, 26 Mar 2016 22:14:50 +0000 (23:14 +0100)
* 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.

lisp/calendar/todo-mode.el

index 94cd08eaa4e898f8e35de3bac942212cb3583167..9574c03043e24894cc24e7dd148711a4123dd363 100644 (file)
@@ -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.