diff options
author | Carsten Dominik <carsten.dominik@gmail.com> | 2009-05-28 13:24:23 +0200 |
---|---|---|
committer | Carsten Dominik <carsten.dominik@gmail.com> | 2009-05-28 13:24:23 +0200 |
commit | 2b6a3ac71d98503c53fa45c0c1abfe0df82dfccf (patch) | |
tree | 7eebb54bc00a85534a5b26a40d72ecbe4146f741 | |
parent | e17fdc3aa9dd94252cea8ffe66126c2d29a3bf52 (diff) | |
download | org-mode-2b6a3ac71d98503c53fa45c0c1abfe0df82dfccf.tar.gz |
Clock notification: Cleaning up some issues
-rw-r--r-- | lisp/org-clock.el | 107 |
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) |