;;; ibuf-ext.el --- extensions for ibuffer
;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;; 2005 Free Software Foundation, Inc.
+;; 2005, 2006 Free Software Foundation, Inc.
;; Author: Colin Walters <walters@verbum.org>
;; Maintainer: John Paul Wallington <jpw@gnu.org>
If a function, it will be called with the buffer as an argument, and
should return non-nil if this buffer should not be shown."
:type '(repeat (choice regexp function))
+ :require 'ibuf-ext
:group 'ibuffer)
(defcustom ibuffer-always-show-predicates nil
buf
(cdr filter))))))))))
-(defun ibuffer-generate-filter-groups (bmarklist)
- (let ((filter-group-alist (append ibuffer-filter-groups
- (list (cons "Default" nil)))))
+(defun ibuffer-generate-filter-groups (bmarklist &optional noempty nodefault)
+ (let ((filter-group-alist (if nodefault
+ ibuffer-filter-groups
+ (append ibuffer-filter-groups
+ (list (cons "Default" nil))))))
;; (dolist (hidden ibuffer-hidden-filter-groups)
;; (setq filter-group-alist (ibuffer-delete-alist
;; hidden filter-group-alist)))
(aset vec i hip-crowd)
(incf i)
(setq bmarklist lamers))))
- (let ((ret nil))
+ (let (ret)
(dotimes (j i ret)
- (push (cons (car (nth j filter-group-alist))
- (aref vec j))
- ret))))))
+ (let ((bufs (aref vec j)))
+ (unless (and noempty (null bufs))
+ (push (cons (car (nth j filter-group-alist))
+ bufs)
+ ret))))))))
;;;###autoload
(defun ibuffer-filters-to-filter-group (name)
(defun ibuffer-read-filter-group-name (msg &optional nodefault noerror)
(when (and (not noerror) (null ibuffer-filter-groups))
(error "No filter groups active"))
- (let ((groups (mapcar #'car ibuffer-filter-groups)))
- (completing-read msg (if nodefault
- groups
- (cons "Default" groups))
- nil t)))
+ ;; `ibuffer-generate-filter-groups' returns all non-hidden filter
+ ;; groups, possibly excluding empty groups or Default.
+ ;; We add `ibuffer-hidden-filter-groups' to the list, excluding
+ ;; Default if necessary.
+ (completing-read msg (nconc
+ (ibuffer-generate-filter-groups
+ (ibuffer-current-state-list)
+ (not ibuffer-show-empty-filter-groups)
+ nodefault)
+ (if nodefault
+ (remove "Default" ibuffer-hidden-filter-groups)
+ ibuffer-hidden-filter-groups))
+ nil t))
;;;###autoload
(defun ibuffer-decompose-filter-group (group)
(ibuffer-awhen (with-current-buffer buf
(or buffer-file-name
(and (boundp 'dired-directory)
- (if (stringp dired-directory)
- dired-directory
- (car dired-directory))
- (expand-file-name dired-directory))))
+ (let ((dired-dir
+ (if (stringp dired-directory)
+ dired-directory
+ (car dired-directory))))
+ (and dired-dir
+ (expand-file-name dired-dir))))))
(string-match qualifier it)))
;;;###autoload (autoload 'ibuffer-filter-by-size-gt "ibuf-ext")
(with-current-buffer buf
(memq major-mode ibuffer-help-buffer-modes)))))
+;;;###autoload
+(defun ibuffer-mark-compressed-file-buffers ()
+ "Mark buffers whose associated file is compressed."
+ (interactive)
+ (ibuffer-mark-on-buffer
+ #'(lambda (buf)
+ (with-current-buffer buf
+ (and buffer-file-name
+ (string-match ibuffer-compressed-file-name-regexp
+ buffer-file-name))))))
+
;;;###autoload
(defun ibuffer-mark-old-buffers ()
"Mark buffers which have not been viewed in `ibuffer-old-time' days."