emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/workroom 09ff23553e 22/74: Add desktop saving support


From: ELPA Syncer
Subject: [nongnu] elpa/workroom 09ff23553e 22/74: Add desktop saving support
Date: Sun, 27 Nov 2022 16:03:26 -0500 (EST)

branch: elpa/workroom
commit 09ff23553ee452eba8e6d90c498df31196acc6f7
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>

    Add desktop saving support
---
 workroom.el | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/workroom.el b/workroom.el
index a1bdc51cce..4da3eef0b5 100644
--- a/workroom.el
+++ b/workroom.el
@@ -1040,5 +1040,43 @@ When prefix arg is given, don't restrict." fn)
     (remove-hook 'after-make-frame-functions #'workroom--init-frame)
     (remove-hook 'kill-buffer-hook #'workroom--remove-buffer-refs)))
 
+(defun workroom--desktop-inject-restore-code ()
+  "Inject workroom restore code in desktop file."
+  ;; Save window configuration on all frames.
+  (dolist (frame (frame-list))
+    (when (frame-parameter frame 'workroom-current-room)
+      (with-selected-frame frame
+        (setf (workroom-view-window-config (workroom-current-view))
+              (workroom--save-window-config)))))
+  ;; Inject restoring code.
+  (let ((time (format-time-string "%s%N")))
+    (insert (format "
+;; Workroom section:
+(defun workroom--desktop-restore-%s ()
+  \"Restore workrooms.\"
+  (remove-hook 'desktop-after-read-hook
+               #'workroom--desktop-restore-%s)
+  (when (require 'workroom nil t)
+    (workroom-mode +1)
+    (workroom--restore-rooms '%S)))
+(add-hook 'desktop-after-read-hook #'workroom--desktop-restore-%s)
+"
+                    time time
+                    `(workroom-set
+                      . ,(mapcar #'workroom--encode
+                                 (remove (workroom-get-default)
+                                         workroom--rooms)))
+                    time))))
+
+;;;###autoload
+(define-minor-mode workroom-desktop-save-mode
+  "Toggle saving workrooms with desktop mode."
+  :global t
+  (if workroom-desktop-save-mode
+      (add-hook 'desktop-save-hook
+                #'workroom--desktop-inject-restore-code)
+    (remove-hook 'desktop-save-hook
+                 #'workroom--desktop-inject-restore-code)))
+
 (provide 'workroom)
 ;;; workroom.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]