Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix over consing #152

Merged
merged 6 commits into from
Jun 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions window-purpose-core.el
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,14 @@ regexp REGEXP."
"Return the purpose of buffer BUFFER-OR-NAME, as determined by the
regexps matched by its name.
REGEXP-CONF is a hash table mapping name regexps to purposes."
(car (remove nil
(purpose--iter-hash
#'(lambda (regexp purpose)
(purpose--buffer-purpose-name-regexp-1 buffer-or-name
regexp
purpose))
regexp-conf))))
(catch 'found
(maphash
#'(lambda (regexp purpose)
(when (purpose--buffer-purpose-name-regexp-1 buffer-or-name
regexp
purpose)
(throw 'found purpose)))
regexp-conf)))
Zulu-Inuoe marked this conversation as resolved.
Show resolved Hide resolved

(defun purpose-buffer-purpose (buffer-or-name)
"Get the purpose of buffer BUFFER-OR-NAME.
Expand Down Expand Up @@ -168,7 +169,7 @@ If no purpose was determined, return `default-purpose'."

(defun purpose-buffers-with-purpose (purpose)
"Return a list of all existing buffers with purpose PURPOSE."
(cl-remove-if-not #'(lambda (buffer)
(cl-delete-if-not #'(lambda (buffer)
Zulu-Inuoe marked this conversation as resolved.
Show resolved Hide resolved
(and (eql purpose (purpose-buffer-purpose buffer))
(not (minibufferp buffer))))
(buffer-list)))
Expand Down
4 changes: 1 addition & 3 deletions window-purpose-utils.el
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,7 @@ Example:
for each entry in hash-table TABLE."
(let (results)
(maphash #'(lambda (key value)
(setq results
(append results
(list (funcall function key value)))))
(push (funcall function key value) results))
Zulu-Inuoe marked this conversation as resolved.
Show resolved Hide resolved
table)
results))

Expand Down
16 changes: 12 additions & 4 deletions window-purpose-x.el
Original file line number Diff line number Diff line change
Expand Up @@ -653,13 +653,21 @@ This function removes the buffer denoted by BUFFER-OR-NAME from all
window-local buffer lists."
(interactive "bBuffer to replace: ")
(let* ((buffer (window-normalize-buffer buffer-or-name))
(purpose (purpose-buffer-purpose buffer))
(other-buffers (delete buffer (purpose-buffers-with-purpose purpose))))
;; Delay calculating other-buffers until we need it
;; This prevents unnecessary calculations on temporary
;; buffers created by `with-temp-buffer' and other likewise
;; non-displayed buffers
(other-buffers-calculated nil)
(other-buffers nil))
Zulu-Inuoe marked this conversation as resolved.
Show resolved Hide resolved
(dolist (window (window-list-1 nil nil t))
(if (eq (window-buffer window) buffer)
(unless (window--delete window t t)
(let ((dedicated (purpose-window-purpose-dedicated-p window))
(deletable (window-deletable-p window)))
(let* ((purpose (purpose-buffer-purpose buffer))
(dedicated (purpose-window-purpose-dedicated-p window))
(deletable (window-deletable-p window)))
Zulu-Inuoe marked this conversation as resolved.
Show resolved Hide resolved
(unless other-buffers-calculated
(setq other-buffers (delete buffer (purpose-buffers-with-purpose purpose))
other-buffers-calculated t))
(cond
((and dedicated other-buffers)
;; dedicated, so replace with a buffer with the same purpose
Expand Down