From eb94b5598b102290cccf6aee70182100e861dff5 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sun, 26 Jan 2020 08:41:53 +0100 Subject: [PATCH] New option to show progress as desktop file loads * lisp/desktop.el (desktop-save-adds-progress-reporter): New option. (desktop-save): Save a 'progress-reporter' into the desktop file if the above option is non-nil. * etc/NEWS: Announce the above option. --- etc/NEWS | 6 ++++++ lisp/desktop.el | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index c3a71ade8a..fa27431245 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -87,6 +87,12 @@ line numbers that were previously jumped to. * Changes in Specialized Modes and Packages in Emacs 28.1 +** Desktop + +*** New option to show progress as desktop file loads. +Customize the new user option 'desktop-save-adds-progress-reporter' to +enable it. Read the documentation of that option for more details. + --- ** The sb-image.el library is now marked obsolete. This file was a compatibility kludge which is no longer needed. diff --git a/lisp/desktop.el b/lisp/desktop.el index 9538bb4a34..b634fcbca4 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -306,6 +306,20 @@ desktop-save-hook :type 'hook :group 'desktop) +(defcustom desktop-save-adds-progress-reporter nil + "If non-nil, add a progress reporter to saved desktop files. +This can be used to show progress while a desktop file is +loading. + +Note that this will not take effect until you run `desktop-save' +at least once with this option enabled, and then `desktop-load' +that saved file. + +Once a desktop file has had been saved with progress reporters, +it is on unconditionally on subsequent loads of that file." + :type 'boolean + :version "28.1") + (defcustom desktop-globals-to-save '(desktop-missing-file-warning tags-file-name @@ -1113,11 +1127,17 @@ desktop-save (int-to-string (- (length kill-ring) (length kill-ring-yank-pointer))) " kill-ring))\n")) - (insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n") - (dolist (l (mapcar #'desktop-buffer-info (buffer-list))) - (let ((base (pop l))) - (when (apply #'desktop-save-buffer-p l) - (insert "(" + (let ((buffers (seq-filter (lambda (l) (apply #'desktop-save-buffer-p (cdr l))) + (mapcar #'desktop-buffer-info (buffer-list)))) + (i 0)) + (insert "\n;; Buffer section -- buffers listed in same order as in buffer list:\n") + (when desktop-save-adds-progress-reporter + (insert "(let ((reporter\n") + (insert (format " (make-progress-reporter \"Restoring buffers...\" %s %s )))\n\n" + 0 (length buffers)))) + (dolist (l buffers) + (let ((base (pop l))) + (insert "(" (if (or (not (integerp eager)) (if (zerop eager) nil @@ -1131,7 +1151,12 @@ desktop-save (setcar (nthcdr 1 l) base)) (dolist (e l) (insert "\n " (desktop-value-to-string e))) - (insert ")\n\n")))) + (insert ")\n") + (when desktop-save-adds-progress-reporter + (setq i (1+ i)) + (insert (format " (progress-reporter-update reporter %s)\n\n" i))))) + (when desktop-save-adds-progress-reporter + (insert "(progress-reporter-done reporter))\n"))) (setq default-directory desktop-dirname) ;; When auto-saving, avoid writing if nothing has changed since the last write. -- 2.35.1