unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: desktop.el: autosave?
       [not found] <alpine.DEB.0.99999.0711301407250.4037@localhost.localdomain>
@ 2007-11-30 23:35 ` Richard Stallman
  2007-12-01  0:35   ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-11-30 23:35 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: emacs-devel

auto-save-hook could do this job.

Date: Fri, 30 Nov 2007 14:08:07 +0000 (GMT)
From: Reuben Thomas <rrt@sc3d.org>
To: bug-emacs@gnu.org
Message-ID: <alpine.DEB.0.99999.0711301407250.4037@localhost.localdomain>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
Cc: 
Subject: desktop.el: autosave?

desktop.el is great; I've used it since before it became part of Emacs.

However, I sometimes lose my Emacs session for various reasons (hardly ever 
because of Emacs itself, usually for some stupid reason like updating a 
kernel, and then suspending instead of rebooting). When I come back, I get 
my old Emacs session. Of course, the files I'm editing all have auto-saved 
copies, if I need them. It would be nice if desktop mode could similarly 
write a desktop save file from time to time during the editing session so 
that if like me, you leave Emacs running all the time, you don't risk going 
back to a collection of files days or weeks out of date should you lose your 
Emacs session.

Since desktop already does things when Emacs is idle, it seems to me (I admit I 
know nothing about this area of programming Emacs, I've only dabbled in elisp 
to the extent I need to to customize Emacs) that it should be fairly simple to 
add the ability to save out a new desktop save file from time to time when 
Emacs is idle. I imagine the period would be customizable, but every half hour 
or so would seem to be the right order of default.

-- 
http://rrt.sc3d.org/ | The Next Station Is Oval (Anon)

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-11-30 23:35 ` desktop.el: autosave? Richard Stallman
@ 2007-12-01  0:35   ` Juri Linkov
  2007-12-01 23:41     ` Richard Stallman
  2007-12-03 21:14     ` Reuben Thomas
  0 siblings, 2 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-01  0:35 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, Reuben Thomas

> auto-save-hook could do this job.

I use in .emacs:

  (defun my-desktop-save ()
    (interactive)
    ;; `desktop-owner' is a new function in Emacs 22.1.50 to check
    ;; for conflicts between two running Emacs instances.
    ;; We don't want automatic saving in the second Emacs process.
    (if (and (fboundp 'desktop-owner) (eq (desktop-owner) (emacs-pid)))
        (desktop-save "~")))

  ;; Save the desktop every hour
  (run-at-time 3600 3600 'my-desktop-save)

But maybe instead of requiring putting this code in .emacs for
every user who want to save the desktop periodically, we should
add a new user option to desktop.el that specifies time interval
of auto-saving?  I think the default value of `auto-save-timeout'
is too frequent for a heavy function `desktop-save'.  And also
standard auto-saving mechanism works on files, but the desktop
doesn't keep the desktop file permanently visited.

> Date: Fri, 30 Nov 2007 14:08:07 +0000 (GMT)
> From: Reuben Thomas <rrt@sc3d.org>
> To: bug-emacs@gnu.org
> Message-ID: <alpine.DEB.0.99999.0711301407250.4037@localhost.localdomain>
> MIME-Version: 1.0
> Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
> Cc:
> Subject: desktop.el: autosave?
>
> desktop.el is great; I've used it since before it became part of Emacs.
>
> However, I sometimes lose my Emacs session for various reasons (hardly ever
> because of Emacs itself, usually for some stupid reason like updating a
> kernel, and then suspending instead of rebooting). When I come back, I get
> my old Emacs session. Of course, the files I'm editing all have auto-saved
> copies, if I need them. It would be nice if desktop mode could similarly
> write a desktop save file from time to time during the editing session so
> that if like me, you leave Emacs running all the time, you don't risk going
> back to a collection of files days or weeks out of date should you lose your
> Emacs session.
>
> Since desktop already does things when Emacs is idle, it seems to me (I admit I
> know nothing about this area of programming Emacs, I've only dabbled in elisp
> to the extent I need to to customize Emacs) that it should be fairly simple to
> add the ability to save out a new desktop save file from time to time when
> Emacs is idle. I imagine the period would be customizable, but every half hour
> or so would seem to be the right order of default.
>
> --
> http://rrt.sc3d.org/ | The Next Station Is Oval (Anon)

--
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-01  0:35   ` Juri Linkov
@ 2007-12-01 23:41     ` Richard Stallman
  2007-12-03 22:57       ` Juri Linkov
  2007-12-03 21:14     ` Reuben Thomas
  1 sibling, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-12-01 23:41 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rrt, emacs-devel

    But maybe instead of requiring putting this code in .emacs for
    every user who want to save the desktop periodically, we should
    add a new user option to desktop.el that specifies time interval
    of auto-saving?

I agree, we should add some such feature.

		     I think the default value of `auto-save-timeout'
    is too frequent for a heavy function `desktop-save'.

Maybe so, but auto-saving based on idle time is an important feature.
Whatever we write for automatically saving the desktop should also
include a feature to do it after a certain amount of idle time,
perhaps 5 mins by default.  That way, if you occasionally take typing
breaks, Emacs will never interrupt your actual work to save the desktop.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-01  0:35   ` Juri Linkov
  2007-12-01 23:41     ` Richard Stallman
@ 2007-12-03 21:14     ` Reuben Thomas
  2007-12-03 22:57       ` Juri Linkov
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-03 21:14 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rms, emacs-devel

On Sat, 1 Dec 2007, Juri Linkov wrote:

> I use in .emacs:
>
>  (defun my-desktop-save ()
>    (interactive)
>    ;; `desktop-owner' is a new function in Emacs 22.1.50 to check
>    ;; for conflicts between two running Emacs instances.
>    ;; We don't want automatic saving in the second Emacs process.
>    (if (and (fboundp 'desktop-owner) (eq (desktop-owner) (emacs-pid)))
>        (desktop-save "~")))

Why did you not use desktop-save-in-desktop-dir?

I use stable Emacs so I won't get the benefit of desktop-owner, but thanks 
for writing it so I will automagically as soon as it exists in stable!

-- 
http://rrt.sc3d.org/ | The yak is slow but the earth is patient (LucasArts)

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-03 21:14     ` Reuben Thomas
@ 2007-12-03 22:57       ` Juri Linkov
  2007-12-06 14:56         ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-03 22:57 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: rms, emacs-devel

>> I use in .emacs:
>>  (defun my-desktop-save ()
>>    (interactive)
>>    ;; `desktop-owner' is a new function in Emacs 22.1.50 to check
>>    ;; for conflicts between two running Emacs instances.
>>    ;; We don't want automatic saving in the second Emacs process.
>>    (if (and (fboundp 'desktop-owner) (eq (desktop-owner) (emacs-pid)))
>>        (desktop-save "~")))
>
> Why did you not use desktop-save-in-desktop-dir?

This was enough for .emacs, but for desktop.el a proper variable
to save the desktop in is surely `desktop-dirname'.  Even though
`desktop-save-in-desktop-dir' is a method that does this, I think we
can't use it, because when `desktop-dirname' is nil initially, it asks
in the minibuffer where to save the desktop (by using `call-interactively'),
but this is not a good thing to do in a function called by a timer.
Perhaps it should do nothing when called by a timer and `desktop-dirname'
is nil.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-01 23:41     ` Richard Stallman
@ 2007-12-03 22:57       ` Juri Linkov
  2007-12-04  7:39         ` martin rudalics
                           ` (2 more replies)
  0 siblings, 3 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-03 22:57 UTC (permalink / raw)
  To: rms; +Cc: rrt, emacs-devel

>     But maybe instead of requiring putting this code in .emacs for
>     every user who want to save the desktop periodically, we should
>     add a new user option to desktop.el that specifies time interval
>     of auto-saving?
>
> I agree, we should add some such feature.
>
> 		     I think the default value of `auto-save-timeout'
>     is too frequent for a heavy function `desktop-save'.
>
> Maybe so, but auto-saving based on idle time is an important feature.
> Whatever we write for automatically saving the desktop should also
> include a feature to do it after a certain amount of idle time,
> perhaps 5 mins by default.  That way, if you occasionally take typing
> breaks, Emacs will never interrupt your actual work to save the desktop.

I'm not sure an idle timer is good for this feature.  I want to auto-save
the desktop at quite long time intervals (an hour or so), but usually
Emacs is not idle for this time.  So it seems we need a non-idle timer.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-03 22:57       ` Juri Linkov
@ 2007-12-04  7:39         ` martin rudalics
  2007-12-05  2:57           ` Richard Stallman
  2007-12-04 16:55         ` Richard Stallman
  2007-12-06 14:58         ` Reuben Thomas
  2 siblings, 1 reply; 56+ messages in thread
From: martin rudalics @ 2007-12-04  7:39 UTC (permalink / raw)
  To: Juri Linkov; +Cc: emacs-devel, rms, rrt

> I'm not sure an idle timer is good for this feature.  I want to auto-save
> the desktop at quite long time intervals (an hour or so), but usually
> Emacs is not idle for this time.  So it seems we need a non-idle timer.

Two timers?  The non-idle one triggers (after an hour or so) an idle one.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-03 22:57       ` Juri Linkov
  2007-12-04  7:39         ` martin rudalics
@ 2007-12-04 16:55         ` Richard Stallman
  2007-12-06 14:58         ` Reuben Thomas
  2 siblings, 0 replies; 56+ messages in thread
From: Richard Stallman @ 2007-12-04 16:55 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rrt, emacs-devel

    I'm not sure an idle timer is good for this feature.  I want to auto-save
    the desktop at quite long time intervals (an hour or so), but usually
    Emacs is not idle for this time.  So it seems we need a non-idle timer.

I think we need an idle timer and a clock timer both,
just as we have for auto-save.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-04  7:39         ` martin rudalics
@ 2007-12-05  2:57           ` Richard Stallman
  2007-12-05  9:02             ` martin rudalics
  0 siblings, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-12-05  2:57 UTC (permalink / raw)
  To: martin rudalics; +Cc: juri, emacs-devel, rrt

    > I'm not sure an idle timer is good for this feature.  I want to auto-save
    > the desktop at quite long time intervals (an hour or so), but usually
    > Emacs is not idle for this time.  So it seems we need a non-idle timer.

    Two timers?  The non-idle one triggers (after an hour or so) an idle one.

That's a strange idea.  My idea is that they both trigger saving.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05  2:57           ` Richard Stallman
@ 2007-12-05  9:02             ` martin rudalics
  2007-12-05 22:28               ` Juri Linkov
  2007-12-06  2:11               ` Richard Stallman
  0 siblings, 2 replies; 56+ messages in thread
From: martin rudalics @ 2007-12-05  9:02 UTC (permalink / raw)
  To: rms; +Cc: juri, emacs-devel

>     > I'm not sure an idle timer is good for this feature.  I want to auto-save
>     > the desktop at quite long time intervals (an hour or so), but usually
>     > Emacs is not idle for this time.  So it seems we need a non-idle timer.
> 
>     Two timers?  The non-idle one triggers (after an hour or so) an idle one.
> 
> That's a strange idea.  

It occurred to me because Juri wanted to auto-save the desktop only
every hour.  Hence, I'd first wait for an hour and then until Emacs
has become idle for at least five minutes.

> My idea is that they both trigger saving.

Wouldn't it be sufficient to have one idle timer which triggers
auto-saving only if some timeout has elapsed sine the last auto-save
of the desktop?

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05  9:02             ` martin rudalics
@ 2007-12-05 22:28               ` Juri Linkov
  2007-12-05 23:09                 ` martin rudalics
  2007-12-06  2:11               ` Richard Stallman
  1 sibling, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-05 22:28 UTC (permalink / raw)
  To: martin rudalics; +Cc: rms, emacs-devel

>>     > I'm not sure an idle timer is good for this feature.  I want to
>>     > auto-save the desktop at quite long time intervals (an hour or
>>     > so), but usually Emacs is not idle for this time.  So it seems
>>     > we need a non-idle timer.
>>
>>     Two timers?  The non-idle one triggers (after an hour or so) an idle one.
>>
>> That's a strange idea.
>
> It occurred to me because Juri wanted to auto-save the desktop only
> every hour.  Hence, I'd first wait for an hour and then until Emacs
> has become idle for at least five minutes.

Yes, having two parallel timers with an idle timer run with a short delay
will save the desktop too often which is undesirable.  So your idea is
reasonable unless there is a more suitable solution with using just one timer.

>> My idea is that they both trigger saving.
>
> Wouldn't it be sufficient to have one idle timer which triggers
> auto-saving only if some timeout has elapsed since the last auto-save
> of the desktop?

It seems this is not possible with idle timers because they use timeout
elapsed since the last user input, not the last time they run.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05 22:28               ` Juri Linkov
@ 2007-12-05 23:09                 ` martin rudalics
  2007-12-05 23:41                   ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: martin rudalics @ 2007-12-05 23:09 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rms, emacs-devel

>>Wouldn't it be sufficient to have one idle timer which triggers
>>auto-saving only if some timeout has elapsed since the last auto-save
>>of the desktop?
> 
> 
> It seems this is not possible with idle timers because they use timeout
> elapsed since the last user input, not the last time they run.

Ahh no.  I meant using an extra variable which records the last autosave
date.  Whenever the routine triggered by the idle timer detects that the
period (one hour ...) has elapsed (by comparing that variable's value
with the present time) it does autosave and reset that variable.  This
would only fail when an idle time starts before the autosave timeout has
expired and terminates long after that.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05 23:09                 ` martin rudalics
@ 2007-12-05 23:41                   ` Juri Linkov
  2007-12-06 15:12                     ` Richard Stallman
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-05 23:41 UTC (permalink / raw)
  To: martin rudalics; +Cc: rms, emacs-devel

>>>Wouldn't it be sufficient to have one idle timer which triggers
>>>auto-saving only if some timeout has elapsed since the last auto-save
>>>of the desktop?
>>
>> It seems this is not possible with idle timers because they use timeout
>> elapsed since the last user input, not the last time they run.
>
> Ahh no.  I meant using an extra variable which records the last autosave
> date.  Whenever the routine triggered by the idle timer detects that the
> period (one hour ...) has elapsed (by comparing that variable's value
> with the present time) it does autosave and reset that variable.  This
> would only fail when an idle time starts before the autosave timeout has
> expired and terminates long after that.

Yes, this is not a reliable solution since an idle timer may fail to run
at the requested time.  I think your first idea is better.

I wonder why standard timers don't do something like that: run a function
after a long timeout (e.g. several minutes) but only if Emacs is idle for
a few seconds.  This looks like an useful behavior.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05  9:02             ` martin rudalics
  2007-12-05 22:28               ` Juri Linkov
@ 2007-12-06  2:11               ` Richard Stallman
  2007-12-06 23:29                 ` Juri Linkov
  1 sibling, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-12-06  2:11 UTC (permalink / raw)
  To: martin rudalics; +Cc: juri, emacs-devel

    It occurred to me because Juri wanted to auto-save the desktop only
    every hour.  Hence, I'd first wait for an hour and then until Emacs
    has become idle for at least five minutes.

One cannot argue with tastes, but one drawback is that if he never
takes a 5-minute break, it will never auto-save the desktop.

That's why I suggest auto-saving whenever Emacs is idle for N minutes
_or_ H hours have elapsed since the last save.  If you take breaks
often enough, it will save in the breaks and only in the breaks.
But if you don't take breaks, it will eventually save anyway.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-03 22:57       ` Juri Linkov
@ 2007-12-06 14:56         ` Reuben Thomas
  0 siblings, 0 replies; 56+ messages in thread
From: Reuben Thomas @ 2007-12-06 14:56 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rms, emacs-devel

On Tue, 4 Dec 2007, Juri Linkov wrote:

>>> I use in .emacs:
>>>  (defun my-desktop-save ()
>>>    (interactive)
>>>    ;; `desktop-owner' is a new function in Emacs 22.1.50 to check
>>>    ;; for conflicts between two running Emacs instances.
>>>    ;; We don't want automatic saving in the second Emacs process.
>>>    (if (and (fboundp 'desktop-owner) (eq (desktop-owner) (emacs-pid)))
>>>        (desktop-save "~")))
>>
>> Why did you not use desktop-save-in-desktop-dir?
>
> This was enough for .emacs, but for desktop.el a proper variable
> to save the desktop in is surely `desktop-dirname'.  Even though
> `desktop-save-in-desktop-dir' is a method that does this, I think we
> can't use it, because when `desktop-dirname' is nil initially, it asks
> in the minibuffer where to save the desktop (by using `call-interactively'),
> but this is not a good thing to do in a function called by a timer.

> Perhaps it should do nothing when called by a timer and `desktop-dirname'
> is nil.

Seems sensible, but can't you achieve this result by having the timer call 
my-desktop-save non-interactively?

-- 
http://rrt.sc3d.org/ | Astrophysics: it's not exactly rocket science

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-03 22:57       ` Juri Linkov
  2007-12-04  7:39         ` martin rudalics
  2007-12-04 16:55         ` Richard Stallman
@ 2007-12-06 14:58         ` Reuben Thomas
  2007-12-06 15:38           ` tomas
  2 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-06 14:58 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rms, emacs-devel

On Tue, 4 Dec 2007, Juri Linkov wrote:

> I'm not sure an idle timer is good for this feature.  I want to auto-save
> the desktop at quite long time intervals (an hour or so), but usually
> Emacs is not idle for this time.  So it seems we need a non-idle timer.

Why do you want to save at such long intervals? Is there a performance 
problem with just using the idle timer? I can't say I've noticed the impact 
on my fairly modest system (1GHz laptop) by simply autosave-hook. Or is 
there some positive reason for wanting to save at much longer intervals?

-- 
http://rrt.sc3d.org/ | maxim, n.  wisdom for fools

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-05 23:41                   ` Juri Linkov
@ 2007-12-06 15:12                     ` Richard Stallman
  0 siblings, 0 replies; 56+ messages in thread
From: Richard Stallman @ 2007-12-06 15:12 UTC (permalink / raw)
  To: Juri Linkov; +Cc: rudalics, emacs-devel

    I wonder why standard timers don't do something like that: run a function
    after a long timeout (e.g. several minutes) but only if Emacs is idle for
    a few seconds.  This looks like an useful behavior.

What standard timers do now is a basic and useful behavior.
It would not be right to replace that with something more
complex which can be implemented on top of the existing behavior.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 14:58         ` Reuben Thomas
@ 2007-12-06 15:38           ` tomas
  2007-12-06 15:47             ` Reuben Thomas
  2007-12-07 17:18             ` Richard Stallman
  0 siblings, 2 replies; 56+ messages in thread
From: tomas @ 2007-12-06 15:38 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: Juri Linkov, rms, emacs-devel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, Dec 06, 2007 at 02:58:42PM +0000, Reuben Thomas wrote:
> On Tue, 4 Dec 2007, Juri Linkov wrote:
> 
> >I'm not sure an idle timer is good for this feature.  I want to auto-save
> >the desktop at quite long time intervals [...]

> Why do you want to save at such long intervals? Is there a performance 
> problem with just using the idle timer? [...]

Disk spin-up on laaptops comes to mind. The longer the intervals the
longer bettery (and disk!) life.

Regards
- -- tomás
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFHWBdeBcgs9XrR2kYRAu4FAJ96TJ6xjgYP7qxE39oUtwJRgWUavgCfWyFl
v/4WF/cpxps1ESvZoIkY1LA=
=2oyb
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 15:38           ` tomas
@ 2007-12-06 15:47             ` Reuben Thomas
  2007-12-06 23:28               ` Juri Linkov
  2007-12-07 17:18             ` Richard Stallman
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-06 15:47 UTC (permalink / raw)
  To: tomas; +Cc: Juri Linkov, rms, emacs-devel

On Thu, 6 Dec 2007, tomas@tuxteam.de wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Thu, Dec 06, 2007 at 02:58:42PM +0000, Reuben Thomas wrote:
>> On Tue, 4 Dec 2007, Juri Linkov wrote:
>>
>>> I'm not sure an idle timer is good for this feature.  I want to auto-save
>>> the desktop at quite long time intervals [...]
>
>> Why do you want to save at such long intervals? Is there a performance
>> problem with just using the idle timer? [...]
>
> Disk spin-up on laaptops comes to mind. The longer the intervals the
> longer bettery (and disk!) life.

That argument applies to any auto-save, not just desktop. I'm trying to work 
out why one would want one interval for auto-save and another for desktop 
save.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 15:47             ` Reuben Thomas
@ 2007-12-06 23:28               ` Juri Linkov
  2007-12-06 23:44                 ` Reuben Thomas
  2007-12-07  2:47                 ` Stefan Monnier
  0 siblings, 2 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-06 23:28 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, rms, emacs-devel

>>>> I'm not sure an idle timer is good for this feature.  I want to auto-save
>>>> the desktop at quite long time intervals [...]
>>
>>> Why do you want to save at such long intervals? Is there a performance
>>> problem with just using the idle timer? [...]
>>
>> Disk spin-up on laaptops comes to mind. The longer the intervals the
>> longer bettery (and disk!) life.
>
> That argument applies to any auto-save, not just desktop. I'm trying to
> work out why one would want one interval for auto-save and another for
> desktop save.

Saving a buffer's file is fast operation comparing to saving the desktop
that takes more time because it is a cpu-intensive task that collects
information from all buffers and some possibly long lists and writes
to the usually large desktop file.  The default timeout for auto-save
is 30 sec which is ok for auto-saving normal files, but I don't see a
need to waste resources to save the desktop so often.

I have no serious problems with short intervals, but some users may have
for various reasons (low memory that causes reading from the swap space
when collecting data to save to the desktop file, slow disk access, etc.).
So users may want to increase the timeout for the idle timer.  But the main
problem with idle timers is that with long intervals they may never run.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06  2:11               ` Richard Stallman
@ 2007-12-06 23:29                 ` Juri Linkov
  0 siblings, 0 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-06 23:29 UTC (permalink / raw)
  To: rms; +Cc: martin rudalics, emacs-devel

>     It occurred to me because Juri wanted to auto-save the desktop only
>     every hour.  Hence, I'd first wait for an hour and then until Emacs
>     has become idle for at least five minutes.
>
> One cannot argue with tastes, but one drawback is that if he never
> takes a 5-minute break, it will never auto-save the desktop.

Martin's idea would work if the idle timer's timeout is proportional to
the time required to save the desktop (a few seconds).  So the algorithm
would be the following: at large intervals (tens of minutes) a non-idle
timer will start an idle timer to wait for appropriate time within the
next few seconds of idle time.  The reason is that when saving the desktop
requires e.g. 1 sec then after 5 sec of idle time it is likely that it
finishes saving before the user notices the delay caused by saving.

> That's why I suggest auto-saving whenever Emacs is idle for N minutes
> _or_ H hours have elapsed since the last save.  If you take breaks
> often enough, it will save in the breaks and only in the breaks.
> But if you don't take breaks, it will eventually save anyway.

If the idea above is not acceptable then having two separate timers with
separately configured timeouts is not bad, because when necessary the user
can disable one of the two timers.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 23:28               ` Juri Linkov
@ 2007-12-06 23:44                 ` Reuben Thomas
  2007-12-07  0:03                   ` Juri Linkov
  2007-12-07  2:47                 ` Stefan Monnier
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-06 23:44 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, rms, emacs-devel

On Fri, 7 Dec 2007, Juri Linkov wrote:

> Saving a buffer's file is fast operation comparing to saving the desktop
> that takes more time because it is a cpu-intensive task that collects
> information from all buffers and some possibly long lists and writes
> to the usually large desktop file.  The default timeout for auto-save
> is 30 sec which is ok for auto-saving normal files, but I don't see a
> need to waste resources to save the desktop so often.

It's easy to argue about this, but numbers are more convincing. I don't know 
anything about instrumenting functions in Emacs; how can I find out how long 
Emacs spends running desktop-save over a particular time period?

> But the main problem with idle timers is that with long intervals they may 
> never run.

So don't use long intervals: if the computer is idle anyway, why does it 
matter if Emacs does some work? Or does "idle" only apply to Emacs?

-- 
http://rrt.sc3d.org/ | Travail broadens the behind

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 23:44                 ` Reuben Thomas
@ 2007-12-07  0:03                   ` Juri Linkov
  2007-12-07  2:48                     ` Stefan Monnier
  2007-12-09 20:35                     ` Reuben Thomas
  0 siblings, 2 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-07  0:03 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, rms, emacs-devel

>> Saving a buffer's file is fast operation comparing to saving the desktop
>> that takes more time because it is a cpu-intensive task that collects
>> information from all buffers and some possibly long lists and writes
>> to the usually large desktop file.  The default timeout for auto-save
>> is 30 sec which is ok for auto-saving normal files, but I don't see a
>> need to waste resources to save the desktop so often.
>
> It's easy to argue about this, but numbers are more convincing. I don't
> know anything about instrumenting functions in Emacs; how can I find out
> how long Emacs spends running desktop-save over a particular time period?

You can evaluate:

(let ((start (float-time))) (desktop-save desktop-dirname) (- (float-time) start))

that returns a number of seconds spent for desktop saving.

>> But the main problem with idle timers is that with long intervals they
>> may never run.
>
> So don't use long intervals: if the computer is idle anyway, why does it
> matter if Emacs does some work? Or does "idle" only apply to Emacs?

"Idle" applies only to Emacs.  And if the user changes nothing in Emacs
during long idle periods it is redundant to write the same desktop file
without changes every 30 sec.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 23:28               ` Juri Linkov
  2007-12-06 23:44                 ` Reuben Thomas
@ 2007-12-07  2:47                 ` Stefan Monnier
  1 sibling, 0 replies; 56+ messages in thread
From: Stefan Monnier @ 2007-12-07  2:47 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel, rms, Reuben Thomas

> Saving a buffer's file is fast operation comparing to saving the desktop
> that takes more time because it is a cpu-intensive task that collects
> information from all buffers and some possibly long lists and writes
> to the usually large desktop file.  The default timeout for auto-save
> is 30 sec which is ok for auto-saving normal files, but I don't see a
> need to waste resources to save the desktop so often.

I have a hard time believing that it's so "CPU intensive".
Collecting info about 100 buffers is a no brainer that should be done in
a tiny fraction of a second even on a 10 year old CPU.  As for "large
desktop file", how large are we talking about? anything smaller than
100KB is not large nowadays.

> I have no serious problems with short intervals, but some users may have
> for various reasons (low memory that causes reading from the swap space
> when collecting data to save to the desktop file, slow disk access, etc.).

When swapping, you might be better off using a short idle interval so as
to reduce the risk of the pages having been swapped out while "idling"
(i.e. while some other process ran).

> So users may want to increase the timeout for the idle timer.  But the main
> problem with idle timers is that with long intervals they may never run.

Worse yet: long interval means it will be run right when the machine is
idle, i.e. when the disk was spun down.  Better run it when the machine
is still "active" so there's a better chance that the drive is
already spinning.

On top of that, writing to a file does not necessarily imply spinning up
the disk, because the actual write might be delayed by the OS to save power.


        Stefan

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-07  0:03                   ` Juri Linkov
@ 2007-12-07  2:48                     ` Stefan Monnier
  2007-12-09 20:35                     ` Reuben Thomas
  1 sibling, 0 replies; 56+ messages in thread
From: Stefan Monnier @ 2007-12-07  2:48 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel, rms, Reuben Thomas

> And if the user changes nothing in Emacs during long idle periods it
> is redundant to write the same desktop file without changes every
> 30 sec.

That's a more serious issue, indeed.


        Stefan

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-06 15:38           ` tomas
  2007-12-06 15:47             ` Reuben Thomas
@ 2007-12-07 17:18             ` Richard Stallman
  1 sibling, 0 replies; 56+ messages in thread
From: Richard Stallman @ 2007-12-07 17:18 UTC (permalink / raw)
  To: tomas; +Cc: juri, emacs-devel, rrt

    > Why do you want to save at such long intervals? Is there a performance 
    > problem with just using the idle timer? [...]

    Disk spin-up on laaptops comes to mind. The longer the intervals the
    longer bettery (and disk!) life.

That is a valid argument.  So I guess it makes sense to have a certain
minimum time between saves, as well as a certain maximum time.
The minimum time could be implemented by a real time timer
which activates the idle timer.  The maximum time could be implemented
by another real time timer which directly causes a save.
When a save happens it should reinitialize all the timers

    That argument applies to any auto-save, not just desktop. I'm trying to work 
    out why one would want one interval for auto-save and another for desktop 
    save.

That is true.  Should we have this feature for auto-saves too?

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-07  0:03                   ` Juri Linkov
  2007-12-07  2:48                     ` Stefan Monnier
@ 2007-12-09 20:35                     ` Reuben Thomas
  2007-12-10  0:27                       ` Juri Linkov
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-09 20:35 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, rms, emacs-devel

On Fri, 7 Dec 2007, Juri Linkov wrote:

>>> Saving a buffer's file is fast operation comparing to saving the desktop
>>> that takes more time because it is a cpu-intensive task that collects
>>> information from all buffers and some possibly long lists and writes
>>> to the usually large desktop file.  The default timeout for auto-save
>>> is 30 sec which is ok for auto-saving normal files, but I don't see a
>>> need to waste resources to save the desktop so often.
>>
>> It's easy to argue about this, but numbers are more convincing. I don't
>> know anything about instrumenting functions in Emacs; how can I find out
>> how long Emacs spends running desktop-save over a particular time period?
>
> You can evaluate:
>
> (let ((start (float-time))) (desktop-save desktop-dirname) (- (float-time) start))

After about 30 hours, saving the desktop had accumulated about 50s of time 
this way. That seems a reasonable amount to me. I have 137 buffers in my 
session, and my desktop file is about 38,000 bytes long. Hence, I suggest 
that a simple feature "Auto-save desktop" which adds 
desktop-save-in-desktop-dir to auto-save-hook, would satisfy most people 
likely to use this feature. Furthermore those concerned about power usage 
and disk spin-up only have to worry about the same Emacs feature 
(auto-save-hook), and not add another hook or function to their list of 
things to tweak.

To ensure that this doesn't make auto-save-hook ask for input interactively, 
desktop-save-in-desktop-dir should be made only to prompt for the 
desktop-dir (when it's not set) if it's being run interactively.

-- 
http://rrt.sc3d.org/ | priest, n.  an unpaid lawyer (q.v.)

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-09 20:35                     ` Reuben Thomas
@ 2007-12-10  0:27                       ` Juri Linkov
  2007-12-10  0:35                         ` Reuben Thomas
  2007-12-10  3:03                         ` Stefan Monnier
  0 siblings, 2 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-10  0:27 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, rms, emacs-devel

> After about 30 hours, saving the desktop had accumulated about 50s of time
> this way. That seems a reasonable amount to me. I have 137 buffers in my
> session, and my desktop file is about 38,000 bytes long. Hence, I suggest
> that a simple feature "Auto-save desktop" which adds
> desktop-save-in-desktop-dir to auto-save-hook, would satisfy most people
> likely to use this feature. Furthermore those concerned about power usage
> and disk spin-up only have to worry about the same Emacs feature
> (auto-save-hook), and not add another hook or function to their list of
> things to tweak.

For users with small desktop files this simple solution could be
satisfactory.  Who doesn't like it, can disable auto-saving and
add a pair of lines to .emacs with an explicit non-idle timer.

A separate question is whether to auto-save the desktop using
auto-save-hook by default or not.  Perhaps not if it can cause
potential problems for users.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  0:27                       ` Juri Linkov
@ 2007-12-10  0:35                         ` Reuben Thomas
  2007-12-10  0:50                           ` Drew Adams
  2007-12-10  0:59                           ` Juri Linkov
  2007-12-10  3:03                         ` Stefan Monnier
  1 sibling, 2 replies; 56+ messages in thread
From: Reuben Thomas @ 2007-12-10  0:35 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, rms, emacs-devel

On Mon, 10 Dec 2007, Juri Linkov wrote:

>> After about 30 hours, saving the desktop had accumulated about 50s of time
>> this way. That seems a reasonable amount to me. I have 137 buffers in my
>> session, and my desktop file is about 38,000 bytes long. Hence, I suggest
>> that a simple feature "Auto-save desktop" which adds
>> desktop-save-in-desktop-dir to auto-save-hook, would satisfy most people
>> likely to use this feature. Furthermore those concerned about power usage
>> and disk spin-up only have to worry about the same Emacs feature
>> (auto-save-hook), and not add another hook or function to their list of
>> things to tweak.
>
> For users with small desktop files this simple solution could be
> satisfactory.

How much bigger than mine do you think it's going to get?

> A separate question is whether to auto-save the desktop using
> auto-save-hook by default or not.  Perhaps not if it can cause
> potential problems for users.

I think this is a nice default if desktop is active. Of course, desktop 
itself is not switched on by default. I don't think it will cause problems 
for many users; those who don't like it can switch it off, of course. It 
seems reasonable to have it on by defaut, just like auto-save for files is 
on by default.

-- 
http://rrt.sc3d.org/ | aphorism, n.  a wise lie

^ permalink raw reply	[flat|nested] 56+ messages in thread

* RE: desktop.el: autosave?
  2007-12-10  0:35                         ` Reuben Thomas
@ 2007-12-10  0:50                           ` Drew Adams
  2007-12-10  0:59                           ` Juri Linkov
  1 sibling, 0 replies; 56+ messages in thread
From: Drew Adams @ 2007-12-10  0:50 UTC (permalink / raw)
  To: Reuben Thomas, Juri Linkov; +Cc: tomas, rms, emacs-devel

> I think this is a nice default if desktop is active. Of course, desktop
> itself is not switched on by default. I don't think it will cause
> problems for many users; those who don't like it can switch it off,
> of course. It seems reasonable to have it on by defaut, just like
> auto-save for files is on by default.

I don't use it. How does it work if you have multiple Emacs sessions open at
the same time, perhaps using different Emacs versions. And then you close
them at various times. Is there a separate desktop saved for each? How is
this handled and configured?

This is likely documented, but since a change is being proposed to the
default behavior, perhaps someone could summarize here the behavior and
consequences for users who don't currently use desktop. Thx.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  0:35                         ` Reuben Thomas
  2007-12-10  0:50                           ` Drew Adams
@ 2007-12-10  0:59                           ` Juri Linkov
  2007-12-10  1:10                             ` Reuben Thomas
  1 sibling, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-10  0:59 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, rms, emacs-devel

>>> After about 30 hours, saving the desktop had accumulated about 50s of time
>>> this way. That seems a reasonable amount to me. I have 137 buffers in my
>>> session, and my desktop file is about 38,000 bytes long. Hence, I suggest
>>> that a simple feature "Auto-save desktop" which adds
>>> desktop-save-in-desktop-dir to auto-save-hook, would satisfy most people
>>> likely to use this feature. Furthermore those concerned about power usage
>>> and disk spin-up only have to worry about the same Emacs feature
>>> (auto-save-hook), and not add another hook or function to their list of
>>> things to tweak.
>>
>> For users with small desktop files this simple solution could be
>> satisfactory.
>
> How much bigger than mine do you think it's going to get?

Mine is ~700 kilobytes long with ~400 buffers and unlimited history lists.
So far I had no problems with such a large desktop: I rarely restart Emacs;
desktop reading is quite fast (a few seconds); desktop saving takes 0.2 sec.
I could try using auto-save-hook and see what problems it causes.

>> A separate question is whether to auto-save the desktop using
>> auto-save-hook by default or not.  Perhaps not if it can cause
>> potential problems for users.
>
> I think this is a nice default if desktop is active. Of course, desktop
> itself is not switched on by default. I don't think it will cause problems
> for many users; those who don't like it can switch it off, of course. It
> seems reasonable to have it on by defaut, just like auto-save for files is
> on by default.

In any case, there should be an option to easily switch it off.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  0:59                           ` Juri Linkov
@ 2007-12-10  1:10                             ` Reuben Thomas
  0 siblings, 0 replies; 56+ messages in thread
From: Reuben Thomas @ 2007-12-10  1:10 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, rms, emacs-devel

On Mon, 10 Dec 2007, Juri Linkov wrote:

> Mine is ~700 kilobytes long with ~400 buffers and unlimited history lists.

Heh. Fair enough. I should take more limits off myself.

> So far I had no problems with such a large desktop: I rarely restart Emacs;
> desktop reading is quite fast (a few seconds); desktop saving takes 0.2 sec.

i.e. faster than me! (I am using a laptop with a slow disk, plus a fairly 
slow CPU, so it's not a surprise.)

> In any case, there should be an option to easily switch it off.

Of course. If there were a customize option, desktop-auto-save or similar, 
that were on by default, then it could easily be switched off too.

-- 
http://rrt.sc3d.org/
memoir, n.  a lie that flatters the author's ego and the reader's intellect

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  0:27                       ` Juri Linkov
  2007-12-10  0:35                         ` Reuben Thomas
@ 2007-12-10  3:03                         ` Stefan Monnier
  2007-12-10 22:01                           ` Reuben Thomas
  2007-12-10 22:02                           ` Reuben Thomas
  1 sibling, 2 replies; 56+ messages in thread
From: Stefan Monnier @ 2007-12-10  3:03 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel, rms, Reuben Thomas

>> likely to use this feature. Furthermore those concerned about power usage
>> and disk spin-up only have to worry about the same Emacs feature
>> (auto-save-hook), and not add another hook or function to their list of
>> things to tweak.

BTW, how 'bout optimizing disk writes like savehist does: only save the
new desktop file if it's different from the previous one.  That doesn't
save you from generating the new file's content in a buffer, of course,
but still.


        Stefan

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  3:03                         ` Stefan Monnier
@ 2007-12-10 22:01                           ` Reuben Thomas
  2007-12-10 23:55                             ` Juri Linkov
  2007-12-10 22:02                           ` Reuben Thomas
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-10 22:01 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Juri Linkov, tomas, rms, emacs-devel

On Sun, 9 Dec 2007, Stefan Monnier wrote:

>>> likely to use this feature. Furthermore those concerned about power usage
>>> and disk spin-up only have to worry about the same Emacs feature
>>> (auto-save-hook), and not add another hook or function to their list of
>>> things to tweak.
>
> BTW, how 'bout optimizing disk writes like savehist does: only save the
> new desktop file if it's different from the previous one.  That doesn't
> save you from generating the new file's content in a buffer, of course,
> but still.

That sounds like a good idea. I think we can now collect the changes that 
need to be made:

1. A customizable preference, desktop-auto-save, which indicates whether 
desktop-save-in-desktop-dir should be added to auto-save-hook or not. Is the 
easiest way to do this to add a private function that desktop mode always 
adds to auto-save-hook and then have that private function test a boolean 
which is itself the customizable preference when it runs, to see whether to 
proceed or not?

2. Change desktop-save-in-desktop-dir so that it only prompts for a 
directory if it is called interactively. The normal way seems to be to add 
an optional argument as described in the help for interactive-p.

3. Change desktop-save-in-desktop-dir to be like savehist-mode, only 
actually writing the file when the history has changed since the last time.

Does that sounds about right?

-- 
http://rrt.sc3d.org/ | Brevity is the soul

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10  3:03                         ` Stefan Monnier
  2007-12-10 22:01                           ` Reuben Thomas
@ 2007-12-10 22:02                           ` Reuben Thomas
  2007-12-10 22:12                             ` Drew Adams
  1 sibling, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-10 22:02 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Juri Linkov, tomas, rms, emacs-devel

On Sun, 9 Dec 2007, Stefan Monnier wrote:

>>> likely to use this feature. Furthermore those concerned about power usage
>>> and disk spin-up only have to worry about the same Emacs feature
>>> (auto-save-hook), and not add another hook or function to their list of
>>> things to tweak.
>
> BTW, how 'bout optimizing disk writes like savehist does: only save the
> new desktop file if it's different from the previous one.  That doesn't
> save you from generating the new file's content in a buffer, of course,
> but still.

I was previously unaware of savehist-mode. What's the point of having both 
it and the history-saving functionality of desktop? Wouldn't it be better 
to remove that functionality from desktop and let users use savehist-mode 
instead? (Or vice versa.)

-- 
http://rrt.sc3d.org/ | author, n.  one who parades ignorance in public

^ permalink raw reply	[flat|nested] 56+ messages in thread

* RE: desktop.el: autosave?
  2007-12-10 22:02                           ` Reuben Thomas
@ 2007-12-10 22:12                             ` Drew Adams
  2007-12-10 22:16                               ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Drew Adams @ 2007-12-10 22:12 UTC (permalink / raw)
  To: Reuben Thomas, Stefan Monnier; +Cc: Juri Linkov, tomas, rms, emacs-devel

> I was previously unaware of savehist-mode. What's the point of
> having both it and the history-saving functionality of desktop?
> Wouldn't it be better to remove that functionality from desktop
> and let users use savehist-mode instead? (Or vice versa.)

Certainly not vice versa. A user might want to save histories but not all
the rest.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* RE: desktop.el: autosave?
  2007-12-10 22:12                             ` Drew Adams
@ 2007-12-10 22:16                               ` Reuben Thomas
  2007-12-10 23:57                                 ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-10 22:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: Juri Linkov, tomas, emacs-devel, Stefan Monnier, rms

On Mon, 10 Dec 2007, Drew Adams wrote:

>> I was previously unaware of savehist-mode. What's the point of
>> having both it and the history-saving functionality of desktop?
>> Wouldn't it be better to remove that functionality from desktop
>> and let users use savehist-mode instead? (Or vice versa.)
>
> Certainly not vice versa. A user might want to save histories but not all
> the rest.

That's configurable, of course: you could use desktop to save only your 
histories. I agree, though, that from where we stand now it'd be easier to 
make desktop not save minibuffer histories than to make it easy to configure 
to save only minibuffer histories. I suspect that there are more users using 
savehist to save their histories too. It would be easy to point desktop 
users at savehist-mode.

-- 
http://rrt.sc3d.org/ | The old cliches are the best

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10 22:01                           ` Reuben Thomas
@ 2007-12-10 23:55                             ` Juri Linkov
  2007-12-11  0:10                               ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-10 23:55 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, emacs-devel

> 1. A customizable preference, desktop-auto-save, which indicates whether
> desktop-save-in-desktop-dir should be added to auto-save-hook or not. Is
> the easiest way to do this to add a private function that desktop mode
> always adds to auto-save-hook and then have that private function test
> a boolean which is itself the customizable preference when it runs, to see
> whether to proceed or not?

No need for a separate function.  You could just change desktop-save-mode
as follows:

(define-minor-mode desktop-save-mode
  :global t
  :group 'desktop
  (if desktop-save-mode
      (if desktop-auto-save
	  (add-hook 'auto-save-hook 'desktop-save-in-desktop-dir))
    (remove-hook 'auto-save-hook 'desktop-save-in-desktop-dir)))

But please note that I still think it would be better to use a timer.
You can look in savehist.el that it uses a separate non-idle timer.
It seems reasonable to do the same in desktop.el.

> 2. Change desktop-save-in-desktop-dir so that it only prompts for
> a directory if it is called interactively. The normal way seems to be to
> add an optional argument as described in the help for interactive-p.

I think it should be replaced with:

(defun desktop-save-in-desktop-dir (&optional dirname)
  "Save the desktop in directory `desktop-dirname'."
  (interactive
   (list (or desktop-dirname
	     (read-directory-name "Directory to save desktop file in: "))))
  (when (and (null dirname) desktop-dirname)
    (setq dirname desktop-dirname))
  (when dirname
    (desktop-save dirname)
    (message "Desktop saved in %s" dirname)))

> 3. Change desktop-save-in-desktop-dir to be like savehist-mode, only
> actually writing the file when the history has changed since the
> last time.

This is easy to do once we will decide what auto-saving method to use.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10 22:16                               ` Reuben Thomas
@ 2007-12-10 23:57                                 ` Juri Linkov
  2007-12-11  0:02                                   ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-10 23:57 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, drew.adams, emacs-devel

>>> I was previously unaware of savehist-mode. What's the point of
>>> having both it and the history-saving functionality of desktop?
>>> Wouldn't it be better to remove that functionality from desktop
>>> and let users use savehist-mode instead? (Or vice versa.)
>>
>> Certainly not vice versa. A user might want to save histories but not all
>> the rest.
>
> That's configurable, of course: you could use desktop to save only your
> histories. I agree, though, that from where we stand now it'd be easier to
> make desktop not save minibuffer histories than to make it easy to
> configure to save only minibuffer histories. I suspect that there are more
> users using savehist to save their histories too. It would be easy to
> point desktop users at savehist-mode.

There is no sense to remove history saving from desktop.el if there
happens to exist a package that duplicates a part of its functionality.
Why put an additional hassle on users of desktop.el with more configuration?

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10 23:57                                 ` Juri Linkov
@ 2007-12-11  0:02                                   ` Reuben Thomas
  2007-12-11  0:23                                     ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-11  0:02 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, drew.adams, emacs-devel

On Tue, 11 Dec 2007, Juri Linkov wrote:

> There is no sense to remove history saving from desktop.el if there
> happens to exist a package that duplicates a part of its functionality.
> Why put an additional hassle on users of desktop.el with more configuration?

What's the point of having two completely different ways of doing exactly 
the same thing? This is confusing. ISn't there some way to resolve that?

-- 
http://rrt.sc3d.org/ | sane, a.  not unnerved by children

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-10 23:55                             ` Juri Linkov
@ 2007-12-11  0:10                               ` Reuben Thomas
  2007-12-11  0:23                                 ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-11  0:10 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel

On Tue, 11 Dec 2007, Juri Linkov wrote:

>> 1. A customizable preference, desktop-auto-save, which indicates whether
>> desktop-save-in-desktop-dir should be added to auto-save-hook or not. Is
>> the easiest way to do this to add a private function that desktop mode
>> always adds to auto-save-hook and then have that private function test
>> a boolean which is itself the customizable preference when it runs, to see
>> whether to proceed or not?
>
> No need for a separate function.  You could just change desktop-save-mode
> as follows:
>
> (define-minor-mode desktop-save-mode
>  :global t
>  :group 'desktop
>  (if desktop-save-mode
>      (if desktop-auto-save
> 	  (add-hook 'auto-save-hook 'desktop-save-in-desktop-dir))
>    (remove-hook 'auto-save-hook 'desktop-save-in-desktop-dir)))

Is that how other similar features work? If you change the desktop-auto-save 
preference while desktop-save-mode is active, it won't actually stop saving.

> But please note that I still think it would be better to use a timer. You 
> can look in savehist.el that it uses a separate non-idle timer. It seems 
> reasonable to do the same in desktop.el.

Fair enough.

-- 
http://rrt.sc3d.org/ | traddutore, v.t.  traditore (Anon)

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:10                               ` Reuben Thomas
@ 2007-12-11  0:23                                 ` Juri Linkov
  2007-12-11  0:42                                   ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-11  0:23 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, emacs-devel

>>> 1. A customizable preference, desktop-auto-save, which indicates whether
>>> desktop-save-in-desktop-dir should be added to auto-save-hook or not. Is
>>> the easiest way to do this to add a private function that desktop mode
>>> always adds to auto-save-hook and then have that private function test
>>> a boolean which is itself the customizable preference when it runs, to see
>>> whether to proceed or not?
>>
>> No need for a separate function.  You could just change desktop-save-mode
>> as follows:
>>
>> (define-minor-mode desktop-save-mode
>>  :global t
>>  :group 'desktop
>>  (if desktop-save-mode
>>      (if desktop-auto-save
>> 	  (add-hook 'auto-save-hook 'desktop-save-in-desktop-dir))
>>    (remove-hook 'auto-save-hook 'desktop-save-in-desktop-dir)))
>
> Is that how other similar features work? If you change the
> desktop-auto-save preference while desktop-save-mode is active, it won't
> actually stop saving.

This is how other modes work: when you want a configuration change to
take effect, you should disable and re-enable this mode.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:02                                   ` Reuben Thomas
@ 2007-12-11  0:23                                     ` Juri Linkov
  2007-12-11  0:48                                       ` Reuben Thomas
  2007-12-11 19:01                                       ` Richard Stallman
  0 siblings, 2 replies; 56+ messages in thread
From: Juri Linkov @ 2007-12-11  0:23 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, drew.adams, emacs-devel

> On Tue, 11 Dec 2007, Juri Linkov wrote:
>
>> There is no sense to remove history saving from desktop.el if there
>> happens to exist a package that duplicates a part of its functionality.
>> Why put an additional hassle on users of desktop.el with more configuration?
>
> What's the point of having two completely different ways of doing exactly
> the same thing? This is confusing. ISn't there some way to resolve that?

There are many packages in Emacs that have similar functionality.
But there are no problems with that.  Every package has its own users.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:23                                 ` Juri Linkov
@ 2007-12-11  0:42                                   ` Reuben Thomas
  2013-04-10  1:36                                     ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-11  0:42 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel

On Tue, 11 Dec 2007, Juri Linkov wrote:

> This is how other modes work: when you want a configuration change to
> take effect, you should disable and re-enable this mode.

Fair enough, then.

-- 
http://rrt.sc3d.org/
C++, n.  an octopus made by nailing extra legs onto a dog (Anon)

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:23                                     ` Juri Linkov
@ 2007-12-11  0:48                                       ` Reuben Thomas
  2007-12-11 19:01                                       ` Richard Stallman
  1 sibling, 0 replies; 56+ messages in thread
From: Reuben Thomas @ 2007-12-11  0:48 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, drew.adams, emacs-devel

On Tue, 11 Dec 2007, Juri Linkov wrote:

>> On Tue, 11 Dec 2007, Juri Linkov wrote:
>>
>>> There is no sense to remove history saving from desktop.el if there
>>> happens to exist a package that duplicates a part of its functionality.
>>> Why put an additional hassle on users of desktop.el with more configuration?
>>
>> What's the point of having two completely different ways of doing exactly
>> the same thing? This is confusing. ISn't there some way to resolve that?
>
> There are many packages in Emacs that have similar functionality.
> But there are no problems with that.  Every package has its own users.

This is a different question from the rest, but it seems that here (and in 
other places, doubtless) there is the opportunity to reduce duplication and 
make Emacs simpler for everyone to understand. Sometimes, there is an 
obvious reason for having two packages that perform a similar task, as for 
example with different modes for editing the same language that have a 
different approach. In other cases, there's little obvious reason, the 
reason seems to be mainly historical, and if duplicate functionality can be 
merged then we make Emacs better for everyone.

Or is the general attitude that once a feature gets into Emacs, then it 
should stay there to avoid annoying users who rely on it? I understand this 
too, but I think it's a pity if it becomes a reason never to remove 
anything.

-- 
http://rrt.sc3d.org/ | Enlightenment is understanding becoming belief

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:23                                     ` Juri Linkov
  2007-12-11  0:48                                       ` Reuben Thomas
@ 2007-12-11 19:01                                       ` Richard Stallman
  2007-12-12  0:50                                         ` Reuben Thomas
  1 sibling, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-12-11 19:01 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel, drew.adams, rrt

    There are many packages in Emacs that have similar functionality.
    But there are no problems with that.  Every package has its own users.

Actually I wish we had fewer duplicate packages.  They are added complexity.

When duplications have existed for a long time we don't have to get
rid of the duplicates, but I would like to make one of them clearly
superior, so it can be the only one we recommend.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11 19:01                                       ` Richard Stallman
@ 2007-12-12  0:50                                         ` Reuben Thomas
  2007-12-12 22:53                                           ` Richard Stallman
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2007-12-12  0:50 UTC (permalink / raw)
  To: Richard Stallman; +Cc: Juri Linkov, tomas, drew.adams, emacs-devel

On Tue, 11 Dec 2007, Richard Stallman wrote:

>    There are many packages in Emacs that have similar functionality.
>    But there are no problems with that.  Every package has its own users.
>
> Actually I wish we had fewer duplicate packages.  They are added complexity.
>
> When duplications have existed for a long time we don't have to get
> rid of the duplicates, but I would like to make one of them clearly
> superior, so it can be the only one we recommend.

So what do you think about this case? Presumably one of desktop and 
savehist-mode should be marked as the preferred way of saving history.

-- 
http://rrt.sc3d.org/ | poetry, n.  platitude made obscure

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-12  0:50                                         ` Reuben Thomas
@ 2007-12-12 22:53                                           ` Richard Stallman
  2007-12-12 23:59                                             ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Richard Stallman @ 2007-12-12 22:53 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: juri, tomas, drew.adams, emacs-devel

    So what do you think about this case? Presumably one of desktop and 
    savehist-mode should be marked as the preferred way of saving history.

Looking at desktop.el I don't think it saves minibuffer history
variables.  I can't find any code that would do so.  It seems that
desktop.el and savehist.el are complementary, not duplicates at all.

Where did the idea come from that desktop.el saves minibuffer history?


The real duplicates in that area are saveplace.el and desktop.el.

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-12 22:53                                           ` Richard Stallman
@ 2007-12-12 23:59                                             ` Juri Linkov
  2007-12-14 10:10                                               ` Richard Stallman
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2007-12-12 23:59 UTC (permalink / raw)
  To: rms; +Cc: tomas, emacs-devel, drew.adams, Reuben Thomas

>     So what do you think about this case? Presumably one of desktop and
>     savehist-mode should be marked as the preferred way of saving history.
>
> Looking at desktop.el I don't think it saves minibuffer history
> variables.  I can't find any code that would do so.  It seems that
> desktop.el and savehist.el are complementary, not duplicates at all.
>
> Where did the idea come from that desktop.el saves minibuffer history?

desktop.el allows saving any global variable listed in the option
`desktop-globals-to-save'.  I use it to save history lists in addition
to the default global variables in this list.

> The real duplicates in that area are saveplace.el and desktop.el.

desktop.el saves file positions restored once the whole desktop is restored
while positions stored by saveplace.el get restored on every file visit.

-- 
Juri Linkov
http://www.jurta.org/emacs/

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-12 23:59                                             ` Juri Linkov
@ 2007-12-14 10:10                                               ` Richard Stallman
  0 siblings, 0 replies; 56+ messages in thread
From: Richard Stallman @ 2007-12-14 10:10 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel, drew.adams, rrt

    > Where did the idea come from that desktop.el saves minibuffer history?

    desktop.el allows saving any global variable listed in the option
    `desktop-globals-to-save'.  I use it to save history lists in addition
    to the default global variables in this list.

Yes, you could use it for that, but desktop doesn't have a feature which
actually duplicates savehist.

    > The real duplicates in that area are saveplace.el and desktop.el.

    desktop.el saves file positions restored once the whole desktop is restored
    while positions stored by saveplace.el get restored on every file visit.

I see.  It would be nice to document that contrast in both files.
Could you do that?

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2007-12-11  0:42                                   ` Reuben Thomas
@ 2013-04-10  1:36                                     ` Reuben Thomas
  2013-04-10  7:05                                       ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2013-04-10  1:36 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2491 bytes --]

On 11 December 2007 00:42, Reuben Thomas <rrt@sc3d.org> wrote:

> On Tue, 11 Dec 2007, Juri Linkov wrote:
>
>  This is how other modes work: when you want a configuration change to
>> take effect, you should disable and re-enable this mode.
>>
>
> Fair enough, then.


[Some time passed]

I have just revisited this. Nothing much seems to have changed in
desktop.el in the mean time.

I have gathered together what was agreed on earlier in the thread, and
implemented it:

(defun desktop-save-in-desktop-dir (&optional dirname)
  "Save the desktop in directory `desktop-dirname'."
  (interactive
   (list (or desktop-dirname
             (read-directory-name "Directory to save desktop file in: "))))
  (when (and (null dirname) desktop-dirname)
    (setq dirname desktop-dirname))
  (when dirname
    (desktop-save dirname)
    (when (called-interactively-p 'interactive)
        (message "Desktop saved in %s" (abbreviate-file-name dirname)))))

(defun desktop-owner-save-in-desktop-dir ()
  "Save the desktop if we are its owner."
  (if (eq (desktop-owner) (emacs-pid))
      (desktop-save-in-desktop-dir)))

(define-minor-mode desktop-save-mode
  "Toggle desktop saving (Desktop Save mode).
With a prefix argument ARG, enable Desktop Save mode if ARG is
positive, and disable it otherwise.  If called from Lisp, enable
the mode if ARG is omitted or nil.

If Desktop Save mode is enabled, the state of Emacs is saved from
one session to another.  See variable `desktop-save' and function
`desktop-read' for details."
  :global t
  :group 'desktop
  (if desktop-save-mode
      (if desktop-auto-save
          (add-hook 'auto-save-hook 'desktop-owner-save-in-desktop-dir))
    (remove-hook 'auto-save-hook 'desktop-owner-save-in-desktop-dir)))

Remaining issues:

1. Here I have added the function desktop-owner-save-in-desktop-dir which
only saves the desktop if the current process owns it.

2. There was some discussion over whether by default we should use a
separate timer or auto-save-hook. For now I've used the latter.

3. It was desired to save the desktop only when it changed. Juri Linkov
previously said "This is easy to do once we will decide what auto-saving
method to use", so, since I don't know how to do it anyway, and since the
auto-saving method is not yet decided, I didn't implement that yet.

I've been happily using essentially the above code (mostly Juri's, with a
handful of lines by me) since this thread went quiet over five years ago.

-- 
http://rrt.sc3d.org

[-- Attachment #2: Type: text/html, Size: 3481 bytes --]

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2013-04-10  1:36                                     ` Reuben Thomas
@ 2013-04-10  7:05                                       ` Juri Linkov
  2013-04-10 10:57                                         ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2013-04-10  7:05 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, emacs-devel

> I've been happily using essentially the above code (mostly Juri's, with a
> handful of lines by me) since this thread went quiet over five years ago.

The problem is that the time interval to run auto-save-hook is
not configurable exclusively for desktop mode.  If a user wants
to auto-save the desktop less often than to auto-save files
there is no way to do this.

OTOH, I like the simplicity of the auto-saving feature in savehist
that uses just one option `savehist-autosave-interval' to configure the
interval between autosaves, or nil to disable timer-based auto-saving.

Savehist uses `run-with-timer'.  Why not to do the same in desktop mode?
What are the problems with using `run-with-timer'?



^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2013-04-10  7:05                                       ` Juri Linkov
@ 2013-04-10 10:57                                         ` Reuben Thomas
  2013-04-11  8:29                                           ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2013-04-10 10:57 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 967 bytes --]

On 10 April 2013 08:05, Juri Linkov <juri@jurta.org> wrote:

> > I've been happily using essentially the above code (mostly Juri's, with a
> > handful of lines by me) since this thread went quiet over five years ago.
>
> The problem is that the time interval to run auto-save-hook is
> not configurable exclusively for desktop mode.  If a user wants
> to auto-save the desktop less often than to auto-save files
> there is no way to do this.
>
> OTOH, I like the simplicity of the auto-saving feature in savehist
> that uses just one option `savehist-autosave-interval' to configure the
> interval between autosaves, or nil to disable timer-based auto-saving.
>
> Savehist uses `run-with-timer'.  Why not to do the same in desktop mode?
> What are the problems with using `run-with-timer'?
>

I don't think anyone had a problem with run-with-timer (I just skimmed back
through the thread to check), so go ahead and change my patch to use it.

-- 
http://rrt.sc3d.org

[-- Attachment #2: Type: text/html, Size: 1477 bytes --]

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2013-04-10 10:57                                         ` Reuben Thomas
@ 2013-04-11  8:29                                           ` Juri Linkov
  2013-04-11 11:04                                             ` Reuben Thomas
  0 siblings, 1 reply; 56+ messages in thread
From: Juri Linkov @ 2013-04-11  8:29 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, emacs-devel

> I don't think anyone had a problem with run-with-timer (I just skimmed back
> through the thread to check), so go ahead and change my patch to use it.

In the patch below a new option is `desktop-auto-save-timeout' instead
of `desktop-auto-save-interval' because it should be more like
`auto-save-timeout' instead of `auto-save-interval'.

`auto-save-timeout' is the number of seconds between auto-saves, but
`auto-save-interval' is the number of characters typed between auto-saves.
In terms of the desktop, an interval would rather mean a number of changes
in the buffer list or something like that.  I'm not sure whether this is
useful, so the following patch implements only timer-based auto-saving:

=== modified file 'lisp/desktop.el'
--- lisp/desktop.el	2013-01-02 16:13:04 +0000
+++ lisp/desktop.el	2013-04-11 08:28:14 +0000
@@ -189,6 +189,17 @@ (defcustom desktop-save 'ask-if-new
   :group 'desktop
   :version "22.1")
 
+(defcustom desktop-auto-save-timeout nil
+  "Number of seconds between auto-saves of the desktop.
+Zero or nil means disable timer-based auto-saving."
+  :type '(choice (const :tag "Off" nil)
+                 (integer :tag "Seconds"))
+  :set (lambda (symbol value)
+         (set-default symbol value)
+         (desktop-auto-save-update))
+  :group 'desktop
+  :version "24.4")
+
 (defcustom desktop-load-locked-desktop 'ask
   "Specifies whether the desktop should be loaded if locked.
 Possible values are:
@@ -539,6 +550,10 @@ (defconst desktop-header
 (defvar desktop-delay-hook nil
   "Hooks run after all buffers are loaded; intended for internal use.")
 
+(defvar desktop-file-checksum nil
+  "Checksum of the last auto-saved contents of the desktop file.
+Used to avoid writing contents unchanged between auto-saves.")
+
 ;; ----------------------------------------------------------------------------
 ;; Desktop file conflict detection
 (defvar desktop-file-modtime nil
@@ -854,11 +869,12 @@ (defun desktop-file-name (filename dirna
 
 ;; ----------------------------------------------------------------------------
 ;;;###autoload
-(defun desktop-save (dirname &optional release)
+(defun desktop-save (dirname &optional release auto-save)
   "Save the desktop in a desktop file.
 Parameter DIRNAME specifies where to save the desktop file.
 Optional parameter RELEASE says whether we're done with this desktop.
-See also `desktop-base-file-name'."
+If AUTO-SAVE is non-nil, compare the saved contents to the one last saved,
+and don't save the buffer if they are the same."
   (interactive "DDirectory to save desktop file in: ")
   (setq desktop-dirname (file-name-as-directory (expand-file-name dirname)))
   (save-excursion
@@ -918,10 +934,17 @@ (defun desktop-save (dirname &optional r
 		(insert ")\n\n"))))
 
 	  (setq default-directory desktop-dirname)
-	  (let ((coding-system-for-write 'emacs-mule))
-	    (write-region (point-min) (point-max) (desktop-full-file-name) nil 'nomessage))
-	  ;; We remember when it was modified (which is presumably just now).
-	  (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name)))))))))
+	  ;; If auto-saving, avoid writing if nothing has changed since the last write.
+	  ;; Don't check 300 characters of the header that contains the timestamp.
+	  (let ((checksum (and auto-save (md5 (current-buffer)
+					      (+ 300 (point-min)) (point-max)
+					      'emacs-mule))))
+	    (unless (and auto-save (equal checksum desktop-file-checksum))
+	      (let ((coding-system-for-write 'emacs-mule))
+		(write-region (point-min) (point-max) (desktop-full-file-name) nil 'nomessage))
+	      (setq desktop-file-checksum checksum)
+	      ;; We remember when it was modified (which is presumably just now).
+	      (setq desktop-file-modtime (nth 5 (file-attributes (desktop-full-file-name)))))))))))
 
 ;; ----------------------------------------------------------------------------
 ;;;###autoload
@@ -1075,6 +1098,37 @@ (defun desktop-save-in-desktop-dir ()
   (message "Desktop saved in %s" (abbreviate-file-name desktop-dirname)))
 
 ;; ----------------------------------------------------------------------------
+;; Auto-Saving.
+(defvar desktop-auto-save-timer nil)
+
+(defun desktop-auto-save ()
+  "Save the desktop periodically.
+Called by the timer created in `desktop-auto-save-update'."
+  (when (and desktop-save-mode
+	     (integerp desktop-auto-save-timeout)
+	     (> desktop-auto-save-timeout 0)
+	     ;; Avoid desktop saving during lazy loading.
+	     (not desktop-lazy-timer)
+	     ;; Save only to own desktop file.
+	     (eq (emacs-pid) (desktop-owner))
+	     desktop-dirname)
+    (desktop-save desktop-dirname nil t))
+  (desktop-auto-save-update))
+
+(defun desktop-auto-save-update ()
+  "Update the timer for next auto-saving.
+Cancel the previous timer and run a new timer when the number
+of seconds between auto-saves is a positive integer."
+  (when desktop-auto-save-timer
+    (cancel-timer desktop-auto-save-timer)
+    (setq desktop-auto-save-timer nil))
+  (when (and (integerp desktop-auto-save-timeout)
+	     (> desktop-auto-save-timeout 0))
+    (setq desktop-auto-save-timer
+	  (run-with-timer desktop-auto-save-timeout nil
+			  'desktop-auto-save))))
+
+;; ----------------------------------------------------------------------------
 ;;;###autoload
 (defun desktop-revert ()
   "Revert to the last loaded desktop."
@@ -1327,6 +1381,7 @@ (add-hook 'after-init-hook
         (setq desktop-save-mode nil)))
     (when desktop-save-mode
       (desktop-read)
+      (desktop-auto-save-update)
       (setq inhibit-startup-screen t))))
 
 (provide 'desktop)




^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2013-04-11  8:29                                           ` Juri Linkov
@ 2013-04-11 11:04                                             ` Reuben Thomas
  2013-04-27 20:57                                               ` Juri Linkov
  0 siblings, 1 reply; 56+ messages in thread
From: Reuben Thomas @ 2013-04-11 11:04 UTC (permalink / raw)
  To: Juri Linkov; +Cc: tomas, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 853 bytes --]

On 11 April 2013 09:29, Juri Linkov <juri@jurta.org> wrote:

> Update the timer for next auto-saving.
>
Cancel the previous timer and run a new timer when the number
> of seconds between auto-saves is a positive integer.
>

Thanks very much! The only thing I would say is that to a mathmetician the
above docstring sounds as though the new timer will be run when the number
of seconds between auto-saves is *any* positive integer, wheras presumably
you mean that the argument should be a positive integer. Further, it sounds
as though the timer will not be cancelled if the number of seconds between
auto-saves is not a positive integer. I suggest:

Reset the auto-save timer.
Cancel any previous timer. When `desktop-auto-save-timeout' is a positive
integer, start a new timer to call `desktop-auto-save' in that many seconds.

-- 
http://rrt.sc3d.org

[-- Attachment #2: Type: text/html, Size: 1498 bytes --]

^ permalink raw reply	[flat|nested] 56+ messages in thread

* Re: desktop.el: autosave?
  2013-04-11 11:04                                             ` Reuben Thomas
@ 2013-04-27 20:57                                               ` Juri Linkov
  0 siblings, 0 replies; 56+ messages in thread
From: Juri Linkov @ 2013-04-27 20:57 UTC (permalink / raw)
  To: Reuben Thomas; +Cc: tomas, emacs-devel

> I suggest:
>
> Reset the auto-save timer.
> Cancel any previous timer. When `desktop-auto-save-timeout' is a positive
> integer, start a new timer to call `desktop-auto-save' in that many seconds.

Thanks, your docstring is much better.

After testing for some more time I see no problems with `run-with-timer'.
If someone will find it problematic then another option could be added
with a name like `desktop-auto-save-idle-timeout' to use `run-with-idle-timer'
in addition to `run-with-timer'.



^ permalink raw reply	[flat|nested] 56+ messages in thread

end of thread, other threads:[~2013-04-27 20:57 UTC | newest]

Thread overview: 56+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <alpine.DEB.0.99999.0711301407250.4037@localhost.localdomain>
2007-11-30 23:35 ` desktop.el: autosave? Richard Stallman
2007-12-01  0:35   ` Juri Linkov
2007-12-01 23:41     ` Richard Stallman
2007-12-03 22:57       ` Juri Linkov
2007-12-04  7:39         ` martin rudalics
2007-12-05  2:57           ` Richard Stallman
2007-12-05  9:02             ` martin rudalics
2007-12-05 22:28               ` Juri Linkov
2007-12-05 23:09                 ` martin rudalics
2007-12-05 23:41                   ` Juri Linkov
2007-12-06 15:12                     ` Richard Stallman
2007-12-06  2:11               ` Richard Stallman
2007-12-06 23:29                 ` Juri Linkov
2007-12-04 16:55         ` Richard Stallman
2007-12-06 14:58         ` Reuben Thomas
2007-12-06 15:38           ` tomas
2007-12-06 15:47             ` Reuben Thomas
2007-12-06 23:28               ` Juri Linkov
2007-12-06 23:44                 ` Reuben Thomas
2007-12-07  0:03                   ` Juri Linkov
2007-12-07  2:48                     ` Stefan Monnier
2007-12-09 20:35                     ` Reuben Thomas
2007-12-10  0:27                       ` Juri Linkov
2007-12-10  0:35                         ` Reuben Thomas
2007-12-10  0:50                           ` Drew Adams
2007-12-10  0:59                           ` Juri Linkov
2007-12-10  1:10                             ` Reuben Thomas
2007-12-10  3:03                         ` Stefan Monnier
2007-12-10 22:01                           ` Reuben Thomas
2007-12-10 23:55                             ` Juri Linkov
2007-12-11  0:10                               ` Reuben Thomas
2007-12-11  0:23                                 ` Juri Linkov
2007-12-11  0:42                                   ` Reuben Thomas
2013-04-10  1:36                                     ` Reuben Thomas
2013-04-10  7:05                                       ` Juri Linkov
2013-04-10 10:57                                         ` Reuben Thomas
2013-04-11  8:29                                           ` Juri Linkov
2013-04-11 11:04                                             ` Reuben Thomas
2013-04-27 20:57                                               ` Juri Linkov
2007-12-10 22:02                           ` Reuben Thomas
2007-12-10 22:12                             ` Drew Adams
2007-12-10 22:16                               ` Reuben Thomas
2007-12-10 23:57                                 ` Juri Linkov
2007-12-11  0:02                                   ` Reuben Thomas
2007-12-11  0:23                                     ` Juri Linkov
2007-12-11  0:48                                       ` Reuben Thomas
2007-12-11 19:01                                       ` Richard Stallman
2007-12-12  0:50                                         ` Reuben Thomas
2007-12-12 22:53                                           ` Richard Stallman
2007-12-12 23:59                                             ` Juri Linkov
2007-12-14 10:10                                               ` Richard Stallman
2007-12-07  2:47                 ` Stefan Monnier
2007-12-07 17:18             ` Richard Stallman
2007-12-03 21:14     ` Reuben Thomas
2007-12-03 22:57       ` Juri Linkov
2007-12-06 14:56         ` Reuben Thomas

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).