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

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

[nongnu] elpa/workroom 895b77f7ce 62/74: Some refactoring


From: ELPA Syncer
Subject: [nongnu] elpa/workroom 895b77f7ce 62/74: Some refactoring
Date: Sun, 27 Nov 2022 16:03:29 -0500 (EST)

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

    Some refactoring
---
 workroom.el | 530 ++++++++++++++++++++++++++++--------------------------------
 1 file changed, 248 insertions(+), 282 deletions(-)

diff --git a/workroom.el b/workroom.el
index 6e22761643..1cbfe79c25 100644
--- a/workroom.el
+++ b/workroom.el
@@ -220,9 +220,6 @@ The value is a mode line terminal like `mode-line-format'."
 (defvar workroom-mode-map (make-sparse-keymap)
   "Keymap for Workroom mode.")
 
-(define-key workroom-mode-map workroom-command-map-prefix
-            workroom-command-map)
-
 (defun workroom-rebind-command-map-prefix ()
   "Rebind command prefix key sequence `workroom-command-map-prefix'."
   (substitute-key-definition
@@ -435,10 +432,9 @@ A copy is returned, so it can be modified with 
side-effects."
   "Return the workroom named NAME.
 
 If no such workroom exists, return nil."
-  (catch 'found
-    (dolist (room workroom--rooms nil)
-      (when (string= name (workroom-name room))
-        (throw 'found room)))))
+  (cl-find name workroom--rooms
+           :key #'workroom-name
+           :test #'string=))
 
 (defun workroom-get-create (name)
   "Return the workroom named NAME.
@@ -456,10 +452,7 @@ that."
 
 (defun workroom-get-default ()
   "Return the default workroom."
-  (cl-block nil
-    (dolist (room workroom--rooms nil)
-      (when (workroom-default-p room)
-        (cl-return room)))))
+  (cl-find-if #'workroom-default-p workroom--rooms))
 
 (defun workroom-generate-new-room-name (name)
   "Return a string that isn't the name of any workroom based on NAME.
@@ -487,10 +480,9 @@ Choose the workroom's name using 
`workroom-generate-new-room-name'."
   "Return the view of ROOM named NAME.
 
 If no such view exists, return nil."
-  (catch 'found
-    (dolist (view (workroom-view-list room) nil)
-      (when (string= name (workroom-view-name view))
-        (throw 'found view)))))
+  (cl-find name (workroom-view-list room)
+           :key #'workroom-view-name
+           :test #'string=))
 
 (defun workroom-view-get-create (room name)
   "Return the view of ROOM named NAME.
@@ -500,7 +492,7 @@ If no such view exists, create a new one named NAME and 
return that."
     (unless view
       (setq view (workroom--make-view :name name))
       (setf (workroom--room-view-list room)
-            (nconc (workroom--room-view-list room) `(,view))))
+            (nconc (workroom--room-view-list room) (list view))))
     view))
 
 (defun workroom-generate-new-view-name (room name)
@@ -516,7 +508,7 @@ name."
       (let ((n 2))
         (while t
           (let ((str (format "%s<%i>" name n)))
-            (when (not (workroom-view-get room str))
+            (unless (workroom-view-get room str)
               (cl-return str))
             (cl-incf n)))))))
 
@@ -845,9 +837,9 @@ switch."
                      room workroom-default-view-name)
                   v)))))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (unless (workroom-view-p view)
-    (signal 'wrong-type-argument `(workroom-view-p . ,view)))
+    (signal 'wrong-type-argument (cons 'workroom-view-p view)))
   (when (and (not (eq view (workroom-current-view)))
              (workroom-view-frame view))
     (error "Cannot switch to a view already in use in another frame"))
