forked from mirrors/org-mode
New timer functionality to set a timer from a headline.
This commit defines three new functions in org-timer.el: - org-timer-set-timer, bound to `C-c C-x ;' in Org buffers and to `;' in Org agenda buffers. This function sets a timer for the headline the cursor is currently it. Up to three timers can be set. - org-timer-show-remaining-time: this shows the remaining time for the last set timer. - org-timer-reset-timers: this reset all timers. This functionality was requested by Samuel Wales and emulates that of tea-time.el -- see the emacswiki doc about tea-time.el: http://www.emacswiki.org/emacs/tea-time
This commit is contained in:
parent
7a1a62d2f2
commit
7cdff7b1eb
|
@ -1,5 +1,14 @@
|
||||||
2009-07-26 Bastien Guerry <bzg@altern.org>
|
2009-07-26 Bastien Guerry <bzg@altern.org>
|
||||||
|
|
||||||
|
* org-agenda.el (org-agenda-mode-map): New key for
|
||||||
|
org-timer-set-timer called from the agenda.
|
||||||
|
|
||||||
|
* org.el (org-mode-map): New key for org-timer-set-timer.
|
||||||
|
|
||||||
|
* org-timer.el (org-timer-reset-timers)
|
||||||
|
(org-timer-show-remaining-time, org-timer-set-timer): New
|
||||||
|
functions.
|
||||||
|
|
||||||
* org-clock.el (org-show-notification): Update the docstring.
|
* org-clock.el (org-show-notification): Update the docstring.
|
||||||
|
|
||||||
* org.el (org-provide-todo-statistics): Allow new value
|
* org.el (org-provide-todo-statistics): Allow new value
|
||||||
|
|
|
@ -1391,6 +1391,7 @@ The following commands are available:
|
||||||
(org-defkey org-agenda-mode-map "}" 'org-agenda-manipulate-query-subtract-re)
|
(org-defkey org-agenda-mode-map "}" 'org-agenda-manipulate-query-subtract-re)
|
||||||
(org-defkey org-agenda-mode-map "/" 'org-agenda-filter-by-tag)
|
(org-defkey org-agenda-mode-map "/" 'org-agenda-filter-by-tag)
|
||||||
(org-defkey org-agenda-mode-map "\\" 'org-agenda-filter-by-tag-refine)
|
(org-defkey org-agenda-mode-map "\\" 'org-agenda-filter-by-tag-refine)
|
||||||
|
(org-defkey org-agenda-mode-map ";" 'org-timer-set-timer)
|
||||||
|
|
||||||
(defvar org-agenda-keymap (copy-keymap org-agenda-mode-map)
|
(defvar org-agenda-keymap (copy-keymap org-agenda-mode-map)
|
||||||
"Local keymap for agenda entries from Org-mode.")
|
"Local keymap for agenda entries from Org-mode.")
|
||||||
|
|
|
@ -253,6 +253,73 @@ VALUE can be `on', `off', or `pause'."
|
||||||
(concat " <" (substring (org-timer-value-string) 0 -1) ">"))
|
(concat " <" (substring (org-timer-value-string) 0 -1) ">"))
|
||||||
(force-mode-line-update)))
|
(force-mode-line-update)))
|
||||||
|
|
||||||
|
(defvar org-timer-timer1 nil)
|
||||||
|
(defvar org-timer-timer2 nil)
|
||||||
|
(defvar org-timer-timer3 nil)
|
||||||
|
|
||||||
|
(defun org-timer-reset-timers ()
|
||||||
|
"Reset all timers."
|
||||||
|
(interactive)
|
||||||
|
(mapcar (lambda(timer)
|
||||||
|
(when (eval timer)
|
||||||
|
(cancel-timer timer)
|
||||||
|
(setq timer nil)))
|
||||||
|
'(org-timer-timer1
|
||||||
|
org-timer-timer2
|
||||||
|
org-timer-timer3))
|
||||||
|
(message "All timers reset"))
|
||||||
|
|
||||||
|
(defun org-timer-show-remaining-time ()
|
||||||
|
"Display the remaining time before the timer ends."
|
||||||
|
(interactive)
|
||||||
|
(require 'time)
|
||||||
|
(if (and (not org-timer-timer1)
|
||||||
|
(not org-timer-timer2)
|
||||||
|
(not org-timer-timer3))
|
||||||
|
(message "No timer set")
|
||||||
|
(let* ((rtime (decode-time
|
||||||
|
(time-subtract (timer--time (or org-timer-timer3
|
||||||
|
org-timer-timer2
|
||||||
|
org-timer-timer1))
|
||||||
|
(current-time))))
|
||||||
|
(rsecs (nth 0 rtime))
|
||||||
|
(rmins (nth 1 rtime)))
|
||||||
|
(message "%d minutes %d secondes left before next time out"
|
||||||
|
rmins rsecs))))
|
||||||
|
|
||||||
|
(defun org-timer-set-timer (minutes)
|
||||||
|
"Set a timer."
|
||||||
|
(interactive "sTime out in (min)? ")
|
||||||
|
(if (not (string-match "[0-9]+" minutes))
|
||||||
|
(org-timer-show-remaining-time)
|
||||||
|
(let* ((mins (string-to-number (match-string 0 minutes)))
|
||||||
|
(secs (* mins 60))
|
||||||
|
(hl (cond
|
||||||
|
((string-match "Org Agenda" (buffer-name))
|
||||||
|
(let* ((marker (or (get-text-property (point) 'org-marker)
|
||||||
|
(org-agenda-error)))
|
||||||
|
(hdmarker (or (get-text-property (point) 'org-hd-marker)
|
||||||
|
marker))
|
||||||
|
(pos (marker-position marker)))
|
||||||
|
(with-current-buffer (marker-buffer marker)
|
||||||
|
(widen)
|
||||||
|
(goto-char pos)
|
||||||
|
(org-show-entry)
|
||||||
|
(setq heading (org-get-heading)))))
|
||||||
|
((eq major-mode 'org-mode)
|
||||||
|
(org-get-heading))
|
||||||
|
(t (error "Not in an Org buffer"))))
|
||||||
|
timer-set)
|
||||||
|
(mapcar (lambda(timer)
|
||||||
|
(if (not (or (eval timer) timer-set))
|
||||||
|
(setq timer-set t
|
||||||
|
timer
|
||||||
|
(run-with-timer secs nil 'org-show-notification
|
||||||
|
(format "%s: time out" hl)))))
|
||||||
|
'(org-timer-timer1
|
||||||
|
org-timer-timer2
|
||||||
|
org-timer-timer3)))))
|
||||||
|
|
||||||
(provide 'org-timer)
|
(provide 'org-timer)
|
||||||
|
|
||||||
;; arch-tag: 97538f8c-3871-4509-8f23-1e7b3ff3d107
|
;; arch-tag: 97538f8c-3871-4509-8f23-1e7b3ff3d107
|
||||||
|
|
|
@ -13998,6 +13998,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
|
||||||
(org-defkey org-mode-map "\C-c\C-xp" 'org-set-property)
|
(org-defkey org-mode-map "\C-c\C-xp" 'org-set-property)
|
||||||
(org-defkey org-mode-map "\C-c\C-xo" 'org-toggle-ordered-property)
|
(org-defkey org-mode-map "\C-c\C-xo" 'org-toggle-ordered-property)
|
||||||
(org-defkey org-mode-map "\C-c\C-xi" 'org-insert-columns-dblock)
|
(org-defkey org-mode-map "\C-c\C-xi" 'org-insert-columns-dblock)
|
||||||
|
(org-defkey org-mode-map [(control ?c) (control ?x) (control ?\;)] 'org-timer-set-timer)
|
||||||
|
|
||||||
(org-defkey org-mode-map "\C-c\C-x." 'org-timer)
|
(org-defkey org-mode-map "\C-c\C-x." 'org-timer)
|
||||||
(org-defkey org-mode-map "\C-c\C-x-" 'org-timer-item)
|
(org-defkey org-mode-map "\C-c\C-x-" 'org-timer-item)
|
||||||
|
|
Loading…
Reference in a new issue