;;; Redefines the buffers menu popup to show the recent buffers. ;;; Last edited on 2026-02-08 11:52:25 by stolfi (defun stolfi-direct-recent-buffer-menu (event) "Show the most recently used buffers directly." (interactive "e") (let* ( ( buffers (seq-sort-by #'stolfi-buffer-menu-priority #'< (buffer-list)) ) ;; Take the first 10 buffers from the list ( max-buffers 25 ) ( recent-buffers (if (> (length buffers) max-buffers) (seq-take buffers max-buffers) buffers) ) ;; Create a menu structure: (TITLE (ITEM-NAME . BUFFER-OBJECT) ...) ( menu ( list "Recent Buffers" (cons "Recent" (mapcar (lambda (buf) (cons (buffer-name buf) buf)) recent-buffers) ) ) ) (selection (x-popup-menu event menu)) ) (mouse-set-point event) (when selection (switch-to-buffer selection)) ) ) (defun stolfi-buffer-menu-priority (buf) "Returns a numeric priority (0 = highest) for a buffer." (let* ( ( name (buffer-name buf) ) ) ( cond ( (string-prefix-p "*Buffer List" name) 0 ) ( (string-prefix-p "*compilation" name) 1 ) ( (string-prefix-p "*Shell Command Output" name) 1 ) ( (string-prefix-p " *Minibuf" name) 9 ) ( (string-prefix-p "*Help" name) 9 ) ( t 2 ) ) ) )