emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Bug: org-clock-remove-empty-clock-drawer eats LOGBOOK drawer before


From: Olli P
Subject: [O] Bug: org-clock-remove-empty-clock-drawer eats LOGBOOK drawer before todo state gets logged [8.3.2 (8.3.2-52-g6d0af5-elpaplus @ /Users/Olli/.emacs.d/elpa/org-20151228/)]
Date: Sun, 03 Jan 2016 23:09:04 +0700
User-agent: mu4e 0.9.15; emacs 24.5.1

Steps to reproduce:

Launching Emacs with -Q, calling `M-x package-initialize` and then `M-x
org-mode`, and evaluating the following settings:

(setq org-clock-into-drawer t)
(setq org-log-into-drawer t)
(setq org-clock-into-drawer t)
(setq org-log-done 'time)
(setq org-clock-out-when-done t)
(setq org-clock-out-remove-zero-time-clocks t)
(setq org-todo-keywords '((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" 
"CANCELED(c@)")))

Creating a new task, clock-in in and immediately completing the task
will result in:
----------------------------------------------------------------------

* DONE I bug out
  CLOSED: [2016-01-03 Sun 21:36]
  - State "DONE"       from "TODO"       [2016-01-03 Sun 21:36]

----------------------------------------------------------------------
Instead of the expected:
----------------------------------------------------------------------

    * DONE I bug out
      CLOSED: [2016-01-03 Sun 21:38]
      :LOGBOOK:
      - State "DONE"       from "TODO"       [2016-01-03 Sun 21:38]
      :END:

----------------------------------------------------------------------
If I wait for the timer to run for a minute then things work as expected
as well:
----------------------------------------------------------------------

    * DONE I bug out
      CLOSED: [2016-01-03 Sun 23:00]
      :LOGBOOK:
      - State "DONE"       from "TODO"       [2016-01-03 Sun 23:00]
      CLOCK: [2016-01-03 Sun 22:59]--[2016-01-03 Sun 23:00] =>  0:01
      :END:

----------------------------------------------------------------------
The culprit is `org-clock-remove-empty-clock-drawer` that gets run at
the end of `org-clock-out` for being a `org-clock-out-hook`.

