Set buffer-predicate to spacemacs/useful-buffer-p
Prevent next-buffer, other-buffer, etc. from choosing useless buffers. No need for spacemacs/next-useful-buffer, spacemacs/previous-useful-buffer anymore. Also fix spacemacs/alternate-buffer to respect buffer-predicate. When spacemacs-layouts is used, buffer-predicate filters useful buffer that belong to the current layout.
This commit is contained in:
parent
141be7f8c2
commit
fe60d0fc1e
|
@ -233,7 +233,7 @@ built-in =define-key= function is the best way to do that.
|
|||
#+begin_src emacs-lisp
|
||||
(define-key map new-keybinding function) ; Syntax
|
||||
;; Map H to go to the previous buffer in normal mode
|
||||
(define-key evil-normal-state-map (kbd "H") 'spacemacs/previous-useful-buffer)
|
||||
(define-key evil-normal-state-map (kbd "H") 'previous-buffer)
|
||||
;; Mapping keybinding to another keybinding
|
||||
(define-key evil-normal-state-map (kbd "H") (kbd "^")) ; H goes to beginning of the line
|
||||
#+end_src
|
||||
|
|
|
@ -140,6 +140,15 @@ It runs `tabulated-list-revert-hook', then calls `tabulated-list-print'."
|
|||
|
||||
(setq ns-use-native-fullscreen (not dotspacemacs-fullscreen-use-non-native))
|
||||
|
||||
;; make `next-buffer', `other-buffer', etc. ignore useless buffers (see
|
||||
;; `spacemacs/useless-buffer-p')
|
||||
(let ((buf-pred-entry (assq 'buffer-predicate default-frame-alist)))
|
||||
(if buf-pred-entry
|
||||
;; `buffer-predicate' entry exists, modify it
|
||||
(setcdr buf-pred-entry #'spacemacs/useful-buffer-p)
|
||||
;; `buffer-predicate' entry doesn't exist, create it
|
||||
(push '(buffer-predicate . spacemacs/useful-buffer-p) default-frame-alist)))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Session
|
||||
;; ---------------------------------------------------------------------------
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
;;
|
||||
;;; License: GPLv3
|
||||
|
||||
(require 'cl-lib)
|
||||
|
||||
;; add emacs binary helper functions
|
||||
(defun spacemacs/emacsbin-path ()
|
||||
(interactive)
|
||||
|
@ -217,7 +219,7 @@ automatically applied to."
|
|||
|
||||
|
||||
(defun spacemacs/useless-buffer-p (buffer)
|
||||
"Determines if a buffer is useful."
|
||||
"Determines if a buffer is useless."
|
||||
(let ((buf-paren-major-mode (get (with-current-buffer buffer
|
||||
major-mode)
|
||||
'derived-mode-parent))
|
||||
|
@ -232,6 +234,10 @@ automatically applied to."
|
|||
(when (string-match regexp buf-name)
|
||||
(return t))))))
|
||||
|
||||
(defun spacemacs/useful-buffer-p (buffer)
|
||||
"Determines if a buffer is useful."
|
||||
(not (spacemacs/useless-buffer-p buffer)))
|
||||
|
||||
;; from magnars modified by ffevotte for dedicated windows support
|
||||
(defun spacemacs/rotate-windows (count)
|
||||
"Rotate your windows.
|
||||
|
@ -267,24 +273,6 @@ argument takes the kindows rotate backwards."
|
|||
(interactive "p")
|
||||
(spacemacs/rotate-windows (* -1 count)))
|
||||
|
||||
(defun spacemacs/next-useful-buffer ()
|
||||
"Switch to the next buffer and avoid special buffers."
|
||||
(interactive)
|
||||
(let ((start-buffer (current-buffer)))
|
||||
(next-buffer)
|
||||
(while (and (spacemacs/useless-buffer-p (current-buffer))
|
||||
(not (eq (current-buffer) start-buffer)))
|
||||
(next-buffer))))
|
||||
|
||||
(defun spacemacs/previous-useful-buffer ()
|
||||
"Switch to the previous buffer and avoid special buffers."
|
||||
(interactive)
|
||||
(let ((start-buffer (current-buffer)))
|
||||
(previous-buffer)
|
||||
(while (and (spacemacs/useless-buffer-p (current-buffer))
|
||||
(not (eq (current-buffer) start-buffer)))
|
||||
(previous-buffer))))
|
||||
|
||||
(defun spacemacs/rename-file (filename &optional new-filename)
|
||||
"Rename FILENAME to NEW-FILENAME.
|
||||
|
||||
|
@ -706,13 +694,23 @@ The body of the advice is in BODY."
|
|||
(load-file (buffer-file-name))
|
||||
(ert t))
|
||||
|
||||
(defun spacemacs/alternate-buffer ()
|
||||
(defun spacemacs/alternate-buffer (&optional window)
|
||||
"Switch back and forth between current and last buffer in the
|
||||
current window."
|
||||
(interactive)
|
||||
(if (evil-alternate-buffer)
|
||||
(switch-to-buffer (car (evil-alternate-buffer)))
|
||||
(switch-to-buffer (other-buffer (current-buffer) t))))
|
||||
(let ((current-buffer (window-buffer window))
|
||||
(buffer-predicate
|
||||
(frame-parameter (window-frame window) 'buffer-predicate)))
|
||||
;; switch to first buffer previously shown in this window that matches
|
||||
;; frame-parameter `buffer-predicate'
|
||||
(switch-to-buffer
|
||||
(or (cl-find-if (lambda (buffer)
|
||||
(and (not (eq buffer current-buffer))
|
||||
(or (null buffer-predicate)
|
||||
(funcall buffer-predicate buffer))))
|
||||
(mapcar #'car (window-prev-buffers window)))
|
||||
;; `other-buffer' honors `buffer-predicate' so no need to filter
|
||||
(other-buffer current-buffer t)))))
|
||||
|
||||
(defun current-line ()
|
||||
"Return the line at point as a string."
|
||||
|
|
|
@ -121,11 +121,11 @@
|
|||
"be" 'spacemacs/safe-erase-buffer
|
||||
"bh" 'spacemacs/home
|
||||
"bk" 'spacemacs/kill-matching-buffers-rudely
|
||||
"bn" 'spacemacs/next-useful-buffer
|
||||
"bn" 'next-buffer
|
||||
"bm" 'spacemacs/kill-other-buffers
|
||||
"bN" 'spacemacs/new-empty-buffer
|
||||
"bP" 'spacemacs/copy-clipboard-to-whole-buffer
|
||||
"bp" 'spacemacs/previous-useful-buffer
|
||||
"bp" 'previous-buffer
|
||||
"bR" 'spacemacs/safe-revert-buffer
|
||||
"bs" 'spacemacs/switch-to-scratch-buffer
|
||||
"bY" 'spacemacs/copy-whole-buffer-to-clipboard
|
||||
|
@ -450,9 +450,9 @@
|
|||
(spacemacs|define-transient-state buffer
|
||||
:title "Buffer Selection Transient State"
|
||||
:bindings
|
||||
("n" spacemacs/next-useful-buffer "next")
|
||||
("N" spacemacs/previous-useful-buffer "previous")
|
||||
("p" spacemacs/previous-useful-buffer "previous")
|
||||
("n" next-buffer "next")
|
||||
("N" previous-buffer "previous")
|
||||
("p" previous-buffer "previous")
|
||||
("K" spacemacs/kill-this-buffer "kill")
|
||||
("q" nil "quit" :exit t))
|
||||
(spacemacs/set-leader-keys "b." 'spacemacs/buffer-transient-state/body)
|
||||
|
|
|
@ -91,8 +91,8 @@
|
|||
(define-key evil-visual-state-map (kbd "] e") ":move'>+1")
|
||||
;; (define-key evil-visual-state-map (kbd "[ e") 'move-text-up)
|
||||
;; (define-key evil-visual-state-map (kbd "] e") 'move-text-down)
|
||||
(define-key evil-normal-state-map (kbd "[ b") 'spacemacs/previous-useful-buffer)
|
||||
(define-key evil-normal-state-map (kbd "] b") 'spacemacs/next-useful-buffer)
|
||||
(define-key evil-normal-state-map (kbd "[ b") 'previous-buffer)
|
||||
(define-key evil-normal-state-map (kbd "] b") 'next-buffer)
|
||||
(define-key evil-normal-state-map (kbd "[ f") 'evil-unimpaired/previous-file)
|
||||
(define-key evil-normal-state-map (kbd "] f") 'evil-unimpaired/next-file)
|
||||
(define-key evil-normal-state-map (kbd "] l") 'spacemacs/next-error)
|
||||
|
|
|
@ -77,7 +77,7 @@ This functions is aimed to be used with `spacemacs-space-doc-modificators'."
|
|||
;;FIXME: Need to redesign this.. One day.
|
||||
(if flag
|
||||
(progn
|
||||
;; HACK: Hide the original buffer from `spacemacs/previous-useful-buffer'.
|
||||
;; HACK: Hide the original buffer from `spacemacs/useful-buffer-p'.
|
||||
(unless (and (string-prefix-p "*" (buffer-name))
|
||||
(string-suffix-p "*" (buffer-name)))
|
||||
(rename-buffer (format "*%s*" (buffer-name))))
|
||||
|
|
Loading…
Reference in New Issue