Merge from emacs-23; up to 2010-05-28T19:18:47Z!juri@jurta.org.
[bpt/emacs.git] / lisp / ibuffer.el
index 539f88e..f7ac24f 100644 (file)
@@ -1,7 +1,6 @@
 ;;; ibuffer.el --- operate on buffers like dired
 
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2011  Free Software Foundation, Inc.
 
 ;; Author: Colin Walters <walters@verbum.org>
 ;; Maintainer: John Paul Wallington <jpw@gnu.org>
 (defvar ibuffer-tmp-hide-regexps)
 (defvar ibuffer-tmp-show-regexps)
 
-(declare-function ibuffer-mark-on-buffer "ibuf-ext" 
+(declare-function ibuffer-mark-on-buffer "ibuf-ext"
                  (func &optional ibuffer-mark-on-buffer-mark group))
-(declare-function ibuffer-format-qualifier "ibuf-ext" (qualifier))
-(declare-function ibuffer-generate-filter-groups "ibuf-ext" 
+(declare-function ibuffer-generate-filter-groups "ibuf-ext"
                  (bmarklist &optional noempty nodefault))
 (declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter))
 
@@ -333,8 +331,9 @@ directory, like `default-directory'."
   :group 'ibuffer)
 
 (defcustom ibuffer-compressed-file-name-regexp
-  "\\.\\(arj\\|bgz\\|bz2\\|gz\\|lzh\\|taz\\|tgz\\|zip\\|z\\)$"
+  "\\.\\(arj\\|bgz\\|bz2\\|gz\\|lzh\\|taz\\|tgz\\|xz\\|zip\\|z\\)$"
   "Regexp to match compressed file names."
+  :version "24.1"                       ; added xz
   :type 'regexp
   :group 'ibuffer)
 
@@ -385,14 +384,66 @@ directory, like `default-directory'."
                       (regexp :tag "To")))
   :group 'ibuffer)
 