There is in fact code that handles a similar case of storing a note at
the end of `org-clock-out`:

    ...
    (if (and clock-drawer
             (not (stringp clock-drawer)) ;; 1)
             (org-log-into-drawer)
             (eq org-log-done 'note)      ;; 2)
             org-clock-out-when-done)
        (setq h (delq 'org-clock-remove-empty-clock-drawer h)))
    (mapc (lambda (f) (funcall f)) h)
    ...

..but I as far as I see this branch of the `if` can never actually run
as I couldn't come up with a way for `(not (stringp clock-drawer))` to
be true.

If I comment out the lines marked as 1) and 2) then my issue goes away,
but I don't know if this might cause problems elsewhere.

- Olli

> Emacs  : GNU Emacs 24.5.1 (x86_64-apple-darwin14.3.0, Carbon Version 157 
> AppKit 1347.57)
>  of 2015-12-20 on Ollis-MacBook-Pro.local
> Package: Org-mode version 8.3.2 (8.3.2-52-g6d0af5-elpaplus @ 
> /Users/Olli/.emacs.d/elpa/org-20151228/)
>
> current state:
> ==============
> (setq
>  org-id-locations-file "/Users/Olli/.emacs.d/.cache/.org-id-locations"
>  org-export-babel-evaluate nil
>  org-agenda-tags-todo-honor-ignore-options t
>  org-tab-first-hook '(org-hide-block-toggle-maybe 
> org-babel-hide-result-toggle-maybe org-babel-header-arg-expand)
>  org-insert-heading-hook '(gtd/insert-heading-inactive-timestamp)
>  org-clock-persist-file "/Users/Olli/.emacs.d/.cache/org-clock-save.el"
>  org-speed-command-hook '(org-speed-command-default-hook 
> org-babel-speed-command-hook)
>  org-agenda-skip-timestamp-if-done t
>  org-clock-history-length 24
>  org-occur-hook '(org-first-headline-recenter)
>  org-agenda-todo-ignore-timestamp t
>  org-metaup-hook '(org-babel-load-in-session-maybe)
>  org-agenda-todo-ignore-deadlines t
>  org-log-done 'time
>  org-src-window-setup 'current-window
>  org-confirm-shell-link-function 'yes-or-no-p
>  org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id
>  org-link-translation-function 'toc-org-unhrefify
>  org-pomodoro-started-hook '(gtd/keep-clock-running)
>  org-present-mode-hook '(spacemacs//org-present-start)
>  org-agenda-sticky t
>  org-agenda-restore-windows-after-quit t
>  org-agenda-todo-ignore-scheduled t
>  org-agenda-skip-scheduled-if-done t
>  org-agenda-custom-commands '(("N" "Notes" tags "NOTE"
>                                ((org-agenda-overriding-header "Notes") 
> (org-tags-match-list-sublevels t)))
>                               (" " "Agenda"
>                                ((agenda "" nil)
>                                 (tags-todo "-WAITING-CANCELLED/!NEXT"
>                                  ((org-agenda-overriding-header "Next Tasks")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-projects-and-habits-and-single-tasks))
>                                   (org-agenda-todo-ignore-scheduled t) 
> (org-agenda-todo-ignore-deadlines t)
>                                   (org-agenda-todo-ignore-with-date t) 
> (org-agenda-tags-todo-honor-todo-options t)
>                                   (org-tags-match-list-sublevels t)
>                                   (org-agenda-sorting-strategy
>                                    (quote (todo-state-down priority-down 
> effort-up category-keep)))
>                                   )
>                                  )
>                                 (tags-todo 
> "-REFILE-CANCELLED-URL/!-DEFER-WAITING"
>                                  ((org-agenda-overriding-header "Tasks")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-project-tasks-maybe))
>                                   (org-agenda-todo-ignore-scheduled t) 
> (org-agenda-todo-ignore-deadlines t)
>                                   (org-agenda-todo-ignore-with-date t)
>                                   (org-agenda-sorting-strategy (quote 
> (priority-down effort-up category-keep))))
>                                  )
>                                 (tags-todo "-CANCELLED/!-DEFER+WAITING"
>                                  ((org-agenda-overriding-header "Waiting") 
> (org-tags-match-list-sublevels nil)
>                                   (org-agenda-todo-ignore-scheduled (quote 
> future))
>                                   (org-agenda-todo-ignore-deadlines (quote 
> future)))
>                                  )
>                                 (tags-todo "-CANCELLED/!"
>                                  ((org-agenda-overriding-header "Stuck 
> Projects")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-non-stuck-projects)))
>                                  )
>                                 (tags-todo "-DEFER-CANCELLED/!"
>                                  ((org-agenda-overriding-header "Projects")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-non-projects))
>                                   (org-agenda-sorting-strategy (quote 
> (priority-down effort-up category-keep))))
>                                  )
>                                 (tags-todo "-CANCELLED/!DEFER"
>                                  ((org-agenda-overriding-header "Deferred")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-stuck-projects))
>                                   (org-tags-match-list-sublevels nil)
>                                   (org-agenda-todo-ignore-scheduled (quote 
> future))
>                                   (org-agenda-todo-ignore-deadlines (quote 
> future)))
>                                  )
>                                 (tags-todo "-REFILE+URL-DONE"
>                                  ((org-agenda-overriding-header "Web") 
> (org-tags-match-list-sublevels nil)))
>                                 (tags "REFILE"
>                                  ((org-agenda-overriding-header "Tasks to 
> Refile")
>                                   (org-tags-match-list-sublevels nil))
>                                  )
>                                 (tags "-REFILE/"
>                                  ((org-agenda-overriding-header "Tasks to 
> Archive")
>                                   (org-agenda-skip-function (quote 
> gtd/skip-non-archivable-tasks))
>                                   (org-tags-match-list-sublevels nil))
>                                  )
>                                 )
>                                nil)
>                               ("r" "Tasks to Refile" tags "REFILE"
>                                ((org-agenda-overriding-header "Tasks to 
> Refile")
>                                 (org-tags-match-list-sublevels nil))
>                                )
>                               ("d" "Done Tasks" agenda ""
>                                ((org-agenda-start-with-log-mode (quote 
> (closed)))
>                                 (org-agenda-skip-function
>                                  (quote (org-agenda-skip-entry-if (quote 
> nottodo) (quote ("DONE")))))
>                                 )
>                                )
>                               ("#" "Stuck Projects" tags-todo "-CANCELLED/!"
>                                ((org-agenda-overriding-header "Stuck 
> Projects")
>                                 (org-agenda-skip-function (quote 
> gtd/skip-non-stuck-projects)))
>                                )
>                               ("n" "Next Tasks" tags-todo 
> "-WAITING-CANCELLED/!NEXT"
>                                ((org-agenda-overriding-header "Next Tasks")
>                                 (org-agenda-skip-function (quote 
> gtd/skip-projects-and-habits-and-single-tasks))
>                                 (org-agenda-todo-ignore-scheduled t) 
> (org-agenda-todo-ignore-deadlines t)
>                                 (org-agenda-todo-ignore-with-date t) 
> (org-tags-match-list-sublevels t)
>                                 (org-agenda-sorting-strategy (quote 
> (todo-state-down effort-up category-keep))))
>                                )
>                               ("t" "Tasks" tags-todo 
> "-REFILE-CANCELLED/!-DEFER-WAITING"
>                                ((org-agenda-overriding-header "Tasks")
>                                 (org-agenda-skip-function (quote 
> gtd/skip-project-tasks-maybe))
>                                 (org-agenda-sorting-strategy (quote 
> (category-keep))))
>                                )
>                               ("p" "Projects" tags-todo "-DEFER-CANCELLED/!"
>                                ((org-agenda-overriding-header "Projects")
>                                 (org-agenda-skip-function (quote 
> gtd/skip-non-projects))
>                                 (org-agenda-sorting-strategy (quote 
> (category-keep))))
>                                )
>                               ("w" "Waiting Tasks" tags-todo 
> "-CANCELLED+WAITING/!"
>                                ((org-agenda-overriding-header "Waiting and 
> Postponed tasks"))
>                                (org-tags-match-list-sublevels nil))
>                               ("h" "Habits" tags-todo "STYLE=\"habit\""
>                                ((org-agenda-overriding-header "Habits")
>                                 (org-agenda-sorting-strategy (quote 
> (todo-state-down effort-up category-keep))))
>                                )
>                               ("u" "Web" tags-todo "+URL-DONE"
>                                ((org-agenda-overriding-header "List of pages 
> to study/read later")))
>                               ("A" "Tasks to Archive" tags "-REFILE/"
>                                ((org-agenda-overriding-header "Tasks to 
> Archive")
>                                 (org-agenda-skip-function (quote 
> gtd/skip-non-archivable-tasks))
>                                 (org-tags-match-list-sublevels nil))
>                                )
>                               )
>  org-return-follows-link t
>  org-default-notes-file "~/org/gtd/refile.org"
>  org-clock-in-resume t
>  org-todo-keyword-faces '(("TODO" :weight bold :foreground "RosyBrown1" 
> :background "OrangeRed3" :box
>                            (:style released-button))
>                           ("DONE" :weight bold :foreground "#8bc34a" 
> :background "#1b5e10" :box
>                            (:style released-button))
>                           ("NEXT" :weight bold :foreground "wheat1" 
> :background "DarkOrange2" :box
>                            (:style released-button))
>                           ("CANCELLED" :weight bold :foreground "#8bc34a" 
> :background "#1b5e10" :box
>                            (:style released-button))
>                           ("WAITING" :weight bold :foreground "SkyBlue1" 
> :background "DodgerBlue3" :box
>                            (:style released-button))
>                           ("DEFER" :weight bold :foreground "plum1" 
> :background "purple3" :box
>                            (:style released-button))
>                           )
>  org-capture-templates '(("t" "Todo" entry (file "~/org/gtd/refile.org") "* 
> TODO [#B] %?\n%U\n")
>                          ("l" "Todo Link" entry (file "~/org/gtd/refile.org") 
> "* TODO [#B] Reply to: %a\n%U\n")
>                          ("n" "Note" entry (file "~/org/gtd/refile.org") "* 
> %? :NOTE:\n%U\n")
>                          ("i" "Idea" entry (file "~/org/ideas.org") "\n* %? 
> :IDEA:\n%U\n")
>                          ("d" "Drill" entry (file "~/org/drill/refile.org") 
> "* %?" :empty-lines 1)
>                          ("l" "Ledger Entry" plain (file 
> "~/ledger/2015.ledger") "%(org-read-date) * %?\n"
>                           :empty-lines 1)
>                          ("w" "Web" entry (file "~/org/gtd/refile.org") "* 
> TODO Check out: %? :URL:\n%U\n"))
>  org-startup-indented t
>  org-after-todo-state-change-hook '(org-clock-out-if-current)
>  org-src-mode-hook '(org-src-babel-configure-edit-buffer 
> org-src-mode-configure-edit-buffer)
>  org-agenda-before-write-hook '(org-agenda-add-entry-text)
>  org-babel-pre-tangle-hook '(save-buffer)
>  org-global-properties '(("Effort_ALL" . "0:05 0:10 0:15 0:30 0:45 1:00 2:00 
> 3:00 5:00 0:00"))
>  org-mode-hook '(spacemacs/load-yasnippet toc-org-enable org-bullets-mode 
> org-clock-load
>                  #[nil "\300\301\302\303\304$\207"
>                    [org-add-hook change-major-mode-hook org-show-block-all 
> append local] 5]
>                  #[nil "\300\301\302\303\304$\207"
>                    [org-add-hook change-major-mode-hook 
> org-babel-show-result-all append local] 5]
>                  org-babel-result-hide-spec org-babel-hide-all-hashes 
> spacemacs/add-org-surrounds evil-org-mode
>                  org-eldoc-load spacemacs//init-company-org-mode company-mode)
>  org-refile-targets '((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9) 
> (someday-file :maxlevel . 9)
>                       (weblog-file :maxlevel . 9))
>  org-outline-path-complete-in-steps nil
>  org-todo-state-tags-triggers '(("CANCELLED" ("CANCELLED" . t)) ("WAITING" 
> ("WAITING" . t))
>                                 ("DEFER" ("WAITING" . t) ("DEFER" . t)) (done 
> ("WAITING") ("DEFER"))
>                                 ("TODO" ("WAITING") ("CANCELLED") ("DEFER"))
>                                 ("NEXT" ("WAITING") ("CANCELLED") ("DEFER"))
>                                 ("DONE" ("WAITING") ("CANCELLED") ("DEFER")))
>  org-stuck-projects '("" nil nil "")
>  org-archive-hook '(org-attach-archive-delete-maybe)
>  org-agenda-compact-blocks t
>  org-clock-persist t
>  org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point 
> org-babel-execute-safely-maybe)
>  org-refile-use-outline-path t
>  org-clock-in-switch-to-state 'gtd/clock-in-to-next
>  org-enforce-todo-dependencies t
>  org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers 
> org-cycle-show-empty-lines
>                   org-optimize-window-after-visibility-change)
>  org-agenda-tags-column 85
>  org-archive-location "%s_archive::* Archived Tasks"
>  org-present-mode-quit-hook '(spacemacs//org-present-end)
>  org-clock-persist-query-resume nil
>  org-agenda-todo-ignore-with-date t
>  org-refile-allow-creating-parent-nodes 'confirm
>  org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!/!)")
>                      (sequence "WAITING(w/!)" "DEFER(f@/!)" "|" 
> "CANCELLED(c/!)"))
>  org-agenda-window-setup 'current-window
>  org-clock-report-include-clocking-task t
>  org-agenda-span 'day
>  org-confirm-elisp-link-function 'yes-or-no-p
>  org-startup-with-inline-images t
>  org-metadown-hook '(org-babel-pop-to-session-maybe)
>  org-pomodoro-finished-hook '(gtd/dont-keep-clock-running)
>  org-log-into-drawer t
>  org-blocker-hook '(org-block-todo-from-children-or-siblings-or-parent)
>  org-agenda-skip-deadline-if-done t
>  org-fontify-whole-heading-line t
>  org-agenda-files '("~/org/gtd/" "~/org/projects.org")
>  org-clock-out-hook '(org-clock-remove-empty-clock-drawer gtd/clock-out-maybe)
>  org-confirm-babel-evaluate nil
>  org-clock-out-remove-zero-time-clocks t
>  org-refile-target-verify-function 'gtd/verify-refile-target
>  org-pomodoro-killed-hook '(gtd/dont-keep-clock-running)
>  )



reply via email to

[Prev in Thread] Current Thread [Next in Thread]