Files
@ 7c20546f038c
Branch filter:
Location: workgroups2/src/workgroups-association.el
7c20546f038c
7.4 KiB
text/x-elisp
Use anaphora
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | ;;; workgroups-association.el --- buffer for workgroup
;;; Commentary:
;;; Code:
(require 'workgroups-structs)
(require 'workgroups-variables)
(require 'workgroups-session)
(defvar wg-buffer-workgroup nil
"Associating each buffer with the workgroup.
In which it most recently appeared.")
(make-variable-buffer-local 'wg-buffer-workgroup)
(defun wg-workgroup-associated-buf-uids (workgroup)
"Return a new list containing all of WORKGROUP's associated buf uids."
(append (wg-workgroup-strong-buf-uids workgroup)
(wg-workgroup-weak-buf-uids workgroup)))
(defun wg-workgroup-associated-bufs (workgroup)
"Return a new list containing all of WORKGROUP's associated bufs."
(delete nil (mapcar 'wg-find-buf-by-uid
(wg-workgroup-associated-buf-uids workgroup))))
(defun wg-workgroup-associated-buffers (workgroup)
"Return a new list containing all of WORKGROUP's associated buffer objects."
(delete nil (mapcar 'wg-restore-buffer
(wg-workgroup-associated-bufs workgroup))))
(defun wg-workgroup-strongly-associate-bufobj (workgroup bufobj)
"Strongly associate BUFOBJ with WORKGROUP."
(let* ((uid (wg-bufobj-uid-or-add bufobj))
(remp (wg-removef-p uid (wg-workgroup-weak-buf-uids workgroup)
:test 'string=))
(addp (wg-pushnew-p uid (wg-workgroup-strong-buf-uids workgroup)
:test 'string=)))
(when (or remp addp)
(wg-flag-workgroup-modified workgroup)
bufobj)))
(defun wg-workgroup-weakly-associate-bufobj (workgroup bufobj)
"Weakly associate BUFOBJ with WORKGROUP."
(let* ((uid (wg-bufobj-uid-or-add bufobj))
(remp (wg-removef-p uid (wg-workgroup-strong-buf-uids workgroup)
:test 'string=))
(addp (wg-pushnew-p uid (wg-workgroup-weak-buf-uids workgroup)
:test 'string=)))
(when (or remp addp)
(wg-flag-workgroup-modified workgroup)
bufobj)))
(defun wg-workgroup-associate-bufobj (workgroup bufobj &optional weak)
"Associate BUFOBJ with WORKGROUP.
WEAK non-nil means weakly associate it. Otherwise strongly associate it."
(if weak (wg-workgroup-weakly-associate-bufobj workgroup bufobj)
(wg-workgroup-strongly-associate-bufobj workgroup bufobj)))
(defun wg-workgroup-dissociate-bufobj (workgroup bufobj)
"Dissociate BUFOBJ from WORKGROUP."
(let* ((uid (wg-bufobj-uid-or-add bufobj))
(rem1p (wg-removef-p uid (wg-workgroup-strong-buf-uids workgroup)
:test 'string=))
(rem2p (wg-removef-p uid (wg-workgroup-weak-buf-uids workgroup)
:test 'string=)))
(when (or rem1p rem2p)
(wg-flag-workgroup-modified workgroup)
bufobj)))
(defun wg-workgroup-dissociate-weakly-associated-buffers (workgroup)
"Dissociate from WORKGROUP all weakly associated buffers."
(when (wg-workgroup-weak-buf-uids workgroup)
(wg-flag-workgroup-modified workgroup)
(setf (wg-workgroup-weak-buf-uids workgroup) nil)))
(defun wg-workgroup-dissociate-strongly-associated-buffers (workgroup)
"Dissociate from WORKGROUP all strongly associated buffers."
(when (wg-workgroup-strong-buf-uids workgroup)
(wg-flag-workgroup-modified workgroup)
(setf (wg-workgroup-strong-buf-uids workgroup) nil)))
(defun wg-workgroup-dissociate-all-buffers (workgroup)
"Dissociate from WORKGROUP all its associated buffers."
(wg-workgroup-dissociate-weakly-associated-buffers workgroup)
(wg-workgroup-dissociate-strongly-associated-buffers workgroup))
(defun wg-auto-dissociate-buffer-hook ()
"`kill-buffer-hook' that automatically dissociates buffers from workgroups."
(when wg-dissociate-buffer-on-kill-buffer
(wg-awhen (wg-current-workgroup t)
(wg-workgroup-dissociate-bufobj it (current-buffer)))))
(defun wg-associate-buffer-with-workgroup (&optional workgroup buffer weak)
"Associate BUFFER with WORKGROUP.
WEAK non-nil means weakly associate BUFFER."
(interactive (list nil nil current-prefix-arg))
(let* ((workgroup (wg-get-workgroup workgroup))
(buffer (or buffer (current-buffer)))
(bname (buffer-name buffer))
(wgname (wg-workgroup-name workgroup)))
(if (wg-workgroup-associate-bufobj workgroup buffer weak)
(wg-message "%s-associated %S with %s"
(if weak "Weakly" "Strongly") bname wgname)
(wg-message "%S is already associated with %s" bname wgname))))
(defun wg-associate-visible-buffers-with-workgroup (&optional workgroup weak)
"Associate all buffers visible in `selected-frame' with WORKGROUP.
WEAK non-nil means weakly associate them. Otherwise strongly
associate them."
(interactive (list nil current-prefix-arg))
(let ((workgroup (wg-get-workgroup workgroup))
(buffers (mapcar 'window-buffer (window-list))))
(dolist (buffer buffers)
(wg-workgroup-associate-bufobj workgroup buffer weak))
(wg-fontified-message
(:cmd (format "%s associated: " (if weak "Weakly" "Strongly")))
(wg-buffer-list-display buffers))))
(defun wg-dissociate-buffer-from-workgroup (&optional workgroup buffer)
"Dissociate BUFFER from WORKGROUP."
(interactive (list nil nil))
(let ((workgroup (wg-get-workgroup workgroup))
(buffer (or buffer (current-buffer))))
(wg-message
(if (wg-workgroup-dissociate-bufobj workgroup buffer)
"Dissociated %S from %s" "%S isn't associated with %s")
(wg-buffer-name buffer)
(wg-workgroup-name workgroup))))
(defun wg-associate-buffers (workgroup window-or-emacs-window-tree)
"Associate the buffers visible in window elements of
WINDOW-OR-EMACS-WINDOW-TREE with the given WORKGROUP.
WINDOW-OR-EMACS-WINDOW-TREE must be either a window or a tree of
the form produced by `(car (window-tree))'."
(wg-aif (windowp window-or-emacs-window-tree)
(with-current-buffer (window-buffer window-or-emacs-window-tree)
(setq wg-buffer-workgroup workgroup))
(dolist (w (cddr window-or-emacs-window-tree))
(when w (wg-associate-buffers workgroup w)))))
(defun wg-workgroup-bufobj-association-type (workgroup bufobj)
"Return BUFOBJ's association-type in WORKGROUP, or nil if unassociated."
(let ((uid (wg-bufobj-uid-or-add bufobj)))
(or (and (member uid (wg-workgroup-strong-buf-uids workgroup)) 'strong)
(and (member uid (wg-workgroup-weak-buf-uids workgroup)) 'weak))))
(defun wg-associate-frame-buffers ()
"Associate visible buffers with the current workgroup.
Unless it is currently being deactivated."
(wg-awhen (wg-current-workgroup :noerror)
(unless (member it wg-deactivation-list)
(wg-associate-buffers it (car (window-tree))))))
;; (switch-to-buffer) -> (read-buffer-to-switch "Asd")
;; -> internal-complete-buffer-except -> internal-complete-buffer
;; minibuffer-complete minibuffer-completion-table
;; ido-switch-buffer -> buffer-list
;;(global-set-key "\C-d" delete-char)
;; fdefinition
;; (buffer-list)
;; jit-lock-context-fontify
;; (wg-workgroup-weak-buf-uids (wg-current-workgroup))
;; (wg-workgroup-associated-buf-uids (wg-current-workgroup))
;; (wg-workgroup-associated-bufs (wg-current-workgroup))
;; (wg-workgroup-associated-buffers (wg-current-workgroup))
;; (wg-associate-frame-buffers)
;; (wg-workgroup-dissociate-all-buffers (wg-current-workgroup))
;;(fmakunbound 'buffer-list)
;;(define-key (current-global-map) [remap buffer-list] 'wg-buffer-list)
;; (wg-buffer-list)
;;(defun buffer-list (&optional frame)
;; (list (current-buffer)))
(provide 'workgroups-association)
;;; workgroups-association.el ends here
|