aboutsummaryrefslogtreecommitdiff
path: root/perspective.el
diff options
context:
space:
mode:
authorConstantine Vetoshev <gepardcv@gmail.com>2020-07-19 08:42:30 -0700
committerConstantine Vetoshev <gepardcv@gmail.com>2020-07-19 11:15:30 -0700
commitc2d3542418967b55f05d5b5ba71c9fbfe4cd3d4f (patch)
tree3bf254b0515238251bddca9930a90476401eca7f /perspective.el
parent1fc13646623f42e1d70cf1f651c4b154e12070ca (diff)
Workaround for new Helm buffer listing behavior (v3.6.3+).
Diffstat (limited to 'perspective.el')
-rw-r--r--perspective.el12
1 files changed, 11 insertions, 1 deletions
diff --git a/perspective.el b/perspective.el
index ae40689..c652ecd 100644
--- a/perspective.el
+++ b/perspective.el
@@ -180,6 +180,12 @@ After BODY is evaluated, frame parameters are reset to their original values."
filtering in buffer display modes like ibuffer."
(not (persp-is-current-buffer buf)))
+(defun persp-buffer-list-filter (bufs)
+ "Return the subset of BUFS which is in the current perspective."
+ (cl-loop for buf in bufs
+ if (persp-is-current-buffer (get-buffer buf))
+ collect buf))
+
(defun persp-valid-name-p (name)
"Return T if NAME is a valid perspective name."
(and (not (null name))
@@ -974,6 +980,7 @@ See also `persp-add-buffer'."
(persp-protect
(if (frame-parameter nil 'persp--recursive) (persp-switch (persp-name (frame-parameter nil 'persp--recursive))))))
+
;;;###autoload
(define-minor-mode persp-mode
"Toggle perspective mode.
@@ -983,20 +990,23 @@ named collections of buffers and window configurations."
:keymap persp-mode-map
(if persp-mode
(persp-protect
+ ;; TODO: Convert to nadvice, which has been available since 24.4 and is
+ ;; the earliest Emacs version Perspective supports.
(ad-activate 'switch-to-buffer)
(ad-activate 'display-buffer)
(ad-activate 'set-window-buffer)
(ad-activate 'switch-to-prev-buffer)
(ad-activate 'recursive-edit)
(ad-activate 'exit-recursive-edit)
+ (advice-add 'helm-buffer-list-1 :filter-return #'persp-buffer-list-filter)
(add-hook 'after-make-frame-functions 'persp-init-frame)
(add-hook 'delete-frame-functions 'persp-delete-frame)
(add-hook 'ido-make-buffer-list-hook 'persp-set-ido-buffers)
(setq read-buffer-function 'persp-read-buffer)
(mapc 'persp-init-frame (frame-list))
(setf (persp-current-buffers) (buffer-list))
-
(run-hooks 'persp-mode-hook))
+ (advice-remove 'helm-buffer-list-1 #'persp-buffer-list-filter)
(ad-deactivate-regexp "^persp-.*")
(remove-hook 'delete-frame-functions 'persp-delete-frame)
(remove-hook 'after-make-frame-functions 'persp-init-frame)