;;; 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.
(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))
;; (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
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
,(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)
'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)))