diff options
author | Stephen Berman <stephen.berman@gmx.net> | 2016-03-26 23:14:50 +0100 |
---|---|---|
committer | Stephen Berman <stephen.berman@gmx.net> | 2016-03-26 23:14:50 +0100 |
commit | e5c17f46785e2eca165ccd5aa890f212c6a61ca1 (patch) | |
tree | d7380a4fc823d2f736974329ccedc406bc2f6e53 | |
parent | bc70fda2c9f93a30351c7c79a2b5763bbbd7bbc6 (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.el | 25 |
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. |