+(defvar ibuffer-mode-groups-popup
+  (let ((groups-map (make-sparse-keymap "Filter Groups")))
+    ;; Filter groups
 
-(defvar ibuffer-mode-map nil)
-(defvar ibuffer-mode-operate-map nil)
-(defvar ibuffer-mode-groups-popup nil)
-(unless ibuffer-mode-map
-  (let ((map (make-sparse-keymap))
-       (operate-map (make-sparse-keymap "Operate"))
-       (groups-map (make-sparse-keymap "Filter Groups")))
+    (define-key-after groups-map [filters-to-filter-group]
+      '(menu-item "Create filter group from current filters..."
+        ibuffer-filters-to-filter-group
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
+    (define-key-after groups-map [forward-filter-group]
+      '(menu-item "Move point to the next filter group"
+        ibuffer-forward-filter-group))
+    (define-key-after groups-map [backward-filter-group]
+      '(menu-item "Move point to the previous filter group"
+        ibuffer-backward-filter-group))
+    (define-key-after groups-map [jump-to-filter-group]
+      '(menu-item "Move point to a specific filter group..."
+        ibuffer-jump-to-filter-group))
+    (define-key-after groups-map [kill-filter-group]
+      '(menu-item "Kill filter group named..."
+        ibuffer-kill-filter-group
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
+    (define-key-after groups-map [yank-filter-group]
+      '(menu-item "Yank last killed filter group before..."
+        ibuffer-yank-filter-group
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
+    (define-key-after groups-map [pop-filter-group]
+      '(menu-item "Remove top filter group"
+        ibuffer-pop-filter-group
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
+    (define-key-after groups-map [clear-filter-groups]
+      '(menu-item "Remove all filter groups"
+        ibuffer-clear-filter-groups
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
+    (define-key-after groups-map [pop-filter-group]
+      '(menu-item "Decompose filter group..."
+        ibuffer-pop-filter-group
+        :help "\"Unmake\" a filter group"
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
+    (define-key-after groups-map [save-filter-groups]
+      '(menu-item "Save current filter groups permanently..."
+        ibuffer-save-filter-groups
+        :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)
+        :help "Use a mnemnonic name to store current filter groups"))
+    (define-key-after groups-map [switch-to-saved-filter-groups]
+      '(menu-item "Restore permanently saved filters..."
+        ibuffer-switch-to-saved-filter-groups
+        :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)
+        :help "Replace current filters with a saved stack"))
+    (define-key-after groups-map [delete-saved-filter-groups]
+      '(menu-item "Delete permanently saved filter groups..."
+        ibuffer-delete-saved-filter-groups
+        :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)))
+    (define-key-after groups-map [set-filter-groups-by-mode]
+      '(menu-item "Set current filter groups to filter by mode"
+        ibuffer-set-filter-groups-by-mode))
+
+    groups-map))
+
+(defvar ibuffer-mode-map
+  (let ((map (make-keymap)))
     (define-key map (kbd "0") 'digit-argument)
     (define-key map (kbd "1") 'digit-argument)
     (define-key map (kbd "2") 'digit-argument)
@@ -433,10 +484,8 @@ directory, like `default-directory'."
 
     ;; immediate operations
     (define-key map (kbd "n") 'ibuffer-forward-line)
-    (define-key map (kbd "<down>") 'ibuffer-forward-line)
     (define-key map (kbd "SPC") 'forward-line)
     (define-key map (kbd "p") 'ibuffer-backward-line)
-    (define-key map (kbd "<up>") 'ibuffer-backward-line)
     (define-key map (kbd "M-}") 'ibuffer-forward-next-marked)
     (define-key map (kbd "M-{") 'ibuffer-backwards-next-marked)
     (define-key map (kbd "l") 'ibuffer-redisplay)
@@ -477,9 +526,9 @@ directory, like `default-directory'."
     (define-key map (kbd "/ /") 'ibuffer-filter-disable)
 
     (define-key map (kbd "M-n") 'ibuffer-forward-filter-group)
-    (define-key map (kbd "<right>") 'ibuffer-forward-filter-group)
+    (define-key map "\t" 'ibuffer-forward-filter-group)
     (define-key map (kbd "M-p") 'ibuffer-backward-filter-group)
-    (define-key map (kbd "<left>") 'ibuffer-backward-filter-group)
+    (define-key map [backtab] 'ibuffer-backward-filter-group)
     (define-key map (kbd "M-j") 'ibuffer-jump-to-filter-group)
     (define-key map (kbd "C-k") 'ibuffer-kill-line)
     (define-key map (kbd "C-y") 'ibuffer-yank)
@@ -548,10 +597,10 @@ directory, like `default-directory'."
       '(menu-item "View (other frame)" ibuffer-visit-buffer-other-frame))
     (define-key-after map [menu-bar view ibuffer-update]
       '(menu-item "Update" ibuffer-update
-                 :help "Regenerate the list of buffers"))
+        :help "Regenerate the list of buffers"))
     (define-key-after map [menu-bar view switch-format]
       '(menu-item "Switch display format" ibuffer-switch-format
-                 :help "Toggle between available values of `ibuffer-formats'"))
+        :help "Toggle between available values of `ibuffer-formats'"))
 
     (define-key-after map [menu-bar view dashes]
       '("--"))
@@ -565,28 +614,29 @@ directory, like `default-directory'."
       '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size))
     (define-key-after map [menu-bar view sort do-sort-by-alphabetic]
       '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic
-                 :help "Sort by the alphabetic order of buffer name"))
+        :help "Sort by the alphabetic order of buffer name"))
     (define-key-after map [menu-bar view sort do-sort-by-recency]
       '(menu-item "Sort by view time" ibuffer-do-sort-by-recency
-                 :help "Sort by the last time the buffer was displayed"))
+        :help "Sort by the last time the buffer was displayed"))
     (define-key-after map [menu-bar view sort dashes]
       '("--"))
     (define-key-after map [menu-bar view sort invert-sorting]
       '(menu-item "Reverse sorting order" ibuffer-invert-sorting))
     (define-key-after map [menu-bar view sort toggle-sorting-mode]
       '(menu-item "Switch sorting mode" ibuffer-toggle-sorting-mode
-                 :help "Switch between the various sorting criteria"))
+        :help "Switch between the various sorting criteria"))
 
     (define-key-after map [menu-bar view filter]
       (cons "Filter" (make-sparse-keymap "Filter")))
 
     (define-key-after map [menu-bar view filter filter-disable]
       '(menu-item "Disable all filtering" ibuffer-filter-disable
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
     (define-key-after map [menu-bar view filter filter-by-mode]
       '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode))
     (define-key-after map [menu-bar view filter filter-by-mode]
-      '(menu-item "Add filter by major mode in use..." ibuffer-filter-by-used-mode))
+      '(menu-item "Add filter by major mode in use..."
+        ibuffer-filter-by-used-mode))
     (define-key-after map [menu-bar view filter filter-by-name]
       '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name))
     (define-key-after map [menu-bar view filter filter-by-filename]
@@ -594,158 +644,112 @@ directory, like `default-directory'."
     (define-key-after map [menu-bar view filter filter-by-size-lt]
       '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt))
     (define-key-after map [menu-bar view filter filter-by-size-gt]
-      '(menu-item "Add filter by size greater than..." ibuffer-filter-by-size-gt))
+      '(menu-item "Add filter by size greater than..."
+        ibuffer-filter-by-size-gt))
     (define-key-after map [menu-bar view filter filter-by-content]
-      '(menu-item "Add filter by content (regexp)..." ibuffer-filter-by-content))
+      '(menu-item "Add filter by content (regexp)..."
+        ibuffer-filter-by-content))
     (define-key-after map [menu-bar view filter filter-by-predicate]
-      '(menu-item "Add filter by Lisp predicate..." ibuffer-filter-by-predicate))
+      '(menu-item "Add filter by Lisp predicate..."
+        ibuffer-filter-by-predicate))
     (define-key-after map [menu-bar view filter pop-filter]
       '(menu-item "Remove top filter" ibuffer-pop-filter
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
     (define-key-after map [menu-bar view filter or-filter]
       '(menu-item "OR top two filters" ibuffer-or-filter
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
-                              (cdr ibuffer-filtering-qualifiers))
-                 :help "Create a new filter which is the logical OR of the top two filters"))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
+                     (cdr ibuffer-filtering-qualifiers))
+        :help
+        "Create a new filter which is the logical OR of the top two filters"))
     (define-key-after map [menu-bar view filter negate-filter]
       '(menu-item "Negate top filter" ibuffer-negate-filter
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
     (define-key-after map [menu-bar view filter decompose-filter]
       '(menu-item "Decompose top filter" ibuffer-decompose-filter
-                 :enable (and (featurep 'ibuf-ext) (memq (car ibuffer-filtering-qualifiers) '(or saved not)))
-                 :help "Break down a complex filter like OR or NOT"))
+        :enable (and (featurep 'ibuf-ext)
+                     (memq (car ibuffer-filtering-qualifiers) '(or saved not)))
+        :help "Break down a complex filter like OR or NOT"))
     (define-key-after map [menu-bar view filter exchange-filters]
       '(menu-item "Swap top two filters" ibuffer-exchange-filters
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
-                              (cdr ibuffer-filtering-qualifiers))))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
+                     (cdr ibuffer-filtering-qualifiers))))
     (define-key-after map [menu-bar view filter save-filters]
       '(menu-item "Save current filters permanently..." ibuffer-save-filters
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
-                 :help "Use a mnemnonic name to store current filter stack"))
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
+        :help "Use a mnemnonic name to store current filter stack"))
     (define-key-after map [menu-bar view filter switch-to-saved-filters]
-      '(menu-item "Restore permanently saved filters..." ibuffer-switch-to-saved-filters
-                 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)
-                 :help "Replace current filters with a saved stack"))
+      '(menu-item "Restore permanently saved filters..."
+        ibuffer-switch-to-saved-filters
+        :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)
+        :help "Replace current filters with a saved stack"))
     (define-key-after map [menu-bar view filter add-saved-filters]
-      '(menu-item "Add to permanently saved filters..." ibuffer-add-saved-filters
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
-                 :help "Include already saved stack with current filters"))
+      '(menu-item "Add to permanently saved filters..."
+        ibuffer-add-saved-filters
+        :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
+        :help "Include already saved stack with current filters"))
     (define-key-after map [menu-bar view filter delete-saved-filters]
       '(menu-item "Delete permanently saved filters..."
-                 ibuffer-delete-saved-filters
-                 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)))
-
-    ;; Filter groups
-
-    (define-key-after groups-map [filters-to-filter-group]
-      '(menu-item "Create filter group from current filters..."
-                 ibuffer-filters-to-filter-group
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
-    (define-key-after groups-map [forward-filter-group]
-      '(menu-item "Move point to the next filter group"
-                 ibuffer-forward-filter-group))
-    (define-key-after groups-map [backward-filter-group]
-      '(menu-item "Move point to the previous filter group"
-                 ibuffer-backward-filter-group))
-    (define-key-after groups-map [jump-to-filter-group]
-      '(menu-item "Move point to a specific filter group..."
-                 ibuffer-jump-to-filter-group))
-    (define-key-after groups-map [kill-filter-group]
-      '(menu-item "Kill filter group named..."
-                 ibuffer-kill-filter-group
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
-    (define-key-after groups-map [yank-filter-group]
-      '(menu-item "Yank last killed filter group before..."
-                 ibuffer-yank-filter-group
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
-    (define-key-after groups-map [pop-filter-group]
-      '(menu-item "Remove top filter group"
-                 ibuffer-pop-filter-group
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
-    (define-key-after groups-map [clear-filter-groups]
-      '(menu-item "Remove all filter groups"
-                 ibuffer-clear-filter-groups
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
-    (define-key-after groups-map [pop-filter-group]
-      '(menu-item "Decompose filter group..."
-                 ibuffer-pop-filter-group
-                 :help "\"Unmake\" a filter group"
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
-    (define-key-after groups-map [save-filter-groups]
-      '(menu-item "Save current filter groups permanently..."
-                 ibuffer-save-filter-groups
-                 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)
-                 :help "Use a mnemnonic name to store current filter groups"))
-    (define-key-after groups-map [switch-to-saved-filter-groups]
-      '(menu-item "Restore permanently saved filters..."
-                 ibuffer-switch-to-saved-filter-groups
-                 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)
-                 :help "Replace current filters with a saved stack"))
-    (define-key-after groups-map [delete-saved-filter-groups]
-      '(menu-item "Delete permanently saved filter groups..."
-                 ibuffer-delete-saved-filter-groups
-                 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)))
-    (define-key-after groups-map [set-filter-groups-by-mode]
-      '(menu-item "Set current filter groups to filter by mode"
-                 ibuffer-set-filter-groups-by-mode))
+        ibuffer-delete-saved-filters
+        :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)))
 
     (define-key-after map [menu-bar view filter-groups]
-      (cons "Filter Groups" groups-map))
+      (cons "Filter Groups" ibuffer-mode-groups-popup))
 
     (define-key-after map [menu-bar view dashes2]
       '("--"))
     (define-key-after map [menu-bar view diff-with-file]
       '(menu-item "Diff with file" ibuffer-diff-with-file
-                 :help "View the differences between this buffer and its file"))
+        :help "View the differences between this buffer and its file"))
     (define-key-after map [menu-bar view auto-mode]
       '(menu-item "Toggle Auto Mode" ibuffer-auto-mode
-                 :help "Attempt to automatically update the Ibuffer buffer"))
+        :help "Attempt to automatically update the Ibuffer buffer"))
     (define-key-after map [menu-bar view customize]
       '(menu-item "Customize Ibuffer" ibuffer-customize
-                 :help "Use Custom to customize Ibuffer"))
+        :help "Use Custom to customize Ibuffer"))
 
     (define-key-after map [menu-bar mark]
       (cons "Mark" (make-sparse-keymap "Mark")))
 
     (define-key-after map [menu-bar mark toggle-marks]
       '(menu-item "Toggle marks" ibuffer-toggle-marks
-                 :help "Unmark marked buffers, and mark unmarked buffers"))
+        :help "Unmark marked buffers, and mark unmarked buffers"))
     (define-key-after map [menu-bar mark mark-forward]
       '(menu-item "Mark" ibuffer-mark-forward
-                 :help "Mark the buffer at point"))
+        :help "Mark the buffer at point"))
     (define-key-after map [menu-bar mark unmark-forward]
       '(menu-item "Unmark" ibuffer-unmark-forward
-                 :help "Unmark the buffer at point"))
+        :help "Unmark the buffer at point"))
     (define-key-after map [menu-bar mark mark-by-mode]
       '(menu-item "Mark by mode..." ibuffer-mark-by-mode
-                 :help "Mark all buffers in a particular major mode"))
+        :help "Mark all buffers in a particular major mode"))
     (define-key-after map [menu-bar mark mark-modified-buffers]
       '(menu-item "Mark modified buffers" ibuffer-mark-modified-buffers
-                 :help "Mark all buffers which have been modified"))
+        :help "Mark all buffers which have been modified"))
     (define-key-after map [menu-bar mark mark-unsaved-buffers]
       '(menu-item "Mark unsaved buffers" ibuffer-mark-unsaved-buffers
-                 :help "Mark all buffers which have a file and are modified"))
+        :help "Mark all buffers which have a file and are modified"))
     (define-key-after map [menu-bar mark mark-read-only-buffers]
       '(menu-item "Mark read-only buffers" ibuffer-mark-read-only-buffers
-                 :help "Mark all buffers which are read-only"))
+        :help "Mark all buffers which are read-only"))
     (define-key-after map [menu-bar mark mark-special-buffers]
       '(menu-item "Mark special buffers" ibuffer-mark-special-buffers
-                 :help "Mark all buffers whose name begins with a *"))
+        :help "Mark all buffers whose name begins with a *"))
     (define-key-after map [menu-bar mark mark-dired-buffers]
       '(menu-item "Mark dired buffers" ibuffer-mark-dired-buffers
-                 :help "Mark buffers in dired-mode"))
+        :help "Mark buffers in dired-mode"))
     (define-key-after map [menu-bar mark mark-dissociated-buffers]
       '(menu-item "Mark dissociated buffers" ibuffer-mark-dissociated-buffers
-                 :help "Mark buffers with a non-existent associated file"))
+        :help "Mark buffers with a non-existent associated file"))
     (define-key-after map [menu-bar mark mark-help-buffers]
       '(menu-item "Mark help buffers" ibuffer-mark-help-buffers
-                 :help "Mark buffers in help-mode"))
+        :help "Mark buffers in help-mode"))
     (define-key-after map [menu-bar mark mark-compressed-file-buffers]
-      '(menu-item "Mark compressed file buffers" ibuffer-mark-compressed-file-buffers
-                 :help "Mark buffers which have a file that is compressed"))
+      '(menu-item "Mark compressed file buffers"
+        ibuffer-mark-compressed-file-buffers
+        :help "Mark buffers which have a file that is compressed"))
     (define-key-after map [menu-bar mark mark-old-buffers]
       '(menu-item "Mark old buffers" ibuffer-mark-old-buffers
-                 :help "Mark buffers which have not been viewed recently"))
+        :help "Mark buffers which have not been viewed recently"))
     (define-key-after map [menu-bar mark unmark-all]
       '(menu-item "Unmark All" ibuffer-unmark-all))
 
@@ -754,16 +758,19 @@ directory, like `default-directory'."
 
     (define-key-after map [menu-bar mark mark-by-name-regexp]
       '(menu-item "Mark by buffer name (regexp)..." ibuffer-mark-by-name-regexp
-                 :help "Mark buffers whose name matches a regexp"))
+        :help "Mark buffers whose name matches a regexp"))
     (define-key-after map [menu-bar mark mark-by-mode-regexp]
       '(menu-item "Mark by major mode (regexp)..." ibuffer-mark-by-mode-regexp
-                 :help "Mark buffers whose major mode name matches a regexp"))
+        :help "Mark buffers whose major mode name matches a regexp"))
     (define-key-after map [menu-bar mark mark-by-file-name-regexp]
-      '(menu-item "Mark by file name (regexp)..." ibuffer-mark-by-file-name-regexp
-                 :help "Mark buffers whose file name matches a regexp"))
+      '(menu-item "Mark by file name (regexp)..."
+        ibuffer-mark-by-file-name-regexp
+        :help "Mark buffers whose file name matches a regexp"))
 
-    ;; Operate map is added later
+    map))
 
+(defvar ibuffer-mode-operate-map
+  (let ((operate-map (make-sparse-keymap "Operate")))
     (define-key-after operate-map [do-view]
       '(menu-item "View" ibuffer-do-view))
     (define-key-after operate-map [do-view-other-frame]
@@ -772,47 +779,45 @@ directory, like `default-directory'."
       '(menu-item "Save" ibuffer-do-save))
     (define-key-after operate-map [do-replace-regexp]
       '(menu-item "Replace (regexp)..." ibuffer-do-replace-regexp
-                 :help "Replace text inside marked buffers"))
+        :help "Replace text inside marked buffers"))
     (define-key-after operate-map [do-query-replace]
       '(menu-item "Query Replace..." ibuffer-do-query-replace
-                 :help "Replace text in marked buffers, asking each time"))
+        :help "Replace text in marked buffers, asking each time"))
     (define-key-after operate-map [do-query-replace-regexp]
       '(menu-item "Query Replace (regexp)..." ibuffer-do-query-replace-regexp
-                 :help "Replace text in marked buffers by regexp, asking each time"))
+        :help "Replace text in marked buffers by regexp, asking each time"))
     (define-key-after operate-map [do-print]
       '(menu-item "Print" ibuffer-do-print))
     (define-key-after operate-map [do-toggle-modified]
       '(menu-item "Toggle modification flag" ibuffer-do-toggle-modified))
     (define-key-after operate-map [do-revert]
       '(menu-item "Revert" ibuffer-do-revert
-                 :help "Revert marked buffers to their associated file"))
+        :help "Revert marked buffers to their associated file"))
     (define-key-after operate-map [do-rename-uniquely]
       '(menu-item "Rename Uniquely" ibuffer-do-rename-uniquely
-                 :help "Rename marked buffers to a new, unique name"))
+        :help "Rename marked buffers to a new, unique name"))
     (define-key-after operate-map [do-delete]
       '(menu-item "Kill" ibuffer-do-delete))
     (define-key-after operate-map [do-occur]
       '(menu-item "List lines matching..." ibuffer-do-occur
-                 :help "View all lines in marked buffers matching a regexp"))
+        :help "View all lines in marked buffers matching a regexp"))
     (define-key-after operate-map [do-shell-command-pipe]
       '(menu-item "Pipe to shell command..." ibuffer-do-shell-command-pipe
-                 :help "For each marked buffer, send its contents to a shell command"))
+        :help "For each marked buffer, send its contents to a shell command"))
     (define-key-after operate-map [do-shell-command-pipe-replace]
       '(menu-item "Pipe to shell command (replace)..." ibuffer-do-shell-command-pipe-replace
-                 :help "For each marked buffer, replace its contents with output of shell command"))
+        :help "For each marked buffer, replace its contents with output of shell command"))
     (define-key-after operate-map [do-shell-command-file]
       '(menu-item "Shell command on buffer's file..." ibuffer-do-shell-command-file
-                 :help "For each marked buffer, run a shell command with its file as argument"))
+        :help "For each marked buffer, run a shell command with its file as argument"))
     (define-key-after operate-map [do-eval]
       '(menu-item "Eval..." ibuffer-do-eval
-                 :help "Evaluate a Lisp form in each marked buffer"))
+        :help "Evaluate a Lisp form in each marked buffer"))
     (define-key-after operate-map [do-view-and-eval]
       '(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
-                 :help "Evaluate a Lisp form in each marked buffer while viewing it"))
+        :help "Evaluate a Lisp form in each marked buffer while viewing it"))
 
