From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kai Tetzlaff Subject: Re: [PATCH] Avoid losing persisted clock data when exiting emac without loading org-mode Date: Sat, 24 Oct 2009 20:40:36 +0200 Message-ID: <4AE34A24.2030608@gmx.de> References: <468CEFF9-A1C3-4888-83B6-066F2129087D@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040602080100060108010403" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N1lXo-0004EF-KD for emacs-orgmode@gnu.org; Sat, 24 Oct 2009 14:40:52 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N1lXk-0004Ci-TV for emacs-orgmode@gnu.org; Sat, 24 Oct 2009 14:40:52 -0400 Received: from [199.232.76.173] (port=53646 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N1lXj-0004Bl-Iq for emacs-orgmode@gnu.org; Sat, 24 Oct 2009 14:40:48 -0400 Received: from moutng.kundenserver.de ([212.227.17.10]:55555) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1N1lXi-0002zE-Ad for emacs-orgmode@gnu.org; Sat, 24 Oct 2009 14:40:46 -0400 In-Reply-To: <468CEFF9-A1C3-4888-83B6-066F2129087D@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Carsten Dominik Cc: emacs-orgmode@gnu.org This is a multi-part message in MIME format. --------------040602080100060108010403 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Carsten Dominik wrote: > Hi Kai, >=20 >=20 > On Oct 23, 2009, at 9:01 AM, Kai Tetzlaff wrote: >=20 >> Hi, >> >> i noticed that when using the org-mode clock persistence, the stored >> clock data gets deleted when i start emacs and exit again without >> turning on org-mode in between. >> >> When looking at org-clock-persistence-insinuate it looks like org-cloc= k >> load will only run after org-mode gets started whereas org-clock-save >> will always be called when exiting emacs: >> >> (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)) >> >> Not running org-mode-hook (i.e. not starting org-mode) thus does not >> load clock data but org-clock-save overwrites any prviously saved data >> when exiting emacs. >> >> An easy fix for that would be to just add org-clock-load to e.g. >> emacs-startup-hook. But this will only work if the code in >> org-clock-load does not depend on any org-mode initialization code (or >> would require loading org-mode). >> >> So org-clock-save should probably check if org-clock-load has been >> running during the current emacs session (or if clock persistence was >> just enabled) and only then save clock data when exiting emacs. I trie= d >> to add this to the code in org-clock-save: >> >> diff --git a/lisp/org-clock.el b/lisp/org-clock.el >> index c7ebbf8..c0fe4e6 100644 >> --- a/lisp/org-clock.el >> +++ b/lisp/org-clock.el >> @@ -1803,7 +1803,8 @@ This function is made for clock tables." >> "Persist various clock-related data to disk. >> The details of what will be saved are regulated by the variable >> `org-clock-persist'." >> - (when org-clock-persist >> + (when (and org-clock-persist >> + (or org-clock-loaded (not (file-exists-p >> org-clock-persist-file)))) >> (let (b) >> (with-current-buffer (find-file (expand-file-name >> org-clock-persist-file)) >> (progn >> >> >> /Kai >> >=20 > I see you point, but I am not convinced that you fix is the right one.=20 > What one really wants to do is save the clock and history if and only i= f > the clock has been used in the current session. So I guess it is bette= r > to create a special variable org-clock-used-in-this-session which then > will be set to t each time clock-in starts a clock somewhere. I believ= e > this would be a better insurance policy. > > Would you like to try your hand at a patch in this spirit? Ok, i've attached a new path which uses the suggested approach. I wasn't exactly sure about where to set org-clock-used-in-this-session to t. It's now done right at the end of org-clock-in, just before running hooks in org-clock-in-hook. I've done a couple of (simple) tests and it works fine for me. /Kai > - Carsten >=20 >> _______________________________________________ >> 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 >=20 > - Carsten >=20 >=20 >=20 >=20 --------------040602080100060108010403 Content-Type: text/plain; name="clock-save.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="clock-save.patch" diff --git a/lisp/org-clock.el b/lisp/org-clock.el index b1041e2..467ffc4 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -244,6 +244,7 @@ to add an effort property.") (defvar org-clock-heading "") (defvar org-clock-heading-for-remember "") (defvar org-clock-start-time "") +(defvar org-clock-used-in-this-session nil) =20 (defvar org-clock-left-over-time nil "If non-nil, user cancelled a clock; this is when leftover time starte= d.") @@ -953,6 +954,7 @@ the clocking selection, associated with the letter `d= '." (setq org-clock-idle-timer (run-with-timer 60 60 'org-resolve-clocks-if-idle)) (message "Clock starts at %s - %s" ts msg-extra) + (setq org-clock-used-in-this-session t) (run-hooks 'org-clock-in-hook))))))) =20 (defun org-clock-mark-default-task () @@ -1824,7 +1826,7 @@ This function is made for clock tables." "Persist various clock-related data to disk. The details of what will be saved are regulated by the variable `org-clock-persist'." - (when org-clock-persist + (when (and org-clock-persist org-clock-used-in-this-session) (let (b) (with-current-buffer (find-file (expand-file-name org-clock-persis= t-file)) (progn --------------040602080100060108010403 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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 --------------040602080100060108010403--