Emacs: Next/Previous User Buffer ๐
emacs has commands to switch to prev/next buffer.
next-buffer
ใCtrl+x Ctrl+โใ- switch to next buffer.
previous-buffer
ใCtrl+x Ctrl+โใ- switch to previous buffer.
one problem is that they will go thru many buffers user are not interested in cycling thru.
Examples of emacs generated buffers:
*scratch*
*Messages*
*shell*
*Shell Command Output*
*Occur*
*Completions*
*Apropos*
*info*
Prev / Next User Buffers
here's commands that just cycle thru user buffers, or emacs buffers.
(defvar xah-fly-switch-buffer-map nil "repeat key map for `xah-next-user-buffer' etc.") (setq xah-fly-switch-buffer-map (let ((xkmap (make-sparse-keymap))) (define-key xkmap (kbd "<up>") 'xah-previous-emacs-buffer) (define-key xkmap (kbd "<down>") 'xah-next-emacs-buffer) (define-key xkmap (kbd "<left>") 'xah-previous-user-buffer) (define-key xkmap (kbd "<right>") 'xah-next-user-buffer) xkmap)) (defun xah-user-buffer-p () "Return t if current buffer is a user buffer, else nil. A user buffer has buffer name NOT starts with * or space, and is not dired mode, help mode, etc. This function is used by buffer switching command and close buffer command, so that next buffer shown is a user buffer. You can override this function to get your idea of โuser bufferโ. Created: 2016-06-18 Version: 2024-09-23" (interactive) (cond ((string-match "^\*" (buffer-name)) nil) ((eq major-mode 'dired-mode) nil) ((eq major-mode 'eww-mode) nil) ((eq major-mode 'help-mode) nil) (t t))) (defun xah-next-user-buffer () "Switch to the next user buffer. User Buffer here is determined by `xah-user-buffer-p'. Press left or right arrow key to switch to prev next user. Press up or down arrow to switch to prev next emacs buffer. Any other key to exit. URL `http://xahlee.info/emacs/emacs/elisp_next_prev_user_buffer.html' Created: 2016-06-19 Version: 2024-09-23" (interactive) (next-buffer) (let ((i 0)) (while (< i 30) (if (not (xah-user-buffer-p)) (progn (next-buffer) (setq i (1+ i))) (progn (setq i 100))))) (set-transient-map xah-fly-switch-buffer-map)) (defun xah-previous-user-buffer () "Switch to the previous user buffer. User Buffer here is determined by `xah-user-buffer-p'. Press left or right arrow key to switch to prev next user. Press up or down arrow to switch to prev next emacs buffer. Any other key to exit. URL `http://xahlee.info/emacs/emacs/elisp_next_prev_user_buffer.html' Created: 2016-06-19 Version: 2024-05-01" (interactive) (previous-buffer) (let ((i 0)) (while (< i 29) (if (not (xah-user-buffer-p)) (progn (previous-buffer) (setq i (1+ i))) (progn (setq i 100))))) (set-transient-map xah-fly-switch-buffer-map)) (defun xah-next-emacs-buffer () "Switch to the next emacs buffer. Emacs buffer here means `xah-user-buffer-p' return nil. Press left or right arrow key to switch to prev next user. Press up or down arrow to switch to prev next emacs buffer. Any other key to exit. URL `http://xahlee.info/emacs/emacs/elisp_next_prev_user_buffer.html' Created: 2013-05-22 Version: 2024-09-16" (interactive) (next-buffer) (let ((i 0)) (while (and (xah-user-buffer-p) (< i 20)) (setq i (1+ i)) (next-buffer))) (set-transient-map xah-fly-switch-buffer-map)) (defun xah-previous-emacs-buffer () "Switch to the previous emacs buffer. Emacs buffer here means `xah-user-buffer-p' return nil. Press left or right arrow key to switch to prev next user. Press up or down arrow to switch to prev next emacs buffer. Any other key to exit. URL `http://xahlee.info/emacs/emacs/elisp_next_prev_user_buffer.html' Created: 2013-05-22 Version: 2024-09-16" (interactive) (previous-buffer) (let ((i 0)) (while (and (xah-user-buffer-p) (< i 20)) (setq i (1+ i)) (previous-buffer))) (set-transient-map xah-fly-switch-buffer-map))
Latest code in Emacs: Xah Fly Keys ๐ฆ
Be sure to set a easy key for them, such as F11 F12 ใsee Emacs Keys: Define Keyใ