Re: [Orgmode] [PATCH 3/3] Add clock persistence.

2008-10-28 Thread Carsten Dominik

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.

2008-10-28 Thread Helge Gudmundsen
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.

2008-10-23 Thread James TD Smith
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)
+