[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)
- [nongnu] elpa/workroom dacdde342c 17/74: Add some hooks, (continued)
- [nongnu] elpa/workroom dacdde342c 17/74: Add some hooks, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom e1092127bd 19/74: Add hook for buffer list change, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom d4c499d81f 23/74: Fix the creation invalid workrooms in workroom-switch, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 92866534e9 25/74: Make lines less longer than 75 characters in README, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom e9637846b5 27/74: Rewrite workroom to fix some long-standing problems, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom df98158320 54/74: Bump version to 2.0.3, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom b81e76e0a3 48/74: Bump version to 2.0.1, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 9db06cc7e7 46/74: Bump version to 2.0, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 5def9e5862 73/74: Ignore texinfo.tex while preparing release, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 827dcd2049 55/74: Fix cloning default workroom, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 895b77f7ce 62/74: Some refactoring,
ELPA Syncer <=
- [nongnu] elpa/workroom 4dbc8b5822 69/74: Fix code injection to desktop file, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 23ff6f463e 53/74: Don't fail to restore if the workroom project is non-existant, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom a1f5cc9754 52/74: Make the workroom custom group part of tools group, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 3b7b17e2cc 72/74: Bump version to 2.2.4, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom c50e7219a0 07/74: Make README Codeberg compatible, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 31eabf2547 21/74: Add some comments for explaining the code, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 64b465093e 20/74: Make line no more wide than 75 characters, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 6d159a5566 24/74: Use `string=' to compare workroom and view names, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom a4845ad57f 44/74: Don't switch room in workroom-switch if ROOM is current, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 4c4fd7830c 34/74: Add Winner integration, ELPA Syncer, 2022/11/27