|
@@ -38,6 +38,7 @@
|
|
|
(declare-function calendar-absolute-from-iso "cal-iso" (&optional date))
|
|
|
(declare-function notifications-notify "notifications" (&rest params))
|
|
|
(defvar org-time-stamp-formats)
|
|
|
+(defvar org-ts-what)
|
|
|
|
|
|
(defgroup org-clock nil
|
|
|
"Options concerning clocking working time in Org-mode."
|
|
@@ -1425,39 +1426,38 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
|
|
|
"Change CLOCK timestamps synchronously at cursor.
|
|
|
UPDOWN tells whether to change 'up or 'down."
|
|
|
(setq org-ts-what nil)
|
|
|
- (when (org-at-timestamp-p t)
|
|
|
- (let ((tschange (if (eq updown 'up) 'org-timestamp-up
|
|
|
- 'org-timestamp-down))
|
|
|
- ts1 begts1 ts2 begts2 updatets1 tdiff)
|
|
|
- (save-excursion
|
|
|
- (move-beginning-of-line 1)
|
|
|
- (re-search-forward org-ts-regexp3 nil t)
|
|
|
- (setq ts1 (match-string 0) begts1 (match-beginning 0))
|
|
|
- (when (re-search-forward org-ts-regexp3 nil t)
|
|
|
- (setq ts2 (match-string 0) begts2 (match-beginning 0))))
|
|
|
- ; Are we on the second timestamp?
|
|
|
- (if (<= begts2 (point)) (setq updatets1 t))
|
|
|
- (if (not ts2)
|
|
|
- ;; fall back on org-timestamp-up if there is only one
|
|
|
- (funcall tschange)
|
|
|
- ;; setq this so that (boundp 'org-ts-what is non-nil)
|
|
|
+ (let ((tschange (if (eq updown 'up) 'org-timestamp-up
|
|
|
+ 'org-timestamp-down))
|
|
|
+ ts1 begts1 ts2 begts2 updatets1 tdiff)
|
|
|
+ (save-excursion
|
|
|
+ (move-beginning-of-line 1)
|
|
|
+ (re-search-forward org-ts-regexp3 nil t)
|
|
|
+ (setq ts1 (match-string 0) begts1 (match-beginning 0))
|
|
|
+ (when (re-search-forward org-ts-regexp3 nil t)
|
|
|
+ (setq ts2 (match-string 0) begts2 (match-beginning 0))))
|
|
|
+ ;; Are we on the second timestamp?
|
|
|
+ (if (<= begts2 (point)) (setq updatets1 t))
|
|
|
+ (if (not ts2)
|
|
|
+ ;; fall back on org-timestamp-up if there is only one
|
|
|
(funcall tschange)
|
|
|
- (let ((ts (if updatets1 ts2 ts1))
|
|
|
- (begts (if updatets1 begts1 begts2)))
|
|
|
- (setq tdiff
|
|
|
- (subtract-time
|
|
|
- (org-time-string-to-time org-last-changed-timestamp)
|
|
|
- (org-time-string-to-time ts)))
|
|
|
- (save-excursion
|
|
|
- (goto-char begts)
|
|
|
- (org-timestamp-change
|
|
|
- (round (/ (org-float-time tdiff)
|
|
|
- (cond ((eq org-ts-what 'minute) 60)
|
|
|
- ((eq org-ts-what 'hour) 3600)
|
|
|
- ((eq org-ts-what 'day) (* 24 3600))
|
|
|
- ((eq org-ts-what 'month) (* 24 3600 31))
|
|
|
- ((eq org-ts-what 'year) (* 24 3600 365.2)))))
|
|
|
- org-ts-what 'updown)))))))
|
|
|
+ ;; setq this so that (boundp 'org-ts-what is non-nil)
|
|
|
+ (funcall tschange)
|
|
|
+ (let ((ts (if updatets1 ts2 ts1))
|
|
|
+ (begts (if updatets1 begts1 begts2)))
|
|
|
+ (setq tdiff
|
|
|
+ (subtract-time
|
|
|
+ (org-time-string-to-time org-last-changed-timestamp)
|
|
|
+ (org-time-string-to-time ts)))
|
|
|
+ (save-excursion
|
|
|
+ (goto-char begts)
|
|
|
+ (org-timestamp-change
|
|
|
+ (round (/ (org-float-time tdiff)
|
|
|
+ (cond ((eq org-ts-what 'minute) 60)
|
|
|
+ ((eq org-ts-what 'hour) 3600)
|
|
|
+ ((eq org-ts-what 'day) (* 24 3600))
|
|
|
+ ((eq org-ts-what 'month) (* 24 3600 31))
|
|
|
+ ((eq org-ts-what 'year) (* 24 3600 365.2)))))
|
|
|
+ org-ts-what 'updown))))))
|
|
|
|
|
|
(defun org-clock-cancel ()
|
|
|
"Cancel the running clock by removing the start timestamp."
|
|
@@ -1741,7 +1741,7 @@ fontified, and then returned."
|
|
|
"Create a table containing a report about clocked time.
|
|
|
If the cursor is inside an existing clocktable block, then the table
|
|
|
will be updated. If not, a new clocktable will be inserted. The scope
|
|
|
-of the new clock will be subtree when called from within a subtree, and
|
|
|
+of the new clock will be subtree when called from within a subtree, and
|
|
|
file elsewhere.
|
|
|
|
|
|
When called with a prefix argument, move to the first clock table in the
|
|
@@ -1753,11 +1753,11 @@ buffer and update it."
|
|
|
(org-show-entry))
|
|
|
(if (org-in-clocktable-p)
|
|
|
(goto-char (org-in-clocktable-p))
|
|
|
- (let ((props (if (ignore-errors
|
|
|
+ (let ((props (if (ignore-errors
|
|
|
(save-excursion (org-back-to-heading)))
|
|
|
(list :name "clocktable" :scope 'subtree)
|
|
|
(list :name "clocktable"))))
|
|
|
- (org-create-dblock
|
|
|
+ (org-create-dblock
|
|
|
(org-combine-plists org-clock-clocktable-default-properties props))))
|
|
|
(org-update-dblock))
|
|
|
|
|
@@ -2133,7 +2133,7 @@ from the dynamic block defintion."
|
|
|
;; much easier because there can be a fixed format with a
|
|
|
;; well-defined number of columns...
|
|
|
(let* ((hlchars '((1 . "*") (2 . "/")))
|
|
|
- (lwords (assoc (or (plist-get params :lang)
|
|
|
+ (lwords (assoc (or (plist-get params :lang)
|
|
|
org-export-default-language)
|
|
|
org-clock-clocktable-language-setup))
|
|
|
(multifile (plist-get params :multifile))
|
|
@@ -2221,14 +2221,14 @@ from the dynamic block defintion."
|
|
|
(if level-p (concat (nth 2 lwords) "|") "") ; level column, maybe
|
|
|
(if timestamp (concat (nth 3 lwords) "|") "") ; timestamp column, maybe
|
|
|
(if properties (concat (mapconcat 'identity properties "|") "|") "") ;properties columns, maybe
|
|
|
- (concat (nth 4 lwords) "|"
|
|
|
+ (concat (nth 4 lwords) "|"
|
|
|
(nth 5 lwords) "|\n")) ; headline and time columns
|
|
|
|
|
|
;; Insert the total time in the table
|
|
|
(insert-before-markers
|
|
|
"|-\n" ; a hline
|
|
|
"|" ; table line starter
|
|
|
- (if multifile (concat "| " (nth 6 lwords) " ") "")
|
|
|
+ (if multifile (concat "| " (nth 6 lwords) " ") "")
|
|
|
; file column, maybe
|
|
|
(if level-p "|" "") ; level column, maybe
|
|
|
(if timestamp "|" "") ; timestamp column, maybe
|