+(defun Buffer-menu-sort (column)
+ "Sort the buffer menu by COLUMN."
+ (interactive "P")
+ (when column
+ (setq column (prefix-numeric-value column))
+ (if (< column 2) (setq column 2))
+ (if (> column 5) (setq column 5)))
+ (setq Buffer-menu-sort-column column)
+ (let (buffer-read-only l buf m1 m2)
+ (save-excursion
+ (Buffer-menu-beginning)
+ (while (not (eobp))
+ (when (buffer-live-p (setq buf (get-text-property (+ (point) 4) 'buffer)))
+ (setq m1 (char-after)
+ m1 (if (memq m1 '(?> ?D)) m1)
+ m2 (char-after (+ (point) 2))
+ m2 (if (eq m2 ?S) m2))
+ (if (or m1 m2)
+ (push (list buf m1 m2) l)))
+ (forward-line)))
+ (Buffer-menu-revert)
+ (setq buffer-read-only)
+ (save-excursion
+ (Buffer-menu-beginning)
+ (while (not (eobp))
+ (when (setq buf (assq (get-text-property (+ (point) 4) 'buffer) l))
+ (setq m1 (cadr buf)
+ m2 (cadr (cdr buf)))
+ (when m1
+ (delete-char 1)
+ (insert m1)
+ (backward-char 1))
+ (when m2
+ (forward-char 2)
+ (delete-char 1)
+ (insert m2)))
+ (forward-line)))))
+
+(defun Buffer-menu-make-sort-button (name column)
+ (if (equal column Buffer-menu-sort-column) (setq column nil))
+ (propertize name
+ 'help-echo (if column
+ (if Buffer-menu-use-header-line
+ (concat "mouse-2: sort by " (downcase name))
+ (concat "mouse-2, RET: sort by "
+ (downcase name)))
+ (if Buffer-menu-use-header-line
+ "mouse-2: sort by visited order"
+ "mouse-2, RET: sort by visited order"))
+ 'mouse-face 'highlight
+ 'keymap (let ((map (make-sparse-keymap)))
+ (if Buffer-menu-use-header-line
+ (define-key map [header-line mouse-2]
+ `(lambda (e)
+ (interactive "e")
+ (save-window-excursion
+ (if e (mouse-select-window e))
+ (Buffer-menu-sort ,column))))
+ (define-key map [mouse-2]
+ `(lambda (e)
+ (interactive "e")
+ (if e (mouse-select-window e))
+ (Buffer-menu-sort ,column)))
+ (define-key map "\C-m"
+ `(lambda () (interactive)
+ (Buffer-menu-sort ,column))))
+ map)))
+
+(defun list-buffers-noselect (&optional files-only buffer-list)