# HG changeset patch # User Chong Yidong # Date 1126118914 0 # Node ID d96b22b8de337ce6c8f026bc2550ea4979e40f0b # Parent cc9451bcd3a00805945b888376bbe31f19098b71 *** empty log message *** diff -r cc9451bcd3a0 -r d96b22b8de33 lisp/ChangeLog --- a/lisp/ChangeLog Wed Sep 07 08:46:04 2005 +0000 +++ b/lisp/ChangeLog Wed Sep 07 18:48:34 2005 +0000 @@ -1,3 +1,10 @@ +2005-09-08 Chong Yidong + + * buff-menu.el (Buffer-menu-sort-by-column): New function. + Suggested by Kim F. Storm. + (Buffer-menu-sort-button-map): Global keymap for sort buttons. + (Buffer-menu-make-sort-button): Use global keymap. + 2005-09-06 Stefan Monnier * buff-menu.el (Buffer-menu-make-sort-button): Add docstrings, use diff -r cc9451bcd3a0 -r d96b22b8de33 lisp/buff-menu.el --- a/lisp/buff-menu.el Wed Sep 07 08:46:04 2005 +0000 +++ b/lisp/buff-menu.el Wed Sep 07 18:48:34 2005 +0000 @@ -633,37 +633,40 @@ (insert m2))) (forward-line))))) +(defun Buffer-menu-sort-by-column (&optional e) + "Sort the buffer menu by the column clicked on." + (interactive (list last-input-event)) + (if e (mouse-select-window e)) + (let* ((pos (event-start e)) + (obj (posn-object pos)) + (col (if obj + (get-text-property (cdr obj) 'column (car obj)) + (get-text-property (posn-point pos) 'column)))) + (Buffer-menu-sort col))) + +(defvar Buffer-menu-sort-button-map + (let ((map (make-sparse-keymap))) + ;; This keymap handles both nil and non-nil values for + ;; Buffer-menu-use-header-line. + (define-key map [header-line mouse-1] 'Buffer-menu-sort-by-column) + (define-key map [header-line mouse-2] 'Buffer-menu-sort-by-column) + (define-key map [mouse-2] 'Buffer-menu-sort-by-column) + (define-key map [follow-link] 'mouse-face) + (define-key map "\C-m" 'Buffer-menu-sort-by-column) + map) + "Local keymap for Buffer menu sort buttons.") + (defun Buffer-menu-make-sort-button (name column) (if (equal column Buffer-menu-sort-column) (setq column nil)) - (let* ((downname (downcase name)) - (map (make-sparse-keymap)) - (fun `(lambda (&optional e) - ,(concat "Sort the buffer menu by " downname ".") - (interactive (list last-input-event)) - (if e (mouse-select-window e)) - (Buffer-menu-sort ,column))) - (sym (intern (format "Buffer-menu-sort-by-%s-%s" name column)))) - ;; Use a symbol rather than an anonymous function, to make the output of - ;; C-h k less intimidating. - (fset sym fun) - (setq fun sym) - ;; This keymap handles both nil and non-nil - ;; values for Buffer-menu-use-header-line. - (define-key map [header-line mouse-1] fun) - (define-key map [header-line mouse-2] fun) - (define-key map [mouse-2] fun) - (define-key map [follow-link] 'mouse-face) - (define-key map "\C-m" fun) - (propertize name - 'help-echo (concat - (if Buffer-menu-use-header-line - "mouse-1, mouse-2: sort by " - "mouse-2, RET: sort by ") - ;; No clue what this is for, but I preserved the - ;; behavior, just in case. --Stef - (if column downname "visited order")) - 'mouse-face 'highlight - 'keymap map))) + (propertize name + 'column column + 'help-echo (concat + (if Buffer-menu-use-header-line + "mouse-1, mouse-2: sort by " + "mouse-2, RET: sort by ") + (if column (downcase name) "visited order")) + 'mouse-face 'highlight + 'keymap Buffer-menu-sort-button-map)) (defun list-buffers-noselect (&optional files-only buffer-list) "Create and return a buffer with a list of names of existing buffers.