-    (setq ibuffer-mode-map map
-         ibuffer-mode-operate-map operate-map
-         ibuffer-mode-groups-popup (copy-keymap groups-map))))
+    operate-map))
 
 (define-key ibuffer-mode-groups-popup [kill-filter-group]
   '(menu-item "Kill filter group"
@@ -1053,7 +1058,6 @@ If optional argument SINGLE is non-nil, then also ensure there is only
 one window."
   (interactive "P")
   (let ((buf (ibuffer-current-buffer t)))
-    (bury-buffer (current-buffer))
     (switch-to-buffer buf)
     (when single
       (delete-other-windows))))
@@ -1093,7 +1097,8 @@ one window."
        (line (+ 1 (count-lines 1 (point)))))
     (bury-buffer buf)
     (ibuffer-update nil t)
-    (goto-line line)))
+    (goto-char (point-min))
+    (forward-line (1- line))))
 
 (defun ibuffer-visit-tags-table ()
   "Visit the tags table in the buffer on this line.  See `visit-tags-table'."
@@ -1153,6 +1158,9 @@ a new window in the current frame, splitting vertically."
     (ibuffer-redisplay t)))
 
 (defun ibuffer-shrink-to-fit (&optional owin)
+  ;; Make sure that redisplay is performed, otherwise there can be a
+  ;; bad interaction with code in the window-scroll-functions hook
+  (redisplay t)
   (fit-window-to-buffer nil (when owin (/ (frame-height)
                                          (length (window-list (selected-frame)))))))
 
