[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] [BUG] org-clock-display is partial (only some entries are counte
From: |
Sebastien Vauban |
Subject: |
Re: [O] [BUG] org-clock-display is partial (only some entries are counted) |
Date: |
Thu, 25 Jun 2015 16:01:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (windows-nt) |
Hello Nicolas,
Nicolas Goaziou writes:
> Sebastien Vauban writes:
>
>> I still consider the default behavior as dangerous -- because the novice
>> is not aware (except if obvious) that some clock times may be dropped in
>> the computation, and I find that scary --, but thanks anyway for the
>> workaround.
>
> Would you mind testing the following patch, then? `untilnow' is just
> a suggestion.
Applied the patch:
--8<---------------cut here---------------start------------->8---
patching file lisp/org-clock.el
Hunk #1 succeeded at 441 (offset 1 line).
Hunk #2 succeeded at 2091 (offset 3 lines).
Hunk #3 succeeded at 2200 (offset 3 lines).
Hunk #4 succeeded at 2216 (offset 3 lines).
--8<---------------cut here---------------end--------------->8---
Tested on one of my real files, with:
┌────
│ org-clock-display-default-range is a variable defined in `org-clock.el'.
│ Its value is untilnow
│ Original value was thisyear
│
│ Documentation:
│ Default range when displaying clocks with `org-clock-display'.
│
│ You can customize this variable.
└────
Got this:
--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (error "Specified time is not representable")
encode-time(0 0 0 1 1 1)
(setq ts (encode-time s m h d month y) te (encode-time (or s1 s) (or m1 m)
(or h1 h) (or d1 d) (or month1 month) (or y1 y)))
(let* ((tm (decode-time (or time (current-time)))) (s 0) (m (nth 1 tm)) (h
(nth 2 tm)) (d (nth 3 tm)) (month (nth 4 tm)) (y (nth 5 tm)) (dow (nth 6 tm))
(ws (or wstart 1)) (ms (or mstart 1)) (skey (symbol-name key)) (shift 0) (q
(cond ((>= (nth 4 tm) 10) 4) ((>= (nth 4 tm) 7) 3) ((>= (nth 4 tm) 4) 2) ((>=
(nth 4 tm) 1) 1))) s1 m1 h1 d1 month1 y1 diff ts te fm txt w date interval tmp
shiftedy shiftedm shiftedq) (cond ((string-match "^[0-9]+$" skey) (setq y
(string-to-number skey) m 1 d 1 key (quote year))) ((string-match
"^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)$" skey) (setq y (string-to-number
(match-string 1 skey)) month (string-to-number (match-string 2 skey)) d 1 key
(quote month))) ((string-match "^\\([0-9]+\\)-[wW]\\([0-9]\\{1,2\\}\\)$" skey)
(require (quote cal-iso)) (setq y (string-to-number (match-string 1 skey)) w
(string-to-number (match-string 2 skey))) (setq date
(calendar-gregorian-from-absolute (calendar-iso-to-absolute (list w 1 y))))
(setq d (nth 1 date) month (car date) y (nth 2 date) dow 1 key (quote week)))
((string-match "^\\([0-9]+\\)-[qQ]\\([1-4]\\)$" skey) (require (quote cal-iso))
(setq y (string-to-number (match-string 1 skey))) (setq q (string-to-number
(match-string 2 skey))) (setq date (calendar-gregorian-from-absolute
(calendar-iso-to-absolute (org-quarter-to-date q y)))) (setq d (nth 1 date)
month (car date) y (nth 2 date) dow 1 key (quote quarter))) ((string-match
"^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)-\\([0-9]\\{1,2\\}\\)$" skey) (setq y
(string-to-number (match-string 1 skey)) month (string-to-number (match-string
2 skey)) d (string-to-number (match-string 3 skey)) key (quote day)))
((string-match "\\([-+][0-9]+\\)$" skey) (setq shift (string-to-number
(match-string 1 skey)) key (intern (substring skey 0 (match-beginning 1)))) (if
(and (memq key (quote (quarter thisq))) (> shift 0)) (error "Looking forward
with quarters isn't implemented")))) (if (= shift 0) (progn (cond ((eq key
(quote yesterday)) (setq key (quote today) shift -1)) ((eq key (quote
lastweek)) (setq key (quote week) shift -1)) ((eq key (quote lastmonth)) (setq
key (quote month) shift -1)) ((eq key (quote lastyear)) (setq key (quote year)
shift -1)) ((eq key (quote lastq)) (setq key (quote quarter) shift -1)))))
(cond ((memq key (quote (day today))) (setq d (+ d shift) h 0 m 0 h1 24 m1 0))
((memq key (quote (week thisweek))) (setq diff (+ (* -7 shift) (if (= dow 0) (-
7 ws) (- dow ws))) m 0 h 0 d (- d diff) d1 (+ 7 d))) ((memq key (quote (month
thismonth))) (setq d (or ms 1) h 0 m 0 d1 (or ms 1) month (+ month shift)
month1 (1+ month) h1 0 m1 0)) ((memq key (quote (quarter thisq))) (cond ((< (+
(- q 1) shift) 0) (setq interval (* -1 (+ ... shift))) (setq tmp (org-floor*
interval 4)) (if (= 0 (nth 1 tmp)) (setq shiftedy (- y ...) shiftedm 1 shiftedq
1) (setq shiftedy (- y ...) shiftedm (- 13 ...) shiftedq (- 5 ...))) (setq d 1
h 0 m 0 d1 1 month shiftedm month1 (+ 3 shiftedm) h1 0 m1 0 y shiftedy)) ((> (+
q shift) 0) (setq shiftedq (+ q shift)) (setq shiftedy y) (setq d 1 h 0 m 0 d1
1 month (+ 1 (* 3 ...)) month1 (+ 4 (* 3 ...)) h1 0 m1 0)))) ((memq key (quote
(year thisyear))) (setq m 0 h 0 d 1 month 1 y (+ y shift) y1 (1+ y))) ((eq key
(quote untilnow)) (setq y1 y month1 m d1 d m 0 h 0 d 1 month 1 y 1)) ((eq key
(quote interactive)) nil) (t (user-error "No such time block %s" key))) (setq
ts (encode-time s m h d month y) te (encode-time (or s1 s) (or m1 m) (or h1 h)
(or d1 d) (or month1 month) (or y1 y))) (setq fm (cdr org-time-stamp-formats))
(cond ((memq key (quote (day today))) (setq txt (format-time-string "%A, %B %d,
%Y" ts))) ((memq key (quote (week thisweek))) (setq txt (format-time-string
"week %G-W%V" ts))) ((memq key (quote (month thismonth))) (setq txt
(format-time-string "%B %Y" ts))) ((memq key (quote (year thisyear))) (setq txt
(format-time-string "the year %Y" ts))) ((eq key (quote untilnow)) (setq txt
"now")) ((memq key (quote (quarter thisq))) (setq txt (concat
(org-count-quarter shiftedq) " quarter of " (number-to-string shiftedy))))) (if
as-strings (list (format-time-string fm ts) (format-time-string fm te) txt) (if
(eq key (quote interactive)) (list (org-read-date nil t nil "Range start? ")
(org-read-date nil t nil "Range end? ") "(Range interactively set)") (list ts
te txt))))
org-clock-special-range(untilnow)
(and (symbolp range) (org-clock-special-range range))
(or (and (symbolp range) (org-clock-special-range range))
(org-clock-special-range (intern (completing-read "Range: " (quote ("today"
"yesterday" "thisweek" "lastweek" "thismonth" "lastmonth" "thisyear" "lastyear"
"interactive")) nil t))))
(let ((r (or (and (symbolp range) (org-clock-special-range range))
(org-clock-special-range (intern (completing-read "Range: " (quote ...) nil
t)))))) (org-clock-sum (car r) (cadr r) headline-filter (or propname
:org-clock-minutes-custom)))
org-clock-sum-custom(nil untilnow :org-clock-minutes-default)
(cond ((not arg) (org-clock-sum-custom nil org-clock-display-default-range
prop)) (todayp (org-clock-sum-today)) (customp (org-clock-sum-custom nil arg))
(t (org-clock-sum)))
(let* ((todayp (equal arg (quote (4)))) (customp (member arg (quote ((16)
today yesterday thisweek lastweek thismonth lastmonth thisyear lastyear
interactive)))) (prop (cond ((not arg) :org-clock-minutes-default) (todayp
:org-clock-minutes-today) (customp :org-clock-minutes-custom) (t
:org-clock-minutes))) time h m p) (cond ((not arg) (org-clock-sum-custom nil
org-clock-display-default-range prop)) (todayp (org-clock-sum-today)) (customp
(org-clock-sum-custom nil arg)) (t (org-clock-sum))) (if (eq arg (quote (64)))
nil (save-excursion (goto-char (point-min)) (while (or (and (equal (setq p ...)
(point-min)) (get-text-property p prop)) (setq p (next-single-property-change
(point) prop))) (goto-char p) (if (setq time (get-text-property p prop)) (progn
(org-clock-put-overlay time)))) (setq h (/ org-clock-file-total-minutes 60) m
(- org-clock-file-total-minutes (* 60 h))) (if
org-remove-highlights-with-change (progn (org-add-hook (quote
before-change-functions) (quote org-clock-remove-overlays) nil (quote
local)))))) (message (concat (format "Total file time%s: " (cond (todayp " for
today") (customp " (custom)") (t ""))) (org-minutes-to-clocksum-string
org-clock-file-total-minutes) " (%d hours and %d minutes)") h m))
org-clock-display(nil)
call-interactively(org-clock-display nil nil)
#[1025 "\306\211?\205\f
\211\3069\203!\307N\203!\203!\310\303!\202\235\311!\262\211\211\242\312=\262\203<\313\"\211\262\204\"\314!\203l\203e\315E\fB
\247\203e
\316V\203e
\f\233\211:\203d\211\306\241\210\210\315\"\202\233\317#9\203\233\320N\203\233\321N\204\233\322\321\323#\210\324\325\326
\211\320N\327#\"\210\262\207" [debug-on-next-call prefix-arg
current-prefix-arg disabled-command-function command-history history-length nil
disabled run-hooks indirect-function autoload autoload-do-load arrayp
execute-kbd-macro 0 call-interactively byte-obsolete-info
command-execute-obsolete-warned put t message "%s" macroexp--obsolete-warning
"command"] 13 1990350](org-clock-display nil nil nil)
funcall(#[1025 "\306\211?\205\f
\211\3069\203!\307N\203!\203!\310\303!\202\235\311!\262\211\211\242\312=\262\203<\313\"\211\262\204\"\314!\203l\203e\315E\fB
\247\203e
\316V\203e
\f\233\211:\203d\211\306\241\210\210\315\"\202\233\317#9\203\233\320N\203\233\321N\204\233\322\321\323#\210\324\325\326
\211\320N\327#\"\210\262\207" [debug-on-next-call prefix-arg
current-prefix-arg disabled-command-function command-history history-length nil
disabled run-hooks indirect-function autoload autoload-do-load arrayp
execute-kbd-macro 0 call-interactively byte-obsolete-info
command-execute-obsolete-warned put t message "%s" macroexp--obsolete-warning
"command"] 13 1990350] org-clock-display nil nil nil)
(with-no-warnings (funcall ad--addoit-function cmd record-flag keys special))
(setq ad-return-value (with-no-warnings (funcall ad--addoit-function cmd
record-flag keys special)))
(let (ad-return-value) (setq ad-return-value (with-no-warnings (funcall
ad--addoit-function cmd record-flag keys special))) (when
(fancy-narrow-active-p) (fancy-narrow--motion-function)) ad-return-value)
ad-Advice-command-execute(#[1025 "\306\211?\205\f
\211\3069\203!\307N\203!\203!\310\303!\202\235\311!\262\211\211\242\312=\262\203<\313\"\211\262\204\"\314!\203l\203e\315E\fB
\247\203e
\316V\203e
\f\233\211:\203d\211\306\241\210\210\315\"\202\233\317#9\203\233\320N\203\233\321N\204\233\322\321\323#\210\324\325\326
\211\320N\327#\"\210\262\207" [debug-on-next-call prefix-arg
current-prefix-arg disabled-command-function command-history history-length nil
disabled run-hooks indirect-function autoload autoload-do-load arrayp
execute-kbd-macro 0 call-interactively byte-obsolete-info
command-execute-obsolete-warned put t message "%s" macroexp--obsolete-warning
"command"] 13 1990350] org-clock-display)
apply(ad-Advice-command-execute #[1025 "\306\211?\205\f
\211\3069\203!\307N\203!\203!\310\303!\202\235\311!\262\211\211\242\312=\262\203<\313\"\211\262\204\"\314!\203l\203e\315E\fB
\247\203e
\316V\203e
\f\233\211:\203d\211\306\241\210\210\315\"\202\233\317#9\203\233\320N\203\233\321N\204\233\322\321\323#\210\324\325\326
\211\320N\327#\"\210\262\207" [debug-on-next-call prefix-arg
current-prefix-arg disabled-command-function command-history history-length nil
disabled run-hooks indirect-function autoload autoload-do-load arrayp
execute-kbd-macro 0 call-interactively byte-obsolete-info
command-execute-obsolete-warned put t message "%s" macroexp--obsolete-warning
"command"] 13 1990350] org-clock-display)
command-execute(org-clock-display)
--8<---------------cut here---------------end--------------->8---
while the default version `thisyear' did work, before applying the patch.
BTW, `untilnow' is not proposed when TAB'ing on `C-u C-u C-c C-x C-d'.
Best regards,
Seb
--
Sebastien Vauban
- Re: [O] [BUG] org-clock-display is partial (only some entries are counted),
Sebastien Vauban <=