Follow coding conventions.
[bpt/emacs.git] / lisp / ibuf-macs.el
index 8d3033a..13e5636 100644 (file)
@@ -1,14 +1,12 @@
 ;;; ibuf-macs.el --- macros for ibuffer
 
-;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <walters@verbum.org>
 ;; Created: 6 Dec 2001
-;; X-RCS: $Id: ibuf-macs.el,v 1.6 2001/12/11 22:47:09 walters Exp $
-;; URL: http://cvs.verbum.org/ibuffer
 ;; Keywords: buffer, convenience
 
-;; This file is not currently part of GNU Emacs.
+;; This file is part of GNU Emacs.
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License as
 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
+;;; Commentary:
+
 ;;; Code:
 
+(eval-when-compile
+  (require 'cl))
+
 ;; From Paul Graham's "ANSI Common Lisp", adapted for Emacs Lisp here.
 (defmacro ibuffer-aif (test true-body &rest false-body)
   "Evaluate TRUE-BODY or FALSE-BODY depending on value of TEST.
@@ -60,7 +63,7 @@ During evaluation of body, bind `it' to the value returned by TEST."
             (save-excursion
               ,@body))
         (with-current-buffer ,bufsym
-          (ibuffer-insert-buffers-and-marks
+          (ibuffer-redisplay-engine
            ;; Get rid of dead buffers
            (delq nil
                  (mapcar #'(lambda (e) (when (buffer-live-p (car e))
@@ -70,7 +73,8 @@ During evaluation of body, bind `it' to the value returned by TEST."
 ;; (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
@@ -80,7 +84,9 @@ will be `buffer'.
 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
@@ -105,6 +111,14 @@ change its definition, you should explicitly call
            ,(if (stringp name)
                 name
               (capitalize (symbol-name symbol))))
+       ,(if summarizer
+           ;; Store the name of the summarizing function.
+           `(put (quote ,sym) 'ibuffer-column-summarizer
+                 (quote ,summarizer)))
+       ,(if summarizer
+           ;; This will store the actual values of the column
+           ;; summary.
+           `(put (quote ,sym) 'ibuffer-column-summary nil))
        :autoload-end)))
 ;; (put 'define-ibuffer-column 'lisp-indent-function 'defun)
 
@@ -215,7 +229,7 @@ macro for exactly what it does."
                                  'ibuffer-map-deletion-lines)
                                 (t
                                  'ibuffer-map-marked-lines))
-                             #'(lambda (buf mark beg end)
+                             #'(lambda (buf mark)
                                  ,(if (eq modifier-p :maybe)
                                       `(let ((ibuffer-tmp-previous-buffer-modification
                                               (buffer-modified-p buf)))