From: "Helge Gudmundsen" <helge.gudmundsen@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: [PATCH 3/3] Add clock persistence.
Date: Tue, 28 Oct 2008 11:10:57 +0000 [thread overview]
Message-ID: <8a82135a0810280410h53abe9f8ja803b3873ba6ae@mail.gmail.com> (raw)
In-Reply-To: <8FB9E9DE-F92A-4F6E-B130-FCA6F61D0FF9@uva.nl>
For my (admittedly simple) test cases, so far it looks good. Thanks.
--
helge
On Tue, Oct 28, 2008 at 7:33 AM, Carsten Dominik <dominik@uva.nl> 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 <dominik@science.uva.nl>
>
> 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.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>
>
next prev parent reply other threads:[~2008-10-28 11:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-19 16:22 [PATCH] Bugfix in org-add-log-setup James TD Smith
2008-10-19 16:22 ` [PATCH] Allow storing clock status between emacs sessions James TD Smith
2008-10-20 15:42 ` Helge Gudmundsen
2008-10-22 8:45 ` Helge Gudmundsen
2008-10-22 9:18 ` Carsten Dominik
2008-10-22 9:25 ` Helge Gudmundsen
2008-10-22 9:42 ` James TD Smith
2008-10-22 15:23 ` Carsten Dominik
2008-10-23 10:27 ` [PATCH 0/3] Split my clock resume/clock persistence patch James TD Smith
2008-10-23 10:27 ` [PATCH 1/3] Fix some typos and duplication in the ChangeLog James TD Smith
2008-10-23 10:27 ` [PATCH 2/3] Add clock resuming James TD Smith
2008-10-23 10:27 ` James TD Smith
2008-10-23 10:28 ` [PATCH 3/3] Add clock persistence James TD Smith
2008-10-28 7:33 ` Carsten Dominik
2008-10-28 11:10 ` Helge Gudmundsen [this message]
2008-10-24 4:55 ` [PATCH 1/3] Fix some typos and duplication in the ChangeLog Carsten Dominik
2008-10-20 5:46 ` [PATCH] Bugfix in org-add-log-setup Carsten Dominik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8a82135a0810280410h53abe9f8ja803b3873ba6ae@mail.gmail.com \
--to=helge.gudmundsen@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).