changeset 43103:7f95aeaa47b3

(define-ibuffer-column): Add beginnings of support for a summary column.
author Colin Walters <walters@gnu.org>
date Mon, 04 Feb 2002 03:57:35 +0000
parents 280c82e97c2a
children 2a6ac08c9a18
files lisp/ibuf-macs.el
diffstat 1 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ibuf-macs.el	Mon Feb 04 03:57:19 2002 +0000
+++ b/lisp/ibuf-macs.el	Mon Feb 04 03:57:35 2002 +0000
@@ -71,7 +71,8 @@
 ;; (put 'ibuffer-save-marks 'lisp-indent-function 0)
 
 ;;;###autoload
-(defmacro* define-ibuffer-column (symbol (&key name inline props) &rest body)
+(defmacro* define-ibuffer-column (symbol (&key name inline props
+					       summarizer) &rest body)
   "Define a column SYMBOL for use with `ibuffer-formats'.
 
 BODY will be called with `buffer' bound to the buffer object, and
@@ -81,7 +82,9 @@
 If NAME is given, it will be used as a title for the column.
 Otherwise, the title will default to a capitalized version of the
 SYMBOL's name.  PROPS is a plist of additional properties to add to
-the text, such as `mouse-face'.
+the text, such as `mouse-face'.  And SUMMARIZER, if given, is a
+function which will be passed a list of all the strings in its column;
+it should return a string to display at the bottom.
 
 Note that this macro expands into a `defun' for a function named
 ibuffer-make-column-NAME.  If INLINE is non-nil, then the form will be
@@ -90,8 +93,14 @@
 `ibuffer-recompile-formats'."
   (let* ((sym (intern (concat "ibuffer-make-column-"
 			      (symbol-name symbol))))
-	 (bod-1 `(with-current-buffer buffer
+	 (bod-2 `(with-current-buffer buffer
 		   ,@body))
+	 (bod-1 (if summarizer
+		    `(car
+		      (push ,bod-2
+			    ,(intern (format "ibuffer-summary-for-column-%s"
+					     name))))
+		  bod-2))
 	 (bod (if props
 		 `(propertize
 		   ,bod-1
@@ -106,6 +115,13 @@
 	    ,(if (stringp name)
 		 name
 	       (capitalize (symbol-name symbol))))
+       ,(if summarizer
+	    `(put (quote ,sym) 'ibuffer-column-summarizer
+		  (quote ,summarizer)))
+       ,(if summarizer
+	    `(defvar ,(intern (format "ibuffer-summary-for-column-%s"
+				      name))
+	       nil))
        :autoload-end)))
 ;; (put 'define-ibuffer-column 'lisp-indent-function 'defun)