@@ -1188,7 +1196,7 @@ a new window in the current frame, splitting vertically."
                                  ;; This definitely falls in the
                                  ;; ghetto hack category...
                                  (not (string-match "too small" (cadr err)))))
-                        (apply #'signal err)
+                        (signal (car err) (cdr err))
                       (enlarge-window 3))))))
              (select-window (next-window))
              (switch-to-buffer buf)
@@ -1236,7 +1244,7 @@ a new window in the current frame, splitting vertically."
   (ibuffer-map-on-mark ibuffer-deletion-char func))
 
 (defsubst ibuffer-assert-ibuffer-mode ()
-  (assert (derived-mode-p 'ibuffer-mode))) 
+  (assert (derived-mode-p 'ibuffer-mode)))
 
 (defun ibuffer-buffer-file-name ()
   (or buffer-file-name
@@ -1559,9 +1567,8 @@ If point is on a group name, this function operates on that group."
                                        from-end-p))
                                (setq strlen (length str))
                                (setq str
-                                     ,(ibuffer-compile-make-eliding-form 'str
-                                                                         elide
-                                                                         from-end-p)))))
+                                     ,(ibuffer-compile-make-eliding-form
+                                        'str elide from-end-p)))))
             ;; Now, put these forms together with the rest of the code.
             (let ((callform
                    ;; Is this an "inline" column?  This means we have
@@ -1575,16 +1582,18 @@ If point is on a group name, this function operates on that group."
                   ;; You're not expected to understand this.  Hell, I
                   ;; don't even understand it, and I wrote it five
                   ;; minutes ago.
-                  (insertgenfn (ibuffer-aif (get sym 'ibuffer-column-summarizer)
-                                   ;; I really, really wish Emacs Lisp had closures.
-                                   (lambda (arg sym)
-                                     `(insert
-                                       (let ((ret ,arg))
-                                         (put ',sym 'ibuffer-column-summary
-                                              (cons ret (get ',sym 'ibuffer-column-summary)))
-                                         ret)))
-                                 (lambda (arg sym)
-                                   `(insert ,arg))))
+                  (insertgenfn
+                    (ibuffer-aif (get sym 'ibuffer-column-summarizer)
+                        ;; I really, really wish Emacs Lisp had closures.
+                        (lambda (arg sym)
+                          `(insert
+                            (let ((ret ,arg))
+                              (put ',sym 'ibuffer-column-summary
+                                   (cons ret (get ',sym
+                                                  'ibuffer-column-summary)))
+                              ret)))
+                      (lambda (arg sym)
+                        `(insert ,arg))))
                   (mincompform `(< strlen ,(if (integerp min)
                                                min
                                              'min)))
@@ -1617,7 +1626,8 @@ If point is on a group name, this function operates on that group."
                              `(strlen (length str))))
                           outforms)
                     (setq outforms
-                          (append outforms (list (funcall insertgenfn 'str sym)))))
+                          (append outforms
+                                   (list (funcall insertgenfn 'str sym)))))
                 ;; The simple case; just insert the string.
                 (push (funcall insertgenfn callform sym) outforms))
               ;; Finally, return a `let' form which binds the
@@ -2063,7 +2073,7 @@ the value of point at the beginning of the line for that buffer."
                                  name)))
                  (when hmap
                    (setq
-                    strname 
+                    strname
                     (propertize strname 'mouse-face 'highlight 'keymap hmap)))
                  strname)))))
         (add-text-properties opos (point) `(ibuffer-title-header t))
@@ -2188,6 +2198,9 @@ If optional arg SILENT is non-nil, do not display progress messages."
              ibuffer-header-line-format)))
 
 (defun ibuffer-sort-bufferlist (bmarklist)
+  (unless ibuffer-sorting-functions-alist
+    ;; make sure the sorting functions are loaded
+    (require 'ibuf-ext))
   (let* ((sortdat (assq ibuffer-sorting-mode
                        ibuffer-sorting-functions-alist))
         (func (caddr sortdat)))
@@ -2274,7 +2287,8 @@ If optional arg SILENT is non-nil, do not display progress messages."
       (setq buffer-read-only t)
       (set-buffer-modified-p ibuffer-did-modification)
       (setq ibuffer-did-modification nil)
-      (goto-line (1+ orig)))))
+      (goto-char (point-min))
+      (forward-line orig))))
 
 (defun ibuffer-quit ()
   "Quit this `ibuffer' session.
@@ -2609,6 +2623,399 @@ will be inserted before the group at point."
   (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
   (run-mode-hooks 'ibuffer-mode-hook))
 
+\f
+;;; Start of automatically extracted autoloads.
+\f
+;;;### (autoloads (ibuffer-do-occur ibuffer-mark-dired-buffers ibuffer-mark-read-only-buffers
+;;;;;;  ibuffer-mark-special-buffers ibuffer-mark-old-buffers ibuffer-mark-compressed-file-buffers
+;;;;;;  ibuffer-mark-help-buffers ibuffer-mark-dissociated-buffers
+;;;;;;  ibuffer-mark-unsaved-buffers ibuffer-mark-modified-buffers
+;;;;;;  ibuffer-mark-by-mode ibuffer-mark-by-file-name-regexp ibuffer-mark-by-mode-regexp
+;;;;;;  ibuffer-mark-by-name-regexp ibuffer-copy-filename-as-kill
+;;;;;;  ibuffer-diff-with-file ibuffer-jump-to-buffer ibuffer-do-kill-lines
+;;;;;;  ibuffer-backwards-next-marked ibuffer-forward-next-marked
+;;;;;;  ibuffer-add-to-tmp-show ibuffer-add-to-tmp-hide ibuffer-bs-show
+;;;;;;  ibuffer-invert-sorting ibuffer-toggle-sorting-mode ibuffer-switch-to-saved-filters
+;;;;;;  ibuffer-add-saved-filters ibuffer-delete-saved-filters ibuffer-save-filters
+;;;;;;  ibuffer-or-filter ibuffer-negate-filter ibuffer-exchange-filters
+;;;;;;  ibuffer-decompose-filter ibuffer-pop-filter ibuffer-filter-disable
+;;;;;;  ibuffer-switch-to-saved-filter-groups ibuffer-delete-saved-filter-groups
+;;;;;;  ibuffer-save-filter-groups ibuffer-yank-filter-group ibuffer-yank
+;;;;;;  ibuffer-kill-line ibuffer-kill-filter-group ibuffer-jump-to-filter-group
+;;;;;;  ibuffer-clear-filter-groups ibuffer-decompose-filter-group
+;;;;;;  ibuffer-pop-filter-group ibuffer-set-filter-groups-by-mode
+;;;;;;  ibuffer-filters-to-filter-group ibuffer-included-in-filters-p
+;;;;;;  ibuffer-backward-filter-group ibuffer-forward-filter-group
+;;;;;;  ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group
+;;;;;;  ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode
+;;;;;;  ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "eb3de21aef70e4ca75f611f1c3c56aa1")
+;;; Generated autoloads from ibuf-ext.el
+
+(autoload 'ibuffer-auto-mode "ibuf-ext" "\
+Toggle use of Ibuffer's auto-update facility.
+With numeric ARG, enable auto-update if and only if ARG is positive.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
+Enable or disable filtering by the major mode chosen via mouse.
+
+\(fn EVENT)" t nil)
+
+(autoload 'ibuffer-interactive-filter-by-mode "ibuf-ext" "\
+Enable or disable filtering by the major mode at point.
+
+\(fn EVENT-OR-POINT)" t nil)
+
+(autoload 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
+Toggle the display status of the filter group chosen with the mouse.
+
+\(fn EVENT)" t nil)
+
+(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
+Toggle the display status of the filter group on this line.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
+Move point forwards by COUNT filtering groups.
+
+\(fn &optional COUNT)" t nil)
+
+(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
+Move point backwards by COUNT filtering groups.
+
+\(fn &optional COUNT)" t nil)
+ (autoload 'ibuffer-do-shell-command-pipe "ibuf-ext")
+ (autoload 'ibuffer-do-shell-command-pipe-replace "ibuf-ext")
+ (autoload 'ibuffer-do-shell-command-file "ibuf-ext")
+ (autoload 'ibuffer-do-eval "ibuf-ext")
+ (autoload 'ibuffer-do-view-and-eval "ibuf-ext")
+ (autoload 'ibuffer-do-rename-uniquely "ibuf-ext")
+ (autoload 'ibuffer-do-revert "ibuf-ext")
+ (autoload 'ibuffer-do-isearch "ibuf-ext")
+ (autoload 'ibuffer-do-isearch-regexp "ibuf-ext")
+ (autoload 'ibuffer-do-replace-regexp "ibuf-ext")
+ (autoload 'ibuffer-do-query-replace "ibuf-ext")
+ (autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
+ (autoload 'ibuffer-do-print "ibuf-ext")
+
+(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
+Not documented
+
+\(fn BUF FILTERS)" nil nil)
+
+(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
+Make the current filters into a filtering group.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
+Set the current filter groups to filter by mode.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
+Remove the first filter group.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
+Decompose the filter group GROUP into active filters.
+
+\(fn GROUP)" t nil)
+
+(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
+Remove all filter groups.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
+Move point to the filter group whose name is NAME.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-kill-filter-group "ibuf-ext" "\
+Kill the filter group named NAME.
+The group will be added to `ibuffer-filter-group-kill-ring'.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-kill-line "ibuf-ext" "\
+Kill the filter group at point.
+See also `ibuffer-kill-filter-group'.
+
+\(fn &optional ARG INTERACTIVE-P)" t nil)
+
+(autoload 'ibuffer-yank "ibuf-ext" "\
+Yank the last killed filter group before group at point.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
+Yank the last killed filter group before group named NAME.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-save-filter-groups "ibuf-ext" "\
+Save all active filter groups GROUPS as NAME.
+They are added to `ibuffer-saved-filter-groups'.  Interactively,
+prompt for NAME, and use the current filters.
+
+\(fn NAME GROUPS)" t nil)
+
+(autoload 'ibuffer-delete-saved-filter-groups "ibuf-ext" "\
+Delete saved filter groups with NAME.
+They are removed from `ibuffer-saved-filter-groups'.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
+Set this buffer's filter groups to saved version with NAME.
+The value from `ibuffer-saved-filter-groups' is used.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-filter-disable "ibuf-ext" "\
+Disable all filters currently in effect in this buffer.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-pop-filter "ibuf-ext" "\
+Remove the top filter in this buffer.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-decompose-filter "ibuf-ext" "\
+Separate the top compound filter (OR, NOT, or SAVED) in this buffer.
+
+This means that the topmost filter on the filtering stack, which must
+be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
+turned into two separate filters [name: foo] and [mode: bar-mode].
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
+Exchange the top two filters on the stack in this buffer.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-negate-filter "ibuf-ext" "\
+Negate the sense of the top filter in the current buffer.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-or-filter "ibuf-ext" "\
+Replace the top two filters in this buffer with their logical OR.
+If optional argument REVERSE is non-nil, instead break the top OR
+filter into parts.
+
+\(fn &optional REVERSE)" t nil)
+
+(autoload 'ibuffer-save-filters "ibuf-ext" "\
+Save FILTERS in this buffer with name NAME in `ibuffer-saved-filters'.
+Interactively, prompt for NAME, and use the current filters.
+
+\(fn NAME FILTERS)" t nil)
+
+(autoload 'ibuffer-delete-saved-filters "ibuf-ext" "\
+Delete saved filters with NAME from `ibuffer-saved-filters'.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
+Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
+Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
+
+\(fn NAME)" t nil)
+ (autoload 'ibuffer-filter-by-mode "ibuf-ext")
+ (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
+ (autoload 'ibuffer-filter-by-name "ibuf-ext")
+ (autoload 'ibuffer-filter-by-filename "ibuf-ext")
+ (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext")
+ (autoload 'ibuffer-filter-by-size-lt  "ibuf-ext")
+ (autoload 'ibuffer-filter-by-content "ibuf-ext")
+ (autoload 'ibuffer-filter-by-predicate "ibuf-ext")
+
+(autoload 'ibuffer-toggle-sorting-mode "ibuf-ext" "\
+Toggle the current sorting mode.
+Default sorting modes are:
+ Recency - the last time the buffer was viewed
+ Name - the name of the buffer
+ Major Mode - the name of the major mode of the buffer
+ Size - the size of the buffer
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
+Toggle whether or not sorting is in reverse order.
+
+\(fn)" t nil)
+ (autoload 'ibuffer-do-sort-by-major-mode "ibuf-ext")
+ (autoload 'ibuffer-do-sort-by-mode-name "ibuf-ext")
+ (autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
+ (autoload 'ibuffer-do-sort-by-size "ibuf-ext")
+ (autoload 'ibuffer-do-sort-by-filename/process "ibuf-ext")
+
+(autoload 'ibuffer-bs-show "ibuf-ext" "\
+Emulate `bs-show' from the bs.el package.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-add-to-tmp-hide "ibuf-ext" "\
+Add REGEXP to `ibuffer-tmp-hide-regexps'.
+This means that buffers whose name matches REGEXP will not be shown
+for this Ibuffer session.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'ibuffer-add-to-tmp-show "ibuf-ext" "\
+Add REGEXP to `ibuffer-tmp-show-regexps'.
+This means that buffers whose name matches REGEXP will always be shown
+for this Ibuffer session.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'ibuffer-forward-next-marked "ibuf-ext" "\
+Move forward by COUNT marked buffers (default 1).
+
+If MARK is non-nil, it should be a character denoting the type of mark
+to move by.  The default is `ibuffer-marked-char'.
+
+If DIRECTION is non-nil, it should be an integer; negative integers
+mean move backwards, non-negative integers mean move forwards.
+
+\(fn &optional COUNT MARK DIRECTION)" t nil)
+
+(autoload 'ibuffer-backwards-next-marked "ibuf-ext" "\
+Move backwards by COUNT marked buffers (default 1).
+
+If MARK is non-nil, it should be a character denoting the type of mark
+to move by.  The default is `ibuffer-marked-char'.
+
+\(fn &optional COUNT MARK)" t nil)
+
+(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
+Hide all of the currently marked lines.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-jump-to-buffer "ibuf-ext" "\
+Move point to the buffer whose name is NAME.
+
+If called interactively, prompt for a buffer name and go to the
+corresponding line in the Ibuffer buffer.  If said buffer is in a
+hidden group filter, open it.
+
+If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
+visible buffers in the completion list.  Calling the command with
+a prefix argument reverses the meaning of that variable.
+
+\(fn NAME)" t nil)
+
+(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
+View the differences between marked buffers and their associated files.
+If no buffers are marked, use buffer at point.
+This requires the external program \"diff\" to be in your `exec-path'.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
+Copy filenames of marked buffers into the kill ring.
+
+The names are separated by a space.
+If a buffer has no filename, it is ignored.
+
+With no prefix arg, use the filename sans its directory of each marked file.
+With a zero prefix arg, use the complete filename of each marked file.
+With \\[universal-argument], use the filename of each marked file relative
+to `ibuffer-default-directory' if non-nil, otherwise `default-directory'.
+
+You can then feed the file name(s) to other commands with \\[yank].
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
+Mark all buffers whose name matches REGEXP.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
+Mark all buffers whose major mode matches REGEXP.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
+Mark all buffers whose file name matches REGEXP.
+
+\(fn REGEXP)" t nil)
+
+(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
+Mark all buffers whose major mode equals MODE.
+
+\(fn MODE)" t nil)
+
+(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
+Mark all modified buffers.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
+Mark all modified buffers that have an associated file.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
+Mark all buffers whose associated file does not exist.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
+Mark buffers like *Help*, *Apropos*, *Info*.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
+Mark buffers whose associated file is compressed.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
+Mark buffers which have not been viewed in `ibuffer-old-time' hours.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
+Mark all buffers whose name begins and ends with '*'.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
+Mark all read-only buffers.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
+Mark all `dired' buffers.
+
+\(fn)" t nil)
+
+(autoload 'ibuffer-do-occur "ibuf-ext" "\
+View lines which match REGEXP in all marked buffers.
+Optional argument NLINES says how many lines of context to display: it
+defaults to one.
+
+\(fn REGEXP &optional NLINES)" t nil)
+
+;;;***
+\f
+;;; End of automatically extracted autoloads.
+
+
 (provide 'ibuffer)
 
 (run-hooks 'ibuffer-load-hook)
@@ -2617,5 +3024,4 @@ will be inserted before the group at point."
 ;; coding: iso-8859-1
 ;; End:
 
-;; arch-tag: 72581688-0603-4954-b8cf-837c700f62e8
 ;;; ibuffer.el ends here