Use frame's buffer-predicate instead of doom/{next,previous}-buffer

doom/{next,previous}-buffer was implemented so that these commands could
skip over unreal buffers, and land us on either a real one or the
dashboard. Using the frame's buffer-predicate parameter accomplishes
exactly this, natively.
This commit is contained in:
Henrik Lissner 2018-02-01 19:01:49 -05:00
parent c9e8be1f60
commit 2989296521
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
5 changed files with 27 additions and 26 deletions

View file

@ -48,6 +48,12 @@
"Return non-nil if buffer is in workspace (defaults to current workspace)."
(persp-contain-buffer-p buffer (or workspace (+workspace-current)) nil))
;;;###autoload
(defun +workspace-alien-buffer-p (buffer)
"Return non-nil if BUFFER isn't a member of the current workspace."
(and (get-buffer-window buffer)
(not (+workspace-contains-buffer-p buffer))))
;; --- Getters ----------------------------

View file

@ -70,10 +70,9 @@ Uses `+workspaces-main' to determine the name of the main workspace."
persp-set-last-persp-for-new-frames t
persp-switch-to-added-buffer nil
persp-remove-buffers-from-nil-persp-behaviour nil
;; Don't auto-load on startup
persp-auto-resume-time -1
;; auto-save on kill
persp-auto-save-opt (if noninteractive 0 1))
persp-set-frame-buffer-predicate #'doom-buffer-frame-predicate
persp-auto-resume-time -1 ; Don't auto-load on startup
persp-auto-save-opt (if noninteractive 0 1)) ; auto-save on kill
(add-hook 'persp-mode-hook #'+workspaces|init-persp-mode)
;; Modify `delete-window' to close the workspace if used on the last window
@ -100,6 +99,7 @@ Uses `+workspaces-main' to determine the name of the main workspace."
;;
(defun +workspaces|init-persp-mode ()
(cond (persp-mode
(add-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p)
;; Ensure `persp-kill-buffer-query-function' is last in
;; kill-buffer-query-functions
(remove-hook 'kill-buffer-query-functions 'persp-kill-buffer-query-function)
@ -111,6 +111,7 @@ Uses `+workspaces-main' to determine the name of the main workspace."
(advice-add #'display-buffer :after #'+workspaces*auto-add-buffer)
(advice-add #'doom-buffer-list :override #'+workspace-buffer-list))
(t
(remove-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p)
(advice-remove #'switch-to-buffer #'+workspaces*auto-add-buffer)
(advice-remove #'display-buffer #'+workspaces*auto-add-buffer)
(advice-remove #'doom-buffer-list #'+workspace-buffer-list))))

View file

@ -94,7 +94,7 @@
(:desc "previous..." :prefix "["
:desc "Text size" :nv "[" #'text-scale-decrease
:desc "Buffer" :nv "b" #'doom/previous-buffer
:desc "Buffer" :nv "b" #'previous-buffer
:desc "Diff Hunk" :nv "d" #'git-gutter:previous-hunk
:desc "Todo" :nv "t" #'hl-todo-previous
:desc "Error" :nv "e" #'previous-error
@ -105,7 +105,7 @@
(:desc "next..." :prefix "]"
:desc "Text size" :nv "]" #'text-scale-increase
:desc "Buffer" :nv "b" #'doom/next-buffer
:desc "Buffer" :nv "b" #'next-buffer
:desc "Diff Hunk" :nv "d" #'git-gutter:next-hunk
:desc "Todo" :nv "t" #'hl-todo-next
:desc "Error" :nv "e" #'next-error
@ -154,8 +154,8 @@
:desc "Save buffer" :n "s" #'save-buffer
:desc "Pop scratch buffer" :n "x" #'doom/open-scratch-buffer
:desc "Bury buffer" :n "z" #'bury-buffer
:desc "Next buffer" :n "]" #'doom/next-buffer
:desc "Previous buffer" :n "[" #'doom/previous-buffer
:desc "Next buffer" :n "]" #'next-buffer
:desc "Previous buffer" :n "[" #'previous-buffer
:desc "Sudo edit this file" :n "S" #'doom/sudo-this-file)
(:desc "code" :prefix "c"
@ -298,8 +298,8 @@
;; --- Personal vim-esque bindings ------------------
:n "zx" #'kill-this-buffer
:n "ZX" #'bury-buffer
:n "]b" #'doom/next-buffer
:n "[b" #'doom/previous-buffer
:n "]b" #'next-buffer
:n "[b" #'previous-buffer
:n "]w" #'+workspace/switch-right
:n "[w" #'+workspace/switch-left
:m "gt" #'+workspace/switch-right