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:
parent
c9e8be1f60
commit
2989296521
5 changed files with 27 additions and 26 deletions
|
@ -34,6 +34,13 @@ it if it doesn't exist).")
|
||||||
;; Functions
|
;; Functions
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun doom-buffer-frame-predicate (buf)
|
||||||
|
"To be used as the default frame buffer-predicate parameter. Returns nil if
|
||||||
|
BUF should be skipped over by functions like `next-buffer' and `other-buffer'."
|
||||||
|
(or (doom-real-buffer-p buf)
|
||||||
|
(eq buf (doom-fallback-buffer))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun doom-fallback-buffer ()
|
(defun doom-fallback-buffer ()
|
||||||
"Returns the fallback buffer, creating it if necessary. By default this is the
|
"Returns the fallback buffer, creating it if necessary. By default this is the
|
||||||
|
@ -279,17 +286,3 @@ processes killed."
|
||||||
(delete-process p)
|
(delete-process p)
|
||||||
(cl-incf n))))
|
(cl-incf n))))
|
||||||
n))
|
n))
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun doom/next-buffer ()
|
|
||||||
"Switch to the next real buffer, skipping non-real buffers. See
|
|
||||||
`doom-real-buffer-p' for what 'real' means."
|
|
||||||
(interactive)
|
|
||||||
(doom--cycle-real-buffers +1))
|
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun doom/previous-buffer ()
|
|
||||||
"Switch to the previous real buffer, skipping non-real buffers. See
|
|
||||||
`doom-real-buffer-p' for what 'real' means."
|
|
||||||
(interactive)
|
|
||||||
(doom--cycle-real-buffers -1))
|
|
||||||
|
|
|
@ -481,6 +481,8 @@ character that looks like a space that `whitespace-mode' won't affect.")
|
||||||
(global-eldoc-mode -1)
|
(global-eldoc-mode -1)
|
||||||
;; simple name in frame title
|
;; simple name in frame title
|
||||||
(setq-default frame-title-format '("DOOM Emacs"))
|
(setq-default frame-title-format '("DOOM Emacs"))
|
||||||
|
;; make `next-buffer', `other-buffer', etc. ignore unreal buffers
|
||||||
|
(push '(buffer-predicate . doom-buffer-frame-predicate) default-frame-alist)
|
||||||
;; draw me like one of your French editors
|
;; draw me like one of your French editors
|
||||||
(tooltip-mode -1) ; relegate tooltips to echo area only
|
(tooltip-mode -1) ; relegate tooltips to echo area only
|
||||||
(menu-bar-mode -1)
|
(menu-bar-mode -1)
|
||||||
|
@ -538,9 +540,8 @@ instead)."
|
||||||
(let ((buf (current-buffer)))
|
(let ((buf (current-buffer)))
|
||||||
(cond ((window-dedicated-p)
|
(cond ((window-dedicated-p)
|
||||||
(delete-window))
|
(delete-window))
|
||||||
((eq buf (doom-fallback-buffer))
|
|
||||||
(doom--cycle-real-buffers -1))
|
|
||||||
((doom-real-buffer-p buf)
|
((doom-real-buffer-p buf)
|
||||||
|
(previous-buffer)
|
||||||
(doom--cycle-real-buffers
|
(doom--cycle-real-buffers
|
||||||
(if (delq buf (doom-real-buffer-list)) -1))
|
(if (delq buf (doom-real-buffer-list)) -1))
|
||||||
(kill-buffer buf))
|
(kill-buffer buf))
|
||||||
|
|
|
@ -48,6 +48,12 @@
|
||||||
"Return non-nil if buffer is in workspace (defaults to current workspace)."
|
"Return non-nil if buffer is in workspace (defaults to current workspace)."
|
||||||
(persp-contain-buffer-p buffer (or workspace (+workspace-current)) nil))
|
(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 ----------------------------
|
;; --- Getters ----------------------------
|
||||||
|
|
||||||
|
|
|
@ -70,10 +70,9 @@ Uses `+workspaces-main' to determine the name of the main workspace."
|
||||||
persp-set-last-persp-for-new-frames t
|
persp-set-last-persp-for-new-frames t
|
||||||
persp-switch-to-added-buffer nil
|
persp-switch-to-added-buffer nil
|
||||||
persp-remove-buffers-from-nil-persp-behaviour nil
|
persp-remove-buffers-from-nil-persp-behaviour nil
|
||||||
;; Don't auto-load on startup
|
persp-set-frame-buffer-predicate #'doom-buffer-frame-predicate
|
||||||
persp-auto-resume-time -1
|
persp-auto-resume-time -1 ; Don't auto-load on startup
|
||||||
;; auto-save on kill
|
persp-auto-save-opt (if noninteractive 0 1)) ; auto-save on kill
|
||||||
persp-auto-save-opt (if noninteractive 0 1))
|
|
||||||
|
|
||||||
(add-hook 'persp-mode-hook #'+workspaces|init-persp-mode)
|
(add-hook 'persp-mode-hook #'+workspaces|init-persp-mode)
|
||||||
;; Modify `delete-window' to close the workspace if used on the last window
|
;; 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 ()
|
(defun +workspaces|init-persp-mode ()
|
||||||
(cond (persp-mode
|
(cond (persp-mode
|
||||||
|
(add-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p)
|
||||||
;; Ensure `persp-kill-buffer-query-function' is last in
|
;; Ensure `persp-kill-buffer-query-function' is last in
|
||||||
;; kill-buffer-query-functions
|
;; kill-buffer-query-functions
|
||||||
(remove-hook 'kill-buffer-query-functions 'persp-kill-buffer-query-function)
|
(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 #'display-buffer :after #'+workspaces*auto-add-buffer)
|
||||||
(advice-add #'doom-buffer-list :override #'+workspace-buffer-list))
|
(advice-add #'doom-buffer-list :override #'+workspace-buffer-list))
|
||||||
(t
|
(t
|
||||||
|
(remove-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p)
|
||||||
(advice-remove #'switch-to-buffer #'+workspaces*auto-add-buffer)
|
(advice-remove #'switch-to-buffer #'+workspaces*auto-add-buffer)
|
||||||
(advice-remove #'display-buffer #'+workspaces*auto-add-buffer)
|
(advice-remove #'display-buffer #'+workspaces*auto-add-buffer)
|
||||||
(advice-remove #'doom-buffer-list #'+workspace-buffer-list))))
|
(advice-remove #'doom-buffer-list #'+workspace-buffer-list))))
|
||||||
|
|
|
@ -94,7 +94,7 @@
|
||||||
|
|
||||||
(:desc "previous..." :prefix "["
|
(:desc "previous..." :prefix "["
|
||||||
:desc "Text size" :nv "[" #'text-scale-decrease
|
: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 "Diff Hunk" :nv "d" #'git-gutter:previous-hunk
|
||||||
:desc "Todo" :nv "t" #'hl-todo-previous
|
:desc "Todo" :nv "t" #'hl-todo-previous
|
||||||
:desc "Error" :nv "e" #'previous-error
|
:desc "Error" :nv "e" #'previous-error
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
|
|
||||||
(:desc "next..." :prefix "]"
|
(:desc "next..." :prefix "]"
|
||||||
:desc "Text size" :nv "]" #'text-scale-increase
|
: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 "Diff Hunk" :nv "d" #'git-gutter:next-hunk
|
||||||
:desc "Todo" :nv "t" #'hl-todo-next
|
:desc "Todo" :nv "t" #'hl-todo-next
|
||||||
:desc "Error" :nv "e" #'next-error
|
:desc "Error" :nv "e" #'next-error
|
||||||
|
@ -154,8 +154,8 @@
|
||||||
:desc "Save buffer" :n "s" #'save-buffer
|
:desc "Save buffer" :n "s" #'save-buffer
|
||||||
:desc "Pop scratch buffer" :n "x" #'doom/open-scratch-buffer
|
:desc "Pop scratch buffer" :n "x" #'doom/open-scratch-buffer
|
||||||
:desc "Bury buffer" :n "z" #'bury-buffer
|
:desc "Bury buffer" :n "z" #'bury-buffer
|
||||||
:desc "Next buffer" :n "]" #'doom/next-buffer
|
:desc "Next buffer" :n "]" #'next-buffer
|
||||||
:desc "Previous buffer" :n "[" #'doom/previous-buffer
|
:desc "Previous buffer" :n "[" #'previous-buffer
|
||||||
:desc "Sudo edit this file" :n "S" #'doom/sudo-this-file)
|
:desc "Sudo edit this file" :n "S" #'doom/sudo-this-file)
|
||||||
|
|
||||||
(:desc "code" :prefix "c"
|
(:desc "code" :prefix "c"
|
||||||
|
@ -298,8 +298,8 @@
|
||||||
;; --- Personal vim-esque bindings ------------------
|
;; --- Personal vim-esque bindings ------------------
|
||||||
:n "zx" #'kill-this-buffer
|
:n "zx" #'kill-this-buffer
|
||||||
:n "ZX" #'bury-buffer
|
:n "ZX" #'bury-buffer
|
||||||
:n "]b" #'doom/next-buffer
|
:n "]b" #'next-buffer
|
||||||
:n "[b" #'doom/previous-buffer
|
:n "[b" #'previous-buffer
|
||||||
:n "]w" #'+workspace/switch-right
|
:n "]w" #'+workspace/switch-right
|
||||||
:n "[w" #'+workspace/switch-left
|
:n "[w" #'+workspace/switch-left
|
||||||
:m "gt" #'+workspace/switch-right
|
:m "gt" #'+workspace/switch-right
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue