[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Orgmode] [PATCH 3/3] Add clock persistence.
From: |
Helge Gudmundsen |
Subject: |
Re: [Orgmode] [PATCH 3/3] Add clock persistence. |
Date: |
Tue, 28 Oct 2008 11:10:57 +0000 |
For my (admittedly simple) test cases, so far it looks good. Thanks.
--
helge
On Tue, Oct 28, 2008 at 7:33 AM, Carsten Dominik <address@hidden> 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 <address@hidden>
>
> 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 (task)
> + (org-clock-history-push (cdr task)
> + (find-file (car task))))
> + stored-clock-history)))
> + ;; resume clock
> + (if (and (boundp 'resume-clock) org-clock-persist
> + (or (not org-clock-persist-query-resume)
> + (y-or-n-p "Resume clock ("
> + (with-current-buffer (find-file (car resume-clock))
> + (progn (goto-char (cdr resume-clock))
> + (looking-at org-complex-heading-regexp)
> + (match-string 4))) ")")))
> + (with-current-buffer (find-file (car resume-clock))
> + (progn (goto-char (cdr resume-clock))
> + (org-clock-in)))))
> + (message "Not restoring clock data; %s not found"
> + org-clock-persist-file)))))
> +
> +(defun org-clock-persistence-insinuate ()
> + "Set up hooks for clock persistence"
> + (add-hook 'org-mode-hook 'org-clock-load)
> + (add-hook 'kill-emacs-hook 'org-clock-save))
> +
> (provide 'org-clock)
>
> ;; arch-tag: 7b42c5d4-9b36-48be-97c0-66a869daed4c
> --
> 1.5.6.5
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
- Re: [Orgmode] [PATCH] Allow storing clock status between emacs sessions., (continued)
- Re: [Orgmode] [PATCH] Allow storing clock status between emacs sessions., Carsten Dominik, 2008/10/22
- Re: [Orgmode] [PATCH] Allow storing clock status between emacs sessions., Helge Gudmundsen, 2008/10/22
- Re: [Orgmode] [PATCH] Allow storing clock status between emacs sessions., James TD Smith, 2008/10/22
- Re: [Orgmode] [PATCH] Allow storing clock status between emacs sessions., Carsten Dominik, 2008/10/22
- [Orgmode] [PATCH 0/3] Split my clock resume/clock persistence patch, James TD Smith, 2008/10/23
- [Orgmode] [PATCH 1/3] Fix some typos and duplication in the ChangeLog, James TD Smith, 2008/10/23
- [Orgmode] [PATCH 2/3] Add clock resuming., James TD Smith, 2008/10/23
- [Orgmode] [PATCH 2/3] Add clock resuming., James TD Smith, 2008/10/23
- [Orgmode] [PATCH 3/3] Add clock persistence., James TD Smith, 2008/10/23
- Re: [Orgmode] [PATCH 3/3] Add clock persistence., Carsten Dominik, 2008/10/28
- Re: [Orgmode] [PATCH 3/3] Add clock persistence.,
Helge Gudmundsen <=
- Re: [Orgmode] [PATCH 1/3] Fix some typos and duplication in the ChangeLog, Carsten Dominik, 2008/10/24
Re: [Orgmode] [PATCH] Bugfix in org-add-log-setup., Carsten Dominik, 2008/10/20