|
(eval-and-compile
|
|
(require 'slime))
|
|
|
|
(define-slime-contrib slime-snapshot
|
|
"Save&restore memory images without disconnecting"
|
|
(:authors "Helmut Eller <heller@common-lisp.net>")
|
|
(:license "GPL v3")
|
|
(:swank-dependencies swank-snapshot))
|
|
|
|
(defun slime-snapshot (filename &optional background)
|
|
"Save a memory image to the file FILENAME."
|
|
(interactive (list (read-file-name "Image file: ")
|
|
current-prefix-arg))
|
|
(let ((file (expand-file-name filename)))
|
|
(when (and (file-exists-p file)
|
|
(not (yes-or-no-p (format "File exists %s. Overwrite it? "
|
|
filename))))
|
|
(signal 'quit nil))
|
|
(slime-eval-with-transcript
|
|
`(,(if background
|
|
'swank-snapshot:background-save-snapshot
|
|
'swank-snapshot:save-snapshot)
|
|
,file))))
|
|
|
|
(defun slime-restore (filename)
|
|
"Restore a memory image stored in file FILENAME."
|
|
(interactive (list (read-file-name "Image file: ")))
|
|
;; bypass event dispatcher because we don't expect a reply. FIXME.
|
|
(slime-net-send `(:emacs-rex (swank-snapshot:restore-snapshot
|
|
,(expand-file-name filename))
|
|
nil t nil)
|
|
(slime-connection)))
|
|
|
|
(provide 'slime-snapshot)
|