]> code.delx.au - gnu-emacs/blobdiff - lisp/ibuf-ext.el
* server.el (server-edit): No-op if no server buffers exist.
[gnu-emacs] / lisp / ibuf-ext.el
index 4e8f8f61221c27220acfc0eeb25e65bd972243e1..292e158c097273b5d3ea63ba5b14aaa042e7db89 100644 (file)
@@ -1,7 +1,7 @@
 ;;; 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>
@@ -74,6 +74,7 @@ If a regexp, then it will be matched against the buffer's name.
 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
@@ -510,9 +511,11 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
                   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)))
@@ -528,11 +531,13 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
            (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)
@@ -574,11 +579,19 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
 (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)
@@ -1021,10 +1034,12 @@ currently used by buffers."
   (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")
@@ -1446,6 +1461,17 @@ You can then feed the file name(s) to other commands with \\[yank]."
        (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."