summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Dominik <carsten.dominik@gmail.com>2009-05-28 13:24:23 +0200
committerCarsten Dominik <carsten.dominik@gmail.com>2009-05-28 13:24:23 +0200
commit2b6a3ac71d98503c53fa45c0c1abfe0df82dfccf (patch)
tree7eebb54bc00a85534a5b26a40d72ecbe4146f741
parente17fdc3aa9dd94252cea8ffe66126c2d29a3bf52 (diff)
downloadorg-mode-2b6a3ac71d98503c53fa45c0c1abfe0df82dfccf.tar.gz
Clock notification: Cleaning up some issues
-rw-r--r--lisp/org-clock.el107
1 files changed, 54 insertions, 53 deletions
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index d602005..e3af885 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -148,17 +148,18 @@ All this depends on running `org-clock-persistence-insinuate' in .emacs"
:group 'org-clock
:type 'boolean)
-
(defcustom org-clock-sound nil
"Sound that will used for notifications.
Possible values:
-* nil. No sound played.
-* any string, that is not a file. Make a beep.
-* file name. If you don't have alsa, it is better to be .wav file"
- :group 'org-clock
- :type 'string
- )
+nil no sound played.
+t standard Emacs beep
+file name play this sound file. If not possible, fall back to beep"
+ :group 'org-clock
+ :type '(choice
+ (const :tag "No sound" nil)
+ (const :tag "Standard beep" t)
+ (file :tag "Play sound file")))
;;; The clock for measuring work time.
@@ -174,7 +175,8 @@ Possible values:
"Effort estimate of the currently clocking task")
(defvar org-clock-total-time nil
- "Holds total time, spent on currently clocked item before start of current clock.")
+ "Holds total time, spent previously on currently clocked item.
+This does not include the time in the currently running clock.")
(defvar org-clock-history nil
"List of marker pointing to recent clocked tasks.")
@@ -290,14 +292,13 @@ pointing to it."
(save-restriction
(org-narrow-to-subtree)
(org-clock-sum)
- org-clock-file-total-minutes)
- )
+ org-clock-file-total-minutes))
(defun org-clock-get-clock-string ()
"Form a clock-string, that will be show in the mode line.
-If effort estimate was defined for current item, then use 01:30/01:50 format (clocked/estimated).
-If not, then 01:50 format (clocked).
-"
+If an effort estimate was defined for current item, use
+01:30/01:50 format (clocked/estimated).
+If not, show simply the clocked time like 01:50."
(let* ((clocked-time (org-clock-get-clocked-time))
(h (floor clocked-time 60))
(m (- clocked-time (* 60 h)))
@@ -329,16 +330,14 @@ If not, then 01:50 format (clocked).
(if org-clock-effort (org-clock-notify-once-if-expired))
(force-mode-line-update))
-
(defun org-clock-get-clocked-time ()
- "In minutes."
- (let ((currently-clocked-time (floor (- (time-to-seconds (current-time))
- (time-to-seconds org-clock-start-time)) 60)))
- (if org-clock-total-time
- (+ currently-clocked-time org-clock-total-time)
- currently-clocked-time
- )
- ))
+ "Get the clocked time for the rrent item in minutes.
+The time returned includes the the time spent on this task in
+previous clocking intervals."
+ (let ((currently-clocked-time
+ (floor (- (time-to-seconds (current-time))
+ (time-to-seconds org-clock-start-time)) 60)))
+ (+ currently-clocked-time (or org-clock-total-time 0))))
(defvar org-clock-notification-was-shown nil
"Shows if we have shown notification already.")
@@ -349,38 +348,37 @@ Notification is shown only once."
(let ((effort-in-minutes (org-hh:mm-string-to-minutes org-clock-effort))
(clocked-time (org-clock-get-clocked-time)))
(if (>= clocked-time effort-in-minutes)
- (if (not org-clock-notification-was-shown)
- (progn (org-clock-play-sound)
- (show-notification (format "Task '%s' should be finished by now. (%s)"
- org-clock-heading org-clock-effort))
- (setq org-clock-notification-was-shown t)))
- (setq org-clock-notification-was-shown nil)
- )
- ))
-
-
-(defun show-notification (notification)
+ (unless org-clock-notification-was-shown
+ (setq org-clock-notification-was-shown t)
+ (org-clock-play-sound)
+ (org-show-notification
+ (format "Task '%s' should be finished by now. (%s)"
+ org-clock-heading org-clock-effort)))
+ (setq org-clock-notification-was-shown nil))))
+
+(defun org-show-notification (notification)
"Show notification. Use libnotify, if available."
- (if (program-exists "notify-send")
- (start-process "emacs-timer-notification" nil "notify-send" notification)
- (message notification)
- ))
+ (if (org-program-exists "notify-send")
+ (start-process "emacs-timer-notification" nil "notify-send" notification))
+ ;; In any case, show in message area
+ (message notification))
- (play-sound-file org-clock-sound)
- (message "%s is not a file" org-clock-sound)
- )
(defun org-clock-play-sound ()
- "Play sound. Controlled by org-clock-sound.
-Use alsa's aplay tool if available."
- (if (and (not (eq org-clock-sound ""))
- (file-exists-p org-clock-sound))
- (if (program-exists "aplay")
- (start-process "org-clock-play-notification" nil "aplay" org-clock-sound)
- (play-sound-file org-clock-sound))
- (progn (beep t) (beep t))c)
- )
-
-(defun program-exists (program-name)
+ "Play sound as configured by `org-clock-sound'.
+Use alsa's aplay tool if available."
+ (cond
+ ((not org-clock-sound))
+ ((eq org-clock-sound t) (beep t) (beep t))
+ ((stringp org-clock-sound)
+ (if (file-exists-p org-clock-sound)
+ (if (org-program-exists "aplay")
+ (start-process "org-clock-play-notification" nil
+ "aplay" org-clock-sound)
+ (condition-case nil
+ (play-sound-file org-clock-sound)
+ (error (beep t) (beep t))))))))
+
+(defun org-program-exists (program-name)
"Checks whenever we can locate program and launch it."
(if (eq system-type 'gnu/linux)
(= 0 (call-process "which" nil nil nil program-name))
@@ -471,7 +469,9 @@ the clocking selection, associated with the letter `d'."
(goto-char (match-end 1))
(setq org-clock-start-time
(apply 'encode-time
- (org-parse-time-string (match-string 1)))))
+ (org-parse-time-string (match-string 1))))
+ (setq org-clock-effort (org-get-effort))
+ (setq org-clock-total-time (org-clock-sum-current-item)))
((eq org-clock-in-resume 'auto-restart)
;; called from org-clock-load during startup,
;; do not interrupt, but warn!
@@ -492,7 +492,8 @@ the clocking selection, associated with the letter `d'."
(setq org-clock-effort (org-get-effort))
(setq org-clock-total-time (org-clock-sum-current-item))
(setq org-clock-start-time (current-time))
- (setq ts (org-insert-time-stamp org-clock-start-time 'with-hm 'inactive))))
+ (setq ts (org-insert-time-stamp org-clock-start-time
+ 'with-hm 'inactive))))
(move-marker org-clock-marker (point) (buffer-base-buffer))
(or global-mode-string (setq global-mode-string '("")))
(or (memq 'org-mode-line-string global-mode-string)