diff options
author | David Morgan <djm_uk@protonmail.com> | 2022-10-24 21:04:43 +0100 |
---|---|---|
committer | David Morgan <djm_uk@protonmail.com> | 2022-10-24 21:04:43 +0100 |
commit | 955af18b32f821f842d4128e5a766a46ee610b8f (patch) | |
tree | 194983bc2c642c0b68593a67b076d3074b8ca817 | |
parent | 487ed282e73b8b0ad5ba395a33d43b3e0a7f8917 (diff) | |
download | dotfiles-955af18b32f821f842d4128e5a766a46ee610b8f.tar.gz |
Integrate buffer-ring and frog-jump-buffer with perspective.el
-rw-r--r-- | .emacs.d/lisp/init-windows.el | 59 |
1 files changed, 48 insertions, 11 deletions
diff --git a/.emacs.d/lisp/init-windows.el b/.emacs.d/lisp/init-windows.el index 1866726..cd9a600 100644 --- a/.emacs.d/lisp/init-windows.el +++ b/.emacs.d/lisp/init-windows.el @@ -102,29 +102,66 @@ (let ((ring (buffer-ring-ring-ring bfr-ring))) (unless (dynaring-empty-p ring) (dynaring-contains-p ring (buffer-ring--parse-buffer buffer))))))) - (defun frog-jump-buffer-filter-buffer-ring-or-same-mode (buffer) + + (defun frog-jump-buffer-filter-same-mode-in-persp (buffer) + "Check if a BUFFER is the same as the current major mode and perspective." + (let ((current-mode major-mode)) + (and + (with-current-buffer buffer + (eq major-mode current-mode)) + (persp-is-current-buffer buffer)))) + + (defun frog-jump-buffer-filter-persp-buffer-ring-or-same-mode (buffer) + "Check if a BUFFER is in the current buffer-ring, else same major mode and perspective." (let* ((bfr-ring (buffer-ring-current-ring)) (ring (buffer-ring-ring-ring bfr-ring))) (if (dynaring-empty-p ring) - (frog-jump-buffer-filter-same-mode buffer) + (frog-jump-buffer-filter-same-mode-in-persp buffer) (frog-jump-buffer-filter-buffer-ring buffer)))) - ;;(setq frog-jump-buffer-default-filter 'frog-jump-buffer-filter-same-mode) - (setq frog-jump-buffer-default-filter 'frog-jump-buffer-filter-buffer-ring-or-same-mode) - (setq frog-jump-buffer-filter-actions - '(("R" "[Ring]" frog-jump-buffer-filter-buffer-ring))) + (set-face-background 'frog-menu-posframe-background-face "black") - (setq frog-jump-buffer-include-current-buffer nil) + + (setq frog-jump-buffer-include-current-buffer nil + frog-jump-buffer-default-filter 'frog-jump-buffer-filter-persp-buffer-ring-or-same-mode + frog-jump-buffer-use-default-filter-actions t + frog-jump-buffer-filter-actions '((("A" "[all]" frog-jump-buffer-filter-all) + ("M" "[mode]" frog-jump-buffer-filter-same-mode-in-persp) + ("F" "[files]" frog-jump-buffer-filter-file-buffers) + ("R" "[recentf]" frog-jump-buffer-filter-recentf) + ("B" "[Ring]" frog-jump-buffer-filter-buffer-ring) + ("P" "[project]" frog-jump-buffer-filter-same-project) + ("S" "[similar]" frog-jump-buffer-filter-similar-name)))) :bind ("C-," . frog-jump-buffer) ("C-x 4 C-," . frog-jump-buffer-other-window)) -;; TODO perspective integration (use-package buffer-ring :diminish - :hook (emacs-startup . buffer-ring-mode) + :config + (defun persp-buffer-ring-create-and-switch () + "Create and switch to the buffer-ring for the current perspective." + ;; Creating a ring automatically switches to it + (buffer-ring-torus--create-ring (persp-current-name))) + + (defun persp-buffer-ring-switch () + "Switch to the buffer-ring for the current perspective." + (buffer-ring-torus-switch-to-ring (persp-current-name))) + + ;; This is mostly just a convenience, to stop buffer-ring from prompting for the ring to use + (defun persp-buffer-ring-add-buffer () + "Add the current buffer to ring for the current perspective." + (interactive) + (let ((inhibit-message t)) + (buffer-ring-add (persp-current-name)))) + :hook + (emacs-startup . buffer-ring-mode) + (persp-created . persp-buffer-ring-create-and-switch) + (persp-switch . persp-buffer-ring-switch) :bind - ("C-<" . buffer-ring-prev-buffer) - ("C->" . buffer-ring-next-buffer)) + (:map buffer-ring-mode-map + ("C-c C-b a" . persp-buffer-ring-add-buffer) + ("C-<" . buffer-ring-prev-buffer) + ("C->" . buffer-ring-next-buffer))) (use-package cbm :config |