@@ -878,15 +870,16 @@ switch."
 ROOM is should be workroom object, or a name of a workroom object."
   (interactive
    (workroom--require-mode-enable
-     `(,(workroom--read-to-switch
-         "Switch to workroom"
-         (cond
-          ((and (eq (car (workroom-previous-room-list))
-                    (workroom-current-room))
-                (> (length (workroom-previous-room-list)) 1))
-           (workroom-name (cadr (workroom-previous-room-list))))
-          ((car (workroom-previous-room-list))
-           (workroom-name (car (workroom-previous-room-list)))))))))
+     (list
+      (workroom--read-to-switch
+       "Switch to workroom"
+       (cond
+        ((and (eq (car (workroom-previous-room-list))
+                  (workroom-current-room))
+              (> (length (workroom-previous-room-list)) 1))
+         (workroom-name (cadr (workroom-previous-room-list))))
+        ((car (workroom-previous-room-list))
+         (workroom-name (car (workroom-previous-room-list)))))))))
   (setq room
         (if (stringp room)
             (if (string-empty-p room)
@@ -914,10 +907,10 @@ ROOM is should be a workroom, or a name of a workroom."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (unless (workroomp room)
-    (signal 'wrong-type-argument `(workroomp . ,room)))
+    (signal 'wrong-type-argument (cons 'workroomp room)))
   (when (workroom-default-p room)
     (error "Cannot kill default workroom"))
   (when (eq room (workroom-current-room))
@@ -963,10 +956,10 @@ ROOM is should be a workroom, or a name of a workroom."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (unless (workroomp room)
-    (signal 'wrong-type-argument `(workroomp . ,room)))
+    (signal 'wrong-type-argument (cons 'workroomp room)))
   (let ((buffers (workroom-buffer-list room)))
     (workroom-kill room)
     (let ((rooms (remove (workroom-get-default) workroom--rooms)))
@@ -1002,17 +995,17 @@ should be in the workroom ROOM."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (setq view (if (stringp view)
                  (or (workroom-view-get room view)
                      (signal 'wrong-type-argument
-                             `(workroom-view-p . ,room)))
+                             (cons 'workroom-view-p room)))
                view))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (unless (workroom-view-p view)
-    (signal 'wrong-type-argument `(workroom-view-p . ,view)))
+    (signal 'wrong-type-argument (cons 'workroom-view-p view)))
   (when (and room view)
     (when (eq view (workroom-current-view))
       (workroom-switch-view
@@ -1040,10 +1033,10 @@ ROOM is should be workroom object, or a name of a 
workroom object."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (setf (workroom--room-name room) new-name))
 
 (defun workroom-rename-view (room view new-name)
@@ -1072,17 +1065,17 @@ ROOM is should be workroom object, or a name of a 
workroom object."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (setq view (if (stringp view)
                  (or (workroom-view-get room view)
                      (signal 'wrong-type-argument
-                             `(workroom-view-live-p . ,room)))
+                             (cons 'workroom-view-live-p room)))
                view))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (unless (workroom-view-live-p view)
-    (signal 'wrong-type-argument `(workroom-view-live-p . ,view)))
+    (signal 'wrong-type-argument (cons 'workroom-view-live-p view)))
   (setf (workroom--view-name view) new-name))
 
 (defun workroom-clone (room name)
@@ -1097,10 +1090,10 @@ ROOM is should be workroom object, or a name of a 
workroom object."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (let ((clone
          (workroom--make-room
           :name name
@@ -1141,17 +1134,17 @@ ROOM is should be workroom object, or a name of a 
workroom object."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (setq view (if (stringp view)
                  (or (workroom-view-get room view)
                      (signal 'wrong-type-argument
-                             `(workroom-view-live-p . ,room)))
+                             (cons 'workroom-view-live-p room)))
                view))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (unless (workroom-view-live-p view)
-    (signal 'wrong-type-argument `(workroom-view-live-p . ,view)))
+    (signal 'wrong-type-argument (cons 'workroom-view-live-p view)))
   (let ((clone
          (workroom--make-view
           :name name
@@ -1159,7 +1152,7 @@ ROOM is should be workroom object, or a name of a 
workroom object."
           :window-config-writable
           (workroom--view-window-config-writable view))))
     (setf (workroom--room-view-list room)
-          (nconc (workroom--room-view-list room) `(,clone)))
+          (nconc (workroom--room-view-list room) (list clone)))
     clone))
 
 (defun workroom-add-buffer (buffer &optional room)
@@ -1183,10 +1176,10 @@ If ROOM is the default workroom, do nothing."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                (or room (workroom-current-room))))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (unless (workroom-member-buffer-p room buffer)
     (funcall (workroom--room-buffer-manager room)
              room :add-buffer buffer)))
@@ -1213,10 +1206,10 @@ If ROOM is the default workroom, kill buffer."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                (or room (workroom-current-room))))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (when (workroom-member-buffer-p room buffer)
     (funcall (workroom--room-buffer-manager room)
              room :remove-buffer buffer)))
@@ -1254,37 +1247,29 @@ ACTION and ARGS are also described there."
   (setf (workroom-buffer-manager-data room)
         (cl-delete-if-not #'buffer-live-p
                           (workroom-buffer-manager-data room)))
-  (pcase action
-    (:initialize
-     (cl-destructuring-bind () args
-       (setf (workroom-buffer-manager-data room)
-             `(,(get-scratch-buffer-create)))))
-    (:list-buffers
-     (cl-destructuring-bind () args
-       (workroom-buffer-manager-data room)))
-    (:add-buffer
-     (cl-destructuring-bind (buffer) args
-       (push buffer (workroom-buffer-manager-data room))))
-    (:remove-buffer
-     (cl-destructuring-bind (buffer) args
-       (setf (workroom-buffer-manager-data room)
-             (delq buffer (workroom-buffer-manager-data room)))))
-    (:member-buffer-p
-     (cl-destructuring-bind (buffer) args
-       (memq buffer (workroom-buffer-manager-data room))))
-    (:clone
-     (cl-destructuring-bind (source) args
-       (setf (workroom-buffer-manager-data room)
-             (copy-sequence (workroom-buffer-manager-data source)))))
-    (:encode
-     (cl-destructuring-bind () args
-       ;; Nothing, we'll get the buffer list through the fourth
-       ;; argument of `:load'.
-       ))
-    (:load
-     (cl-destructuring-bind (_data buffers) args
-       (setf (workroom-buffer-manager-data room)
-             (copy-sequence buffers))))))
+  (pcase (cons action args)
+    ('(:initialize)
+     (setf (workroom-buffer-manager-data room)
+           (list (get-scratch-buffer-create))))
+    ('(:list-buffers)
+     (workroom-buffer-manager-data room))
+    (`(:add-buffer ,buffer)
+     (push buffer (workroom-buffer-manager-data room)))
+    (`(:remove-buffer ,buffer)
+     (setf (workroom-buffer-manager-data room)
+           (delq buffer (workroom-buffer-manager-data room))))
+    (`(:member-buffer-p ,buffer)
+     (memq buffer (workroom-buffer-manager-data room)))
+    (`(:clone ,source)
+     (setf (workroom-buffer-manager-data room)
+           (copy-sequence (workroom-buffer-manager-data source))))
+    ('(:encode)
+     ;; Nothing, we'll get the buffer list through the fourth
+     ;; argument of `:load'.
+     )
+    (`(:load ,_data ,buffers)
+     (setf (workroom-buffer-manager-data room)
+           (copy-sequence buffers)))))
 
 (defun workroom--default-room-buffer-manager (room action &rest args)
   "The buffer manager of the default workroom.
@@ -1292,48 +1277,40 @@ ACTION and ARGS are also described there."
 Set as the buffer manager function of ROOM with
 `workroom-set-buffer-manager-function', which see.  The value of
 ACTION and ARGS are also described there."
-  (pcase action
-    (:initialize
-     (cl-destructuring-bind () args
-       ;; Nothing.
-       ))
-    (:list-buffers
-     (cl-destructuring-bind () args
-       (buffer-list)))
-    (:add-buffer
-     (cl-destructuring-bind (_buffer) args
-       ;; Nothing, all live buffer are members.
-       ))
-    (:remove-buffer
-     (cl-destructuring-bind (buffer) args
-       ;; All live buffer are members, so the buffer must die to
-       ;; leave us.
-       (kill-buffer buffer)))
-    (:clone
-     (cl-destructuring-bind (_source) args
-       ;; There can't be two default workrooms, so this function can't
-       ;; manage two workrooms.  We'll hand over responsibilities to
-       ;; the default buffer manager.
-       (workroom-set-buffer-manager-function
-        room #'workroom--default-buffer-manager 'do-not-initialize)
-       (setf (workroom-buffer-manager-data room) (buffer-list))))
-    (:member-buffer-p
-     (cl-destructuring-bind (buffer) args
-       ;; All live buffer are members.
-       (buffer-live-p buffer)))
-    (:encode
-     (cl-destructuring-bind () args
-       ;; Nothing, the default workroom can't be encoding (but can
-       ;; indeed be saved, see the action `:load').
-       ))
-    (:load
-     (cl-destructuring-bind (data buffers) args
-       ;; There can't be two default workrooms, so this function can't
-       ;; manage two workrooms.  We'll hand over responsibilities to
-       ;; the default buffer manager.
-       (workroom-set-buffer-manager-function
-        room #'workroom--default-buffer-manager 'do-not-initialize)
-       (workroom--default-buffer-manager room :load data buffers)))))
+  (pcase (cons action args)
+    ('(:initialize)
+     ;; Nothing.
+     )
+    ('(:list-buffers)
+     (buffer-list))
+    (`(:add-buffer ,_buffer)
+     ;; Nothing, all live buffers are members.
+     )
+    (`(:remove-buffer ,buffer)
+     ;; All live buffer are members, so the buffer must die to leave
+     ;; us.
+     (kill-buffer buffer))
+    (`(:member-buffer-p ,buffer)
+     ;; All live buffer are members.
+     (buffer-live-p buffer))
+    (`(:clone ,_source)
+     ;; There can't be two default workrooms, so this function can't
+     ;; manage two workrooms.  We'll hand over responsibilities to
+     ;; the default buffer manager.
+     (workroom-set-buffer-manager-function
+      room #'workroom--default-buffer-manager 'do-not-initialize)
+     (setf (workroom-buffer-manager-data room) (buffer-list)))
+    ('(:encode)
+     ;; Nothing, the default workroom can't be encoding (but can
+     ;; indeed be saved, see the action `:load').
+     )
+    (`(:load ,data ,buffers)
+     ;; There can't be two default workrooms, so this function can't
+     ;; manage two workrooms.  We'll hand over responsibilities to
+     ;; the default buffer manager.
+     (workroom-set-buffer-manager-function
+      room #'workroom--default-buffer-manager 'do-not-initialize)
+     (workroom--default-buffer-manager room :load data buffers))))
 
 
 ;;;; Buffer Menu Integration.
@@ -1507,9 +1484,9 @@ restrict."
 
 (defun workroom--encode-view-1 (view)
   "Encode view VIEW to a writable object."
-  `( :name ,(workroom-view-name view)
-     :window-config ,(workroom-view-window-configuration
-                      view 'writable)))
+  (list :name (workroom-view-name view)
+        :window-config (workroom-view-window-configuration
+                        view 'writable)))
 
 (defun workroom--decode-view-1 (object)
   "Decode encoded view OBJECT to a view."
@@ -1522,13 +1499,13 @@ restrict."
   "Encode workroom ROOM to a writable object.
 
 The buffers are not encoded, they must be encoded separately."
-  `( :name ,(workroom-name room)
-     :view-list ,(mapcar #'workroom--encode-view-1
-                         (workroom-view-list room))
-     :buffer-manager ,(workroom-buffer-manager-function room)
-     :buffer-manager-data ,(funcall
-                            (workroom-buffer-manager-function room)
-                            room :encode)))
+  (list :name (workroom-name room)
+        :view-list (mapcar #'workroom--encode-view-1
+                           (workroom-view-list room))
+        :buffer-manager (workroom-buffer-manager-function room)
+        :buffer-manager-data (funcall
+                              (workroom-buffer-manager-function room)
+                              room :encode)))
 
 (defun workroom--decode-room-1 (object buffers)
   "Decode encoded workroom OBJECT to a workroom.
@@ -1558,9 +1535,9 @@ when ROOM was encoded."
           (when-let ((object (funcall (plist-get (cdr entry) :encoder)
                                       buffer)))
             (setf (cdr tail)
-                  `(( :name ,(buffer-name buffer)
-                      :encoding ,(car entry)
-                      :object ,object)))
+                  (list (list :name (buffer-name buffer)
+                              :encoding (car entry)
+                              :object object)))
             (setq tail (cdr tail))
             (cl-return)))))
     (cdr objects)))
@@ -1575,9 +1552,10 @@ when ROOM was encoded."
                                    workroom-buffer-handler-alist)
                         :decoder)))
         (setf (cdr tail)
-              `((,(plist-get object :name)
-                 . ,(when decoder
-                      (funcall decoder (plist-get object :object))))))
+              (list (cons (plist-get object :name)
+                          (when decoder
+                            (funcall decoder
+                                     (plist-get object :object))))))
         (setq tail (cdr tail))))
     (cdr buffers)))
 
@@ -1589,7 +1567,7 @@ when ROOM was encoded."
 
 (defun workroom-decode-buffer-bookmark (object)
   "Decode OBJECT using `bookmark-jump'."
-  (let* ((buffer nil))
+  (let ((buffer nil))
     (bookmark-jump object (lambda (buf) (setq buffer buf)))
     buffer))
 
@@ -1643,10 +1621,10 @@ any previous bookmark with the same name."
   (setq room (if (stringp room)
                  (or (workroom-get room)
                      (signal 'wrong-type-argument
-                             `(workroom-live-p . ,room)))
+                             (cons 'workroom-live-p room)))
                room))
   (unless (workroom-live-p room)
-    (signal 'wrong-type-argument `(workroom-live-p . ,room)))
+    (signal 'wrong-type-argument (cons 'workroom-live-p room)))
   (bookmark-store
    name `((data . (workroom
                    :version 1
@@ -1664,10 +1642,10 @@ any previous bookmark with the same name."
                                      bookmark)))))
     (pcase (plist-get data :version)
       (1
-       (let* ((buffers (cl-delete-if
-                        #'null
-                        (workroom--decode-buffers
-                         (plist-get data :buffers)))))
+       (let ((buffers (cl-delete-if
+                       #'null
+                       (workroom--decode-buffers
+                        (plist-get data :buffers)))))
          (dolist (wr (plist-get data :rooms))
            (let ((buffer-list (cl-delete-if
                                #'null
@@ -1697,10 +1675,11 @@ any previous bookmark with the same name."
             (if (stringp (car wrs))
                 (or (workroom-get (car wrs))
                     (signal 'wrong-type-argument
-                            `(workroom-live-p . ,(car wrs))))
+                            (cons 'workroom-live-p (car wrs))))
               (car wrs)))
       (unless (workroom-live-p (car wrs))
-        (signal 'wrong-type-argument `(workroom-live-p . ,(car wrs))))
+        (signal 'wrong-type-argument
+                (cons 'workroom-live-p (car wrs))))
       (pop wrs)))
   (bookmark-store
    name
@@ -1708,10 +1687,10 @@ any previous bookmark with the same name."
               :version 1
               :rooms ,(mapcar
                        (lambda (wr)
-                         `( :room ,(workroom--encode-room-1 wr)
-                            :buffers ,(mapcar
-                                       #'buffer-name
-                                       (workroom-buffer-list wr))))
+                         (list :room (workroom--encode-room-1 wr)
+                               :buffers (mapcar
+                                         #'buffer-name
+                                         (workroom-buffer-list wr))))
                        rooms)
               :buffers ,(workroom--encode-buffers
                          (cl-remove-duplicates
@@ -1786,40 +1765,42 @@ any previous bookmark with the same name."
   "Inject workroom restore code in desktop file."
   ;; Inject restoring code.
   (when workroom-mode
-    (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 (bound-and-true-p workroom-mode)
-    (workroom--desktop-restore '%S)))
-(add-hook 'desktop-after-read-hook #'workroom--desktop-restore-%s)
-"
-        time time
-        `( :version 1
-           :default-room ,(workroom--encode-room-1
-                           (workroom-get-default))
-           :other-rooms
-           ,(mapcar
-             (lambda (room)
-               `( :room ,(workroom--encode-room-1 room)
-                  :buffers ,(mapcar #'buffer-name
-                                    (workroom-buffer-list room))))
-             (cl-remove-if #'workroom-default-p
-                           workroom--rooms))
-           :active-views
-           ,(mapcar
-             (lambda (frame)
-               (with-selected-frame frame
-                 (cons (workroom-name (workroom-current-room))
-                       (workroom-view-name (workroom-current-view)))))
-             (cl-remove-if-not #'workroom--frame-manage-p
-                               (frame-list))))
-        time)))))
+    (insert
+     "
+;; Workroom section:"
+     (let ((fn-sym (intern (format "workroom--desktop-restore-%s"
+                                   (format-time-string "%s%N")))))
+       (prin1-to-string
+        `(progn
+           (defun ,fn-sym ()
+             "Restore workrooms."
+             (remove-hook 'desktop-after-read-hook #',fn-sym)
+             (when (bound-and-true-p workroom-mode)
+               (workroom--desktop-restore
+                ',(list
+                   :version 1
+                   :default-room (workroom--encode-room-1
+                                  (workroom-get-default))
+                   :other-rooms
+                   (mapcar
+                    (lambda (room)
+                      (list :room (workroom--encode-room-1 room)
+                            :buffers (mapcar
+                                      #'buffer-name
+                                      (workroom-buffer-list room))))
+                    (cl-remove-if #'workroom-default-p
+                                  workroom--rooms))
+                   :active-views
+                   (mapcar
+                    (lambda (frame)
+                      (with-selected-frame frame
+                        (cons (workroom-name (workroom-current-room))
+                              (workroom-view-name
+                               (workroom-current-view)))))
+                    (cl-remove-if-not #'workroom--frame-manage-p
+                                      (frame-list)))))))
+           (add-hook 'desktop-after-read-hook #',fn-sym))))
+     ?\n)))
 
 (define-minor-mode workroom-desktop-save-mode
   "Toggle saving workrooms with desktop mode."
@@ -1853,107 +1834,92 @@ argument while setting as the buffer manager, PROJECT, 
the project."
          #'buffer-live-p
          (plist-get (workroom-buffer-manager-data room)
                     :blacklist)))
-  (pcase action
-    (:initialize
-     (cl-destructuring-bind (project) args
-       (setf (workroom-buffer-manager-data room)
-             `(:project ,project))))
-    (:list-buffers
-     (cl-destructuring-bind () args
-       (cl-remove-if
-        (let ((blacklist
+  (pcase (cons action args)
+    (`(:initialize ,project)
+     (setf (workroom-buffer-manager-data room)
+           (list :project project)))
+    ('(:list-buffers)
+     (cl-remove-if
+      (let ((blacklist
+             (plist-get (workroom-buffer-manager-data room)
+                        :blacklist)))
+        (lambda (buffer) (memq buffer blacklist)))
+      (append (plist-get (workroom-buffer-manager-data room)
+                         :whitelist)
+              (project-buffers
                (plist-get (workroom-buffer-manager-data room)
-                          :blacklist)))
-          (lambda (buffer) (memq buffer blacklist)))
-        (append (plist-get (workroom-buffer-manager-data room)
-                           :whitelist)
-                (project-buffers
-                 (plist-get (workroom-buffer-manager-data room)
-                            :project))))))
-    (:add-buffer
-     (cl-destructuring-bind (buffer) args
-       ;; Remove from blacklist.
-       (setf (plist-get (workroom-buffer-manager-data room)
-                        :blacklist)
-             (delete buffer
+                          :project)))))
+    (`(:add-buffer ,buffer)
+     ;; Remove from blacklist.
+     (setf (plist-get (workroom-buffer-manager-data room)
+                      :blacklist)
+           (delete buffer
+                   (plist-get (workroom-buffer-manager-data room)
+                              :blacklist)))
+     ;; If it's still not in the list, whitelist it.
+     (unless (workroom--project-buffer-manager
+              room :member-buffer-p buffer)
+       (push buffer (plist-get (workroom-buffer-manager-data room)
+                               :whitelist))))
+    (`(:remove-buffer ,buffer)
+     ;; Remove from whitelist.
+     (setf (plist-get (workroom-buffer-manager-data room)
+                      :whitelist)
+           (delete buffer
+                   (plist-get (workroom-buffer-manager-data room)
+                              :whitelist)))
+     ;; If it's still in the list, blacklist it.
+     (when (workroom--project-buffer-manager
+            room :member-buffer-p buffer)
+       (push buffer (plist-get (workroom-buffer-manager-data room)
+                               :blacklist))))
+    (`(:member-buffer-p ,buffer)
+     (and (not (memq buffer
                      (plist-get (workroom-buffer-manager-data room)
                                 :blacklist)))
-       ;; If it's still not in the list, whitelist it.
-       (unless (workroom--project-buffer-manager
-                room :member-buffer-p buffer)
-         (push buffer (plist-get (workroom-buffer-manager-data room)
-                                 :whitelist)))))
-    (:remove-buffer
-     (cl-destructuring-bind (buffer) args
-       ;; Remove from whitelist.
-       (setf (plist-get (workroom-buffer-manager-data room)
-                        :whitelist)
-             (delete buffer
-                     (plist-get (workroom-buffer-manager-data room)
-                                :whitelist)))
-       ;; If it's still in the list, blacklist it.
-       (when (workroom--project-buffer-manager
-              room :member-buffer-p buffer)
-         (push buffer (plist-get (workroom-buffer-manager-data room)
-                                 :blacklist)))))
-    (:member-buffer-p
-     (cl-destructuring-bind (buffer) args
-       (and (not (memq buffer
-                       (plist-get (workroom-buffer-manager-data room)
-                                  :blacklist)))
-            (or (memq buffer
-                      (plist-get (workroom-buffer-manager-data room)
-                                 :whitelist))
-                (string-prefix-p
-                 (expand-file-name
-                  (file-name-as-directory
-                   (project-root
+          (or (memq buffer
                     (plist-get (workroom-buffer-manager-data room)
-                               :project))))
-                 (expand-file-name
-                  (buffer-local-value 'default-directory buffer)))))))
-    (:clone
-     (cl-destructuring-bind (source) args
-       (cl-destructuring-bind (&key project whitelist blacklist)
-           (workroom-buffer-manager-data source)
-         (setf (workroom-buffer-manager-data room)
-               `( :project ,project
-                  :whitelist ,(copy-sequence whitelist)
-                  :blacklist ,(copy-sequence blacklist))))))
-    (:encode
-     (cl-destructuring-bind () args
-       (cl-destructuring-bind (&key project _whitelist blacklist)
-           (workroom-buffer-manager-data room)
-         `( :project-root ,(project-root project)
-            :blacklist ,(mapcar #'buffer-name blacklist)))))
-    (:load
-     (cl-destructuring-bind (data buffers) args
-       (let ((project (project-current
-                       nil (plist-get data :project-root))))
-         (if project
-             (setf (workroom-buffer-manager-data room)
-                   `( :project ,project
-                      :whitelist ,(cl-set-difference
+                               :whitelist))
+              (string-prefix-p
+               (expand-file-name
+                (file-name-as-directory
+                 (project-root
+                  (plist-get (workroom-buffer-manager-data room)
+                             :project))))
+               (expand-file-name
+                (buffer-local-value 'default-directory buffer))))))
+    (`(:clone ,source)
+     (cl-destructuring-bind (&key project whitelist blacklist)
+         (workroom-buffer-manager-data source)
+       (setf (workroom-buffer-manager-data room)
+             (list :project project
+                   :whitelist (copy-sequence whitelist)
+                   :blacklist (copy-sequence blacklist)))))
+    ('(:encode)
+     (cl-destructuring-bind (&key project _whitelist blacklist)
+         (workroom-buffer-manager-data room)
+       (list :project-root (project-root project)
+             :blacklist (mapcar #'buffer-name blacklist))))
+    (`(:load ,data ,buffers)
+     (let ((project (project-current
+                     nil (plist-get data :project-root))))
+       (if project
+           (setf (workroom-buffer-manager-data room)
+                 (list :project project
+                       :whitelist (cl-set-difference
                                    buffers (project-buffers project))
-                      :blacklist ,(cl-delete-if
+                       :blacklist (cl-delete-if
                                    #'null
                                    (mapcar
                                     #'get-buffer
                                     (plist-get data :blacklist)))))
-           ;; The project no longer exists, so hand over the buffers
-           ;; to the plain default manager.
-           (workroom-set-buffer-manager-function
-            room #'workroom--default-buffer-manager
-            'do-not-initialize)
-           (workroom--default-buffer-manager
-            room :load data buffers)))))))
-
-(defun workroom--project-name (project)
-  "Return a name for project PROJECT."
-  (let ((root (project-root project)))
-    (if (string-match "/\\([^/]+\\)/?\\'" root)
-        (match-string 1 root)
-      root)))
+         ;; The project no longer exists, so hand over the buffers
+         ;; to the plain default manager.
+         (workroom-set-buffer-manager-function
+          room #'workroom--default-buffer-manager
+          'do-not-initialize)
+         (workroom--default-buffer-manager
+          room :load data buffers))))))
 
 (defun workroom-switch-to-project-workroom (name project-root)
   "Switch to a workroom NAME with all buffers in the current project.
@@ -1966,7 +1932,7 @@ prefix argument is given."
                (project-current nil (project-prompt-project-dir))
              (project-current 'maybe-prompt)))
           (root (project-root project))
-          (name (workroom--project-name project)))
+          (name (file-name-base (project-root project))))
      (list
       (read-string
        (format-message "Workname name for project `%s': " name)



reply via email to

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