[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Autosave Feature (and the lack thereof)
- To: flan@informatics.WUstl.EDU (Ian Flanigan)
- Subject: Re: Autosave Feature (and the lack thereof)
- From: Bill St. Clair <bill>
- Date: Wed, 26 Jun 91 17:05:09 -0400
- Cc: info-macl@cambridge.apple.com
- In-reply-to: Your message of Wed, 26 Jun 91 13:43:06 -0500. <9106261843.AA12307@informatics.WUstl.EDU>
Date: Wed, 26 Jun 91 13:43:06 CDT
From: flan@informatics.WUstl.EDU (Ian Flanigan)
To: info-macl@cambridge.apple.com
Subject: Autosave Feature (and the lack thereof)
Hi,
Today I was cruising along in a coding frenzy when that dreaded
little bomb popped up in middle of my display. In that instant I lost
about an hour and a half of work. True, it's not a dreadful
catastrophe, but it is terribly frustrating. And, yes, I know I
should be in the habit of saving every five minutes or so, but . . .
So, my question is, is it possible to implement an autosave
feature in MCL? If so, does anyone have any idea how it might be
done? Could such a beast be incorperated into the final release of
MCL 2.0?
Thanks much,
Ian Flanigan
Medical Informatics Group
Washington University in St. Louis "You can never have too many napkins."
(314) 362-4320
flan@informatics.wustl.edu
The following is a simple 15-minute pass at an auto-save. In 2.0
final, there will be a periodic task queue so you won't need to use
*eventhook* for this kind of thing.
---------------------------------------------------------------------------
(in-package :ccl)
(export 'set-auto-save-period)
(defvar *next-auto-save-time* nil)
(defvar *auto-save-period* nil)
(defun ticks () (#_TickCount))
; NIL will turn off autosaving
(defun set-auto-save-period (minutes)
(if minutes
(progn
(setq *auto-save-period* (round (* minutes 3600)))
(without-interrupts
(setq *next-auto-save-time*
(min (or *next-auto-save-time* most-positive-fixnum) ; 8 year max
(+ (ticks) *auto-save-period*)))))
(setq *auto-save-period* nil
*next-auto-save-time* nil)))
; Doesn't try to save windows that don't yet have a file.
(defun do-auto-save ()
(with-cursor *watch-cursor*
(#_ShowCursor)
(map-windows #'(lambda (win)
(when (and (not (typep win 'listener))
(slot-value win 'my-file-name))
(catch-cancel (window-save win))))
:class 'fred-window)))
(defun maybe-do-auto-save ()
(let ((time *next-auto-save-time*)
ticks)
(when (and time (>= (setq ticks (ticks)) time))
(setq *next-auto-save-time* (+ ticks *auto-save-period*))
(do-auto-save)))
; NIL tells event-dispatch that we are'nt handling the event
nil)
(push 'maybe-do-auto-save *eventhook*)