diff --git a/emacs.d/functions.el b/emacs.d/functions.el new file mode 100644 index 0000000..7bfa13d --- /dev/null +++ b/emacs.d/functions.el @@ -0,0 +1,6 @@ +(defun buffer-mode (&optional buffer-or-name) + "Returns the major mode associated with a buffer. If buffer-name is ni, return +current buffer's mode." + (buffer-local-value + 'major-mode + (if buffer-or-name (get-buffer buffer-or-name) (current-buffer)))) diff --git a/emacs.d/init.el b/emacs.d/init.el index 846b26e..970172b 100644 --- a/emacs.d/init.el +++ b/emacs.d/init.el @@ -1,4 +1,5 @@ (dolist (f '("packages.el" + "functions.el" "later-init.el" "ui.el" "dired.el" diff --git a/emacs.d/ui.el b/emacs.d/ui.el index df25eb2..10d9c10 100644 --- a/emacs.d/ui.el +++ b/emacs.d/ui.el @@ -161,3 +161,29 @@ compilation-mode)) (popper-mode t) (popper-echo-mode t)) + +(defcustom gered/buffer-name-skip-regexp + (rx bos + (or "*Backtrace*" + "*Compile-Log*" + "*Completions*" + "*Messages*" + "*package*" + "*Warnings*" + "*Async-native-compile-log*") + eos) + "Regular expression matching buffer names to be ignored by `next-buffer' and `previous-buffer'" + :type 'regexp) + +(defcustom gered/buffer-mode-skip-regexp + (rx bos + (or "dired-sidebar-mode") + eos) + "Regular expression matching buffer major modes to be ignored by `next-buffer' and `previous-buffer'" + :type 'regexp) + +(defun gered/buffer-skip-p (window buffer bury-or-kill) + (or (string-match-p gered/buffer-name-skip-regexp (buffer-name buffer)) + (string-match-p gered/buffer-mode-skip-regexp (symbol-name (buffer-mode buffer))))) + +(setq switch-to-prev-buffer-skip 'gered/buffer-skip-p)