Re: [Orgmode] [PATCH 3/3] Add clock persistence.
Hi, I have now applied these patches and put some initial documentation into http://orgmode.org/Changes.html. Since I have not yet tested this myself, I would he glad if some of you clocking people could test it and report. Thanks. - Carsten On Oct 23, 2008, at 12:28 PM, James TD Smith wrote: Clock-related data are saved when exiting emacs ands restored when emacs is restarted. The data saved include the contents of `org-clock- history', and the running clock, if there is one. To use this, you will need to add (require 'org-clock) (org-clock-persistence-insinuate) to your .emacs and either add (setq org-clock-persist t) (setq org-clock-in-resume t) or set those options to t in custom. This patch requires the clock resume patch. --- lisp/ChangeLog| 16 + lisp/org-clock.el | 90 + 2 files changed, 106 insertions(+), 0 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 438296d..063ae15 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -10,6 +10,22 @@ (org-clock-in): When clocking in to an entry, if `org-clock-in-resume' is set, check if the first clock line is open and if so, start the clock from the time in the clock line. + (org-clock-persist): Add a custom option to toggle clock + persistence. + (org-clock-persist-query-save): Add a custom option to toggle + asking the user if they want to save the running clock when + exiting. + (org-clock-persist-query-resume): Add a custom option to toggle + asking the user if they want to resume the saved clock when Emacs + is restarted. + (org-clock-save): Add a function to save clock data. + This includes the contents of `org-clock-history' and the buffer + and position of the currently clocked task, if any. + (org-clock-load): Add a function to load clock data. + This populates `org-clock-history', and resumes the saved clocked + task if there is one. + (org-clock-persistence-insinuate): Add a method to set up the + hooks for clock persistence. 2008-10-22 Carsten Dominik [EMAIL PROTECTED] diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 40272d4..90b2992 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -101,6 +101,28 @@ has not been closed, resume the clock from that point :group 'org-clock :type 'boolean) +(defcustom org-clock-persist nil + When non-nil, save the running clock when emacs is closed, and + resume it next time emacs is started. + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-file ~/.emacs.d/org-clock-save.el + File to save clock data to + :group 'org-clock + :type 'string) + +(defcustom org-clock-persist-query-save nil + When non-nil, ask before saving the current clock on exit + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-query-resume t + When non-nil, ask before resuming any stored clock during +load. + :group 'org-clock + :type 'boolean) + ;;; The clock for measuring work time. (defvar org-mode-line-string ) @@ -989,6 +1011,74 @@ the currently selected interval size. lines) \n +(defun org-clock-save () + Persist various clock-related data to disk + (with-current-buffer (find-file (expand-file-name org-clock- persist-file)) +(progn (delete-region (point-min) (point-max)) + ;;Store clock + (insert (format ;; org-persist.el - %s at %s\n system-name (time-stamp-string))) + (if (and org-clock-persist (marker-buffer org-clock-marker) + (or (not org-clock-persist-query-save) + (y-or-n-p (concat Save current clock ( + (substring-no-properties org-clock-heading) + ) + (insert (setq resume-clock '(\ + (buffer-file-name (marker-buffer org-clock-marker)) + \ . (int-to-string (marker-position org-clock-marker)) + ))\n)) + ;;Store clocked task history. Tasks are stored reversed to make + ;;reading simpler + (if org-clock-history + (insert (setq stored-clock-history '( + (mapconcat + (lambda (m) + (when (marker-buffer m) + (concat (\ (buffer-file-name (marker-buffer m)) + \ . (int-to-string (marker-position m)) + + (reverse org-clock-history) ) ))\n)) + (save-buffer) + (kill-buffer (current-buffer) + +(defvar org-clock-loaded nil) + +(defun org-clock-load () + Load various clock-related data from disk, optionally resuming +a stored clock + (if (not org-clock-loaded) + (let ((filename (expand-file-name
Re: [Orgmode] [PATCH 3/3] Add clock persistence.
For my (admittedly simple) test cases, so far it looks good. Thanks. -- helge On Tue, Oct 28, 2008 at 7:33 AM, Carsten Dominik [EMAIL PROTECTED] wrote: Hi, I have now applied these patches and put some initial documentation into http://orgmode.org/Changes.html. Since I have not yet tested this myself, I would he glad if some of you clocking people could test it and report. Thanks. - Carsten On Oct 23, 2008, at 12:28 PM, James TD Smith wrote: Clock-related data are saved when exiting emacs ands restored when emacs is restarted. The data saved include the contents of `org-clock-history', and the running clock, if there is one. To use this, you will need to add (require 'org-clock) (org-clock-persistence-insinuate) to your .emacs and either add (setq org-clock-persist t) (setq org-clock-in-resume t) or set those options to t in custom. This patch requires the clock resume patch. --- lisp/ChangeLog| 16 + lisp/org-clock.el | 90 + 2 files changed, 106 insertions(+), 0 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 438296d..063ae15 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -10,6 +10,22 @@ (org-clock-in): When clocking in to an entry, if `org-clock-in-resume' is set, check if the first clock line is open and if so, start the clock from the time in the clock line. + (org-clock-persist): Add a custom option to toggle clock + persistence. + (org-clock-persist-query-save): Add a custom option to toggle + asking the user if they want to save the running clock when + exiting. + (org-clock-persist-query-resume): Add a custom option to toggle + asking the user if they want to resume the saved clock when Emacs + is restarted. + (org-clock-save): Add a function to save clock data. + This includes the contents of `org-clock-history' and the buffer + and position of the currently clocked task, if any. + (org-clock-load): Add a function to load clock data. + This populates `org-clock-history', and resumes the saved clocked + task if there is one. + (org-clock-persistence-insinuate): Add a method to set up the + hooks for clock persistence. 2008-10-22 Carsten Dominik [EMAIL PROTECTED] diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 40272d4..90b2992 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -101,6 +101,28 @@ has not been closed, resume the clock from that point :group 'org-clock :type 'boolean) +(defcustom org-clock-persist nil + When non-nil, save the running clock when emacs is closed, and + resume it next time emacs is started. + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-file ~/.emacs.d/org-clock-save.el + File to save clock data to + :group 'org-clock + :type 'string) + +(defcustom org-clock-persist-query-save nil + When non-nil, ask before saving the current clock on exit + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-query-resume t + When non-nil, ask before resuming any stored clock during +load. + :group 'org-clock + :type 'boolean) + ;;; The clock for measuring work time. (defvar org-mode-line-string ) @@ -989,6 +1011,74 @@ the currently selected interval size. lines) \n +(defun org-clock-save () + Persist various clock-related data to disk + (with-current-buffer (find-file (expand-file-name org-clock-persist-file)) +(progn (delete-region (point-min) (point-max)) + ;;Store clock + (insert (format ;; org-persist.el - %s at %s\n system-name (time-stamp-string))) + (if (and org-clock-persist (marker-buffer org-clock-marker) +(or (not org-clock-persist-query-save) + (y-or-n-p (concat Save current clock ( + (substring-no-properties org-clock-heading) + ) + (insert (setq resume-clock '(\ + (buffer-file-name (marker-buffer org-clock-marker)) + \ . (int-to-string (marker-position org-clock-marker)) + ))\n)) + ;;Store clocked task history. Tasks are stored reversed to make + ;;reading simpler + (if org-clock-history + (insert (setq stored-clock-history '( + (mapconcat + (lambda (m) + (when (marker-buffer m) +(concat (\ (buffer-file-name (marker-buffer m)) +\ . (int-to-string (marker-position m)) + + (reverse org-clock-history) ) ))\n)) + (save-buffer) + (kill-buffer (current-buffer) + +(defvar org-clock-loaded nil) + +(defun org-clock-load () + Load various clock-related data from disk, optionally resuming +a stored clock + (if (not org-clock-loaded) + (let ((filename (expand-file-name org-clock-persist-file)) +(org-clock-in-resume t)) + (if (file-readable-p filename) +(progn + (message %s Restoring clock data) + (setq org-clock-loaded t) + (load-file filename) + ;; load history + (if (boundp 'stored-clock-history) + (save-window-excursion +(mapc (lambda
[Orgmode] [PATCH 3/3] Add clock persistence.
Clock-related data are saved when exiting emacs ands restored when emacs is restarted. The data saved include the contents of `org-clock-history', and the running clock, if there is one. To use this, you will need to add (require 'org-clock) (org-clock-persistence-insinuate) to your .emacs and either add (setq org-clock-persist t) (setq org-clock-in-resume t) or set those options to t in custom. This patch requires the clock resume patch. --- lisp/ChangeLog| 16 + lisp/org-clock.el | 90 + 2 files changed, 106 insertions(+), 0 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 438296d..063ae15 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -10,6 +10,22 @@ (org-clock-in): When clocking in to an entry, if `org-clock-in-resume' is set, check if the first clock line is open and if so, start the clock from the time in the clock line. + (org-clock-persist): Add a custom option to toggle clock + persistence. + (org-clock-persist-query-save): Add a custom option to toggle + asking the user if they want to save the running clock when + exiting. + (org-clock-persist-query-resume): Add a custom option to toggle + asking the user if they want to resume the saved clock when Emacs + is restarted. + (org-clock-save): Add a function to save clock data. + This includes the contents of `org-clock-history' and the buffer + and position of the currently clocked task, if any. + (org-clock-load): Add a function to load clock data. + This populates `org-clock-history', and resumes the saved clocked + task if there is one. + (org-clock-persistence-insinuate): Add a method to set up the + hooks for clock persistence. 2008-10-22 Carsten Dominik [EMAIL PROTECTED] diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 40272d4..90b2992 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -101,6 +101,28 @@ has not been closed, resume the clock from that point :group 'org-clock :type 'boolean) +(defcustom org-clock-persist nil + When non-nil, save the running clock when emacs is closed, and + resume it next time emacs is started. + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-file ~/.emacs.d/org-clock-save.el + File to save clock data to + :group 'org-clock + :type 'string) + +(defcustom org-clock-persist-query-save nil + When non-nil, ask before saving the current clock on exit + :group 'org-clock + :type 'boolean) + +(defcustom org-clock-persist-query-resume t + When non-nil, ask before resuming any stored clock during +load. + :group 'org-clock + :type 'boolean) + ;;; The clock for measuring work time. (defvar org-mode-line-string ) @@ -989,6 +1011,74 @@ the currently selected interval size. lines) \n +(defun org-clock-save () + Persist various clock-related data to disk + (with-current-buffer (find-file (expand-file-name org-clock-persist-file)) +(progn (delete-region (point-min) (point-max)) + ;;Store clock + (insert (format ;; org-persist.el - %s at %s\n system-name (time-stamp-string))) + (if (and org-clock-persist (marker-buffer org-clock-marker) + (or (not org-clock-persist-query-save) + (y-or-n-p (concat Save current clock ( + (substring-no-properties org-clock-heading) + ) + (insert (setq resume-clock '(\ + (buffer-file-name (marker-buffer org-clock-marker)) + \ . (int-to-string (marker-position org-clock-marker)) + ))\n)) + ;;Store clocked task history. Tasks are stored reversed to make + ;;reading simpler + (if org-clock-history + (insert (setq stored-clock-history '( + (mapconcat + (lambda (m) + (when (marker-buffer m) + (concat (\ (buffer-file-name (marker-buffer m)) + \ . (int-to-string (marker-position m)) + + (reverse org-clock-history) ) ))\n)) + (save-buffer) + (kill-buffer (current-buffer) + +(defvar org-clock-loaded nil) + +(defun org-clock-load () + Load various clock-related data from disk, optionally resuming +a stored clock + (if (not org-clock-loaded) + (let ((filename (expand-file-name org-clock-persist-file)) + (org-clock-in-resume t)) + (if (file-readable-p filename) + (progn + (message %s Restoring clock data) + (setq org-clock-loaded t) + (load-file filename) + ;; load history + (if (boundp 'stored-clock-history) +