From b9f02cf65a1b41e486f412e6f98644f298129d55 Mon Sep 17 00:00:00 2001 From: Nicolas Richard Date: Fri, 19 Jun 2015 16:57:26 +0200 Subject: [PATCH 1/2] Fixes: debbugs:20832 * lisp/calendar/todo-mode.el (todo-show): Signal an error if buffer for adding new todo file is empty but modified. --- lisp/calendar/todo-mode.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index dcc960fb9bf..6e975249a3f 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -743,6 +743,11 @@ corresponding todo file, displaying the corresponding category." (setq todo-category-number (todo-category-number cat))) ;; If this is a new todo file, add its first category. (when (zerop (buffer-size)) + ;; Don't confuse an erased buffer with a fresh buffer for + ;; adding a new todo file -- it might have been erased by + ;; mistake or due to a bug (e.g. Bug#20832). + (when (buffer-modified-p) + (error "Buffer is empty but modified, please report a bug")) (let (cat-added) (unwind-protect (setq todo-category-number From a5e6f33b4c8222ad62fdd7ff4bb0f8c5fac432c1 Mon Sep 17 00:00:00 2001 From: Stephen Berman Date: Fri, 19 Jun 2015 17:03:49 +0200 Subject: [PATCH 2/2] Fixes: debbugs:20832 * lisp/calendar/todo-mode.el (todo-show): Don't visit todo file in the minibuffer. --- lisp/calendar/todo-mode.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index 6e975249a3f..c869727f4c1 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -672,7 +672,7 @@ corresponding todo file, displaying the corresponding category." todo-filtered-items-mode)))) (if (funcall todo-files-function) (todo-read-file-name "Choose a todo file to visit: " - nil t) + nil t) (user-error "There are no todo files"))) ((and (eq major-mode 'todo-archive-mode) ;; Called noninteractively via todo-quit @@ -732,7 +732,10 @@ corresponding todo file, displaying the corresponding category." (when (or (member file todo-visited) (eq todo-show-first 'first)) (unless (todo-check-file file) (throw 'end nil)) - (set-window-buffer (selected-window) + ;; If todo-show is called from the minibuffer, don't visit + ;; the todo file there. + (set-window-buffer (if (minibufferp) (minibuffer-selected-window) + (selected-window)) (set-buffer (find-file-noselect file 'nowarn))) (if (equal (file-name-extension (buffer-file-name)) "toda") (unless (derived-mode-p 'todo-archive-mode) (todo-archive-mode))