;; This file: http://user.it.uu.se/~embe8573/conf/emacs-init/buffer-menu.el (require 'dired) (require 'scroll) (require 'close) (require 'super) (setq Buffer-menu-use-header-line nil) (defvar buffer-menu-buffer-font-lock-keywords '( ("\\*\\(Errors\\|Backtrace\\)\\*" . font-lock-warning-face) ("\\*\\(Group\\|Server\\|Packages\\)\\*" . font-lock-comment-face) ("\\*\\(Help\\|Completions\\|Messages\\|info\\|Apropos\\)\\*" . font-lock-constant-face) ("\\*\\(ielm\\|Article\\)\\*" . 'font-lock-regexp-grouping-backslash) (".* \\(.*\\.txt\\) " (1 font-lock-negation-char-face)) ("[[:space:]]+\\([[:digit:]]+\\) " (1 font-lock-comment-delimiter-face)) ("<.*\\(>\\|\\.\\.\\.\\)" . 'font-lock-regexp-grouping-construct) ("Makefile" . font-lock-comment-face) ("\\(\\*Man\\) \\(.*\\)\\(\\*\\)" (1 font-lock-type-face) (2 'font-lock-regexp-grouping-construct) (3 font-lock-type-face) ) (".* \\(.*\\.\\(el\\|cc?\\|cpp\\)\\) "(1 font-lock-string-face)) ("\\*w3m\\*" . font-lock-function-name-face) ("#[[:alnum:]]* " . font-lock-doc-face) (".* \\(.*\\.html?\\) " (1 font-lock-doc-face)) (".* \\(.*\\.\\(hh?\\|tex\\)\\) " (1 font-lock-variable-name-face)) (".* \\(\\.[[:alnum:]_.-]*\\) " (1 font-lock-builtin-face)) )) (defun buffer-menu-custom-font-lock () (interactive) (let ((font-lock-unfontify-region-function (lambda (start end) (remove-text-properties start end '(font-lock-face nil))))) (font-lock-unfontify-buffer) (set (make-local-variable 'font-lock-defaults) '(buffer-menu-buffer-font-lock-keywords t)) (font-lock-fontify-buffer))) (defun buffer-menu-files-only () (interactive) (switch-to-buffer (list-buffers-noselect (not Buffer-menu-files-only)) ) (buffer-menu-custom-font-lock) ) (defun switch-buffer () (interactive) (switch-to-buffer nil) ) ; BUFFER-OR-NAME (defun Buffer-menu-delete-and-execute () (interactive) (Buffer-menu-delete) (Buffer-menu-execute) ) (defun buffer-menu-kill-and-open () (interactive) (let*((menu-buffer (current-buffer)) (next-buffer (Buffer-menu-buffer nil)) (next-mode (with-current-buffer next-buffer major-mode)) (is-dired (string-equal next-mode "dired-mode"))) (when next-buffer (switch-to-buffer next-buffer) (if (and is-dired (dired-directory-changed-p dired-directory)) (revert-buffer) ) (kill-buffer menu-buffer) ))) (defun switch-to-messages-buffer () (interactive) (switch-to-buffer (messages-buffer)) (goto-char (point-max)) ) (let ((the-map Buffer-menu-mode-map)) (disable-super-global-keys the-map) (set-vertical-keys the-map) (set-close-key the-map) (define-key the-map "m" #'switch-to-messages-buffer) (define-key the-map "\r" #'buffer-menu-kill-and-open) (define-key the-map "d" #'Buffer-menu-delete-and-execute) (define-key the-map "g" #'buffer-menu-files-only) ) (provide 'buffer-menu)