changeset 69764:986a4b641e9e

* ibuf-macs.el (define-ibuffer-column): Add a new key: header-mouse-map. * ibuffer.el (ibuffer-name-header-map, ibuffer-size-header-map) (ibuffer-mode-header-map): New keymaps. (ibuffer-update-title-and-summary): Enable mouse face highlighting and keybindings for column headers. (name,size,mode) <define-ibuffer-column>: Add a header-mouse-map property.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sun, 02 Apr 2006 19:17:34 +0000
parents 6c338e8bc3ff
children 1a3385f6eeec
files lisp/ChangeLog lisp/ibuf-macs.el lisp/ibuffer.el
diffstat 3 files changed, 45 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Apr 02 01:08:04 2006 +0000
+++ b/lisp/ChangeLog	Sun Apr 02 19:17:34 2006 +0000
@@ -1,3 +1,15 @@
+2006-04-02  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* ibuf-macs.el (define-ibuffer-column): Add a new key:
+	header-mouse-map. 
+
+	* ibuffer.el (ibuffer-name-header-map, ibuffer-size-header-map)
+	(ibuffer-mode-header-map): New keymaps.
+	(ibuffer-update-title-and-summary): Enable mouse face highlighting
+	and keybindings for column headers.
+	(name,size,mode) <define-ibuffer-column>: Add a header-mouse-map
+	property.
+
 2006-04-02  Drew Adams  <drew.adams@oracle.com>  (tiny change)
 
 	* speedbar.el (speedbar-after-create-hook): Doc fix.
--- a/lisp/ibuf-macs.el	Sun Apr 02 01:08:04 2006 +0000
+++ b/lisp/ibuf-macs.el	Sun Apr 02 19:17:34 2006 +0000
@@ -75,8 +75,8 @@
 ;; (put 'ibuffer-save-marks 'lisp-indent-function 0)
 
 ;;;###autoload
-(defmacro* define-ibuffer-column (symbol (&key name inline props
-					       summarizer) &rest body)
+(defmacro* define-ibuffer-column (symbol (&key name inline props summarizer 
+					       header-mouse-map) &rest body)
   "Define a column SYMBOL for use with `ibuffer-formats'.
 
 BODY will be called with `buffer' bound to the buffer object, and
@@ -115,6 +115,7 @@
 	    ,(if (stringp name)
 		 name
 	       (capitalize (symbol-name symbol))))
+       ,(if header-mouse-map `(put (quote ,sym) 'header-mouse-map ,header-mouse-map))
        ,(if summarizer
 	    ;; Store the name of the summarizing function.
 	    `(put (quote ,sym) 'ibuffer-column-summarizer
--- a/lisp/ibuffer.el	Sun Apr 02 01:08:04 2006 +0000
+++ b/lisp/ibuffer.el	Sun Apr 02 19:17:34 2006 +0000
@@ -829,6 +829,21 @@
     (define-key map (kbd "RET") 'ibuffer-interactive-filter-by-mode)
     map))
 
+(defvar ibuffer-name-header-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(mouse-1)] 'ibuffer-do-sort-by-alphabetic)
+    map))
+
+(defvar ibuffer-size-header-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(mouse-1)] 'ibuffer-do-sort-by-size)
+    map))
+
+(defvar ibuffer-mode-header-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [(mouse-1)] 'ibuffer-do-sort-by-major-mode)
+    map))
+
 (defvar ibuffer-mode-filter-group-map
   (let ((map (make-sparse-keymap)))
     (define-key map [(mouse-1)] 'ibuffer-mouse-toggle-mark)
@@ -1666,6 +1681,7 @@
 
 (define-ibuffer-column name
   (:inline t
+   :header-mouse-map ibuffer-name-header-map
    :props
    ('mouse-face 'highlight 'keymap ibuffer-name-map
 		'ibuffer-name-column t
@@ -1682,6 +1698,7 @@
 
 (define-ibuffer-column size
   (:inline t
+   :header-mouse-map ibuffer-size-header-map
    :summarizer
    (lambda (column-strings)
      (let ((total 0))
@@ -1695,6 +1712,7 @@
 
 (define-ibuffer-column mode
   (:inline t
+   :header-mouse-map ibuffer-mode-header-map
    :props
    ('mouse-face 'highlight
 		'keymap ibuffer-mode-name-map
@@ -2009,12 +2027,18 @@
 		  (setq min (- min)))
 		(let* ((name (or (get sym 'ibuffer-column-name)
 				 (error "Unknown column %s in ibuffer-formats" sym)))
-		       (len (length name)))
-		  (if (< len min)
-		      (ibuffer-format-column name
-					     (- min len)
-					     align)
-		    name))))))
+		       (len (length name))
+		       (hmap (get sym 'header-mouse-map))
+		       (strname (if (< len min)
+				    (ibuffer-format-column name
+							   (- min len)
+							   align)
+				  name)))
+		  (when hmap
+		    (setq
+		     strname 
+		     (propertize strname 'mouse-face 'highlight 'keymap hmap)))
+		  strname)))))
 	 (add-text-properties opos (point) `(ibuffer-title-header t))
 	 (insert "\n")
 	 ;; Add the underlines