aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Walters2002-04-25 19:03:12 +0000
committerColin Walters2002-04-25 19:03:12 +0000
commitcba63a2dda348b462896401d4731b20fee914d27 (patch)
treeaec718b2e97dd8afc8606474934c85fb98c384c7
parent04fe158afa079b8da2fa39828f445ee679366edf (diff)
downloademacs-cba63a2dda348b462896401d4731b20fee914d27.tar.gz
emacs-cba63a2dda348b462896401d4731b20fee914d27.zip
(ibuffer-formats): Doc fix.
(ibuffer-mode-map): Bind <up> to `ibuffer-backward-line'. Bind new functions from ibuf-ext.el. Add menu entries for them. Remove superfluous tooltips. (ibuffer-toggle-marks): If on a group name, then toggle marks just in that group. (ibuffer-mark-interactive): Handle filter groups. (ibuffer-mark-forward, ibuffer-unmark-forward) (ibuffer-mark-for-delete, ibuffer-unmark-backward) (ibuffer-mark-for-delete-backwards): Update docs. (ibuffer-current-filter-groups): Moved to ibuf-ext.el, and renamed to `ibuffer-current-filter-groups-with-position'. (ibuffer-redisplay-engine): Handle `ibuffer-show-empty-filter-groups'. (ibuffer-mode): Add some documentation about filter groups.
-rw-r--r--lisp/ibuffer.el203
1 files changed, 131 insertions, 72 deletions
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index b744cc1f2c0..b9e914684eb 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -73,7 +73,7 @@ the ability to filter the displayed buffers by various criteria."
73 73
74With Ibuffer, you are not limited to displaying just certain 74With Ibuffer, you are not limited to displaying just certain
75attributes of a buffer such as size, name, and mode in a particular 75attributes of a buffer such as size, name, and mode in a particular
76fashion. Through this variable, you can completely customize and 76order. Through this variable, you can completely customize and
77control the appearance of an Ibuffer buffer. See also 77control the appearance of an Ibuffer buffer. See also
78`define-ibuffer-column', which allows you to define your own columns 78`define-ibuffer-column', which allows you to define your own columns
79for display. 79for display.
@@ -116,7 +116,7 @@ own!):
116 read-only status, as well as the name of the buffer and its size. In 116 read-only status, as well as the name of the buffer and its size. In
117 this format, the name is restricted to 16 characters (longer names 117 this format, the name is restricted to 16 characters (longer names
118 will be truncated, and shorter names will be padded with spaces), and 118 will be truncated, and shorter names will be padded with spaces), and
119 the name is also aligned to the right. The size of the buffer will 119 the name is also aligned to the left. The size of the buffer will
120 be padded with spaces up to a minimum of six characters, but there is 120 be padded with spaces up to a minimum of six characters, but there is
121 no upper limit on its size. The size will also be aligned to the 121 no upper limit on its size. The size will also be aligned to the
122 right. 122 right.
@@ -372,7 +372,7 @@ directory, like `default-directory'."
372 (define-key map (kbd "<down>") 'ibuffer-forward-line) 372 (define-key map (kbd "<down>") 'ibuffer-forward-line)
373 (define-key map (kbd "SPC") 'forward-line) 373 (define-key map (kbd "SPC") 'forward-line)
374 (define-key map (kbd "p") 'ibuffer-backward-line) 374 (define-key map (kbd "p") 'ibuffer-backward-line)
375 (define-key map (kbd "<up>") 'ibuffer-forward-line) 375 (define-key map (kbd "<up>") 'ibuffer-backward-line)
376 (define-key map (kbd "M-}") 'ibuffer-forward-next-marked) 376 (define-key map (kbd "M-}") 'ibuffer-forward-next-marked)
377 (define-key map (kbd "M-{") 'ibuffer-backwards-next-marked) 377 (define-key map (kbd "M-{") 'ibuffer-backwards-next-marked)
378 (define-key map (kbd "l") 'ibuffer-redisplay) 378 (define-key map (kbd "l") 'ibuffer-redisplay)
@@ -414,6 +414,12 @@ directory, like `default-directory'."
414 (define-key map (kbd "M-p") 'ibuffer-backward-filter-group) 414 (define-key map (kbd "M-p") 'ibuffer-backward-filter-group)
415 (define-key map (kbd "<left>") 'ibuffer-backward-filter-group) 415 (define-key map (kbd "<left>") 'ibuffer-backward-filter-group)
416 (define-key map (kbd "M-j") 'ibuffer-jump-to-filter-group) 416 (define-key map (kbd "M-j") 'ibuffer-jump-to-filter-group)
417 (define-key map (kbd "C-k") 'ibuffer-kill-line)
418 (define-key map (kbd "C-y") 'ibuffer-yank)
419 (define-key map (kbd "/ S") 'ibuffer-save-filter-groups)
420 (define-key map (kbd "/ R") 'ibuffer-switch-to-saved-filter-groups)
421 (define-key map (kbd "/ X") 'ibuffer-delete-saved-filter-groups)
422 (define-key map (kbd "/ \\") 'ibuffer-clear-filter-groups)
417 423
418 (define-key map (kbd "q") 'ibuffer-quit) 424 (define-key map (kbd "q") 'ibuffer-quit)
419 (define-key map (kbd "h") 'describe-mode) 425 (define-key map (kbd "h") 'describe-mode)
@@ -487,11 +493,9 @@ directory, like `default-directory'."
487 (cons "Sort" (make-sparse-keymap "Sort"))) 493 (cons "Sort" (make-sparse-keymap "Sort")))
488 494
489 (define-key-after map [menu-bar view sort do-sort-by-major-mode] 495 (define-key-after map [menu-bar view sort do-sort-by-major-mode]
490 '(menu-item "Sort by major mode" ibuffer-do-sort-by-major-mode 496 '(menu-item "Sort by major mode" ibuffer-do-sort-by-major-mode))
491 :help "Sort by the alphabetic order of the buffer's major mode"))
492 (define-key-after map [menu-bar view sort do-sort-by-size] 497 (define-key-after map [menu-bar view sort do-sort-by-size]
493 '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size 498 '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size))
494 :help "Sort by the size of the buffer"))
495 (define-key-after map [menu-bar view sort do-sort-by-alphabetic] 499 (define-key-after map [menu-bar view sort do-sort-by-alphabetic]
496 '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic 500 '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic
497 :help "Sort by the alphabetic order of buffer name")) 501 :help "Sort by the alphabetic order of buffer name"))
@@ -510,26 +514,19 @@ directory, like `default-directory'."
510 (define-key-after map [menu-bar view filter filter-disable] 514 (define-key-after map [menu-bar view filter filter-disable]
511 '(menu-item "Disable all filtering" ibuffer-filter-disable)) 515 '(menu-item "Disable all filtering" ibuffer-filter-disable))
512 (define-key-after map [menu-bar view filter filter-by-mode] 516 (define-key-after map [menu-bar view filter filter-by-mode]
513 '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode 517 '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode))
514 :help "Show only buffers in a major mode"))
515 (define-key-after map [menu-bar view filter filter-by-name] 518 (define-key-after map [menu-bar view filter filter-by-name]
516 '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name 519 '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name))
517 :help "Show only buffers whose name matches a regexp"))
518 (define-key-after map [menu-bar view filter filter-by-filename] 520 (define-key-after map [menu-bar view filter filter-by-filename]
519 '(menu-item "Add filter by filename..." ibuffer-filter-by-filename 521 '(menu-item "Add filter by filename..." ibuffer-filter-by-filename))
520 :help "Show only buffers whose filename matches a regexp"))
521 (define-key-after map [menu-bar view filter filter-by-size-lt] 522 (define-key-after map [menu-bar view filter filter-by-size-lt]
522 '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt 523 '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt))
523 :help "Show only buffers of size less than..."))
524 (define-key-after map [menu-bar view filter filter-by-size-gt] 524 (define-key-after map [menu-bar view filter filter-by-size-gt]
525 '(menu-item "Add filter by size greater than..." ibuffer-filter-by-size-gt 525 '(menu-item "Add filter by size greater than..." ibuffer-filter-by-size-gt))
526 :help "Show only buffers of size greater than..."))
527 (define-key-after map [menu-bar view filter filter-by-content] 526 (define-key-after map [menu-bar view filter filter-by-content]
528 '(menu-item "Add filter by content (regexp)..." ibuffer-filter-by-content 527 '(menu-item "Add filter by content (regexp)..." ibuffer-filter-by-content))
529 :help "Show only buffers containing a regexp"))
530 (define-key-after map [menu-bar view filter filter-by-predicate] 528 (define-key-after map [menu-bar view filter filter-by-predicate]
531 '(menu-item "Add filter by Lisp predicate..." ibuffer-filter-by-predicate 529 '(menu-item "Add filter by Lisp predicate..." ibuffer-filter-by-predicate))
532 :help "Show only buffers for which a predicate is true"))
533 (define-key-after map [menu-bar view filter pop-filter] 530 (define-key-after map [menu-bar view filter pop-filter]
534 '(menu-item "Remove top filter" ibuffer-pop-filter)) 531 '(menu-item "Remove top filter" ibuffer-pop-filter))
535 (define-key-after map [menu-bar view filter or-filter] 532 (define-key-after map [menu-bar view filter or-filter]
@@ -550,22 +547,51 @@ directory, like `default-directory'."
550 :help "Replace current filters with a saved stack")) 547 :help "Replace current filters with a saved stack"))
551 (define-key-after map [menu-bar view filter add-saved-filters] 548 (define-key-after map [menu-bar view filter add-saved-filters]
552 '(menu-item "Add to permanently saved filters..." ibuffer-add-saved-filters 549 '(menu-item "Add to permanently saved filters..." ibuffer-add-saved-filters
553 :help "Include current filters in an already saved stack")) 550 :help "Include already saved stack with current filters"))
554 (define-key-after map [menu-bar view filter delete-saved-filters] 551 (define-key-after map [menu-bar view filter delete-saved-filters]
555 '(menu-item "Delete permanently saved filters..." ibuffer-delete-saved-filters 552 '(menu-item "Delete permanently saved filters..."
556 :help "Remove stack of filters from saved list")) 553 ibuffer-delete-saved-filters))
554
557 (define-key-after map [menu-bar view filter-groups] 555 (define-key-after map [menu-bar view filter-groups]
558 (cons "Filter Groups" (make-sparse-keymap "Filter Groups"))) 556 (cons "Filter Groups" (make-sparse-keymap "Filter Groups")))
557
559 (define-key-after map [menu-bar view filter-groups filters-to-filter-group] 558 (define-key-after map [menu-bar view filter-groups filters-to-filter-group]
560 '(menu-item "Make current filters into filter group" 559 '(menu-item "Create filter group from current filters..."
561 ibuffer-filters-to-filter-group)) 560 ibuffer-filters-to-filter-group))
561 (define-key-after map [menu-bar view filter-groups forward-filter-group]
562 '(menu-item "Move point to the next filter group"
563 ibuffer-forward-filter-group))
564 (define-key-after map [menu-bar view filter-groups backward-filter-group]
565 '(menu-item "Move point to the previous filter group"
566 ibuffer-backward-filter-group))
567 (define-key-after map [menu-bar view filter-groups jump-to-filter-group]
568 '(menu-item "Move point to a specific filter group..."
569 ibuffer-jump-to-filter-group))
562 (define-key-after map [menu-bar view filter-groups pop-filter-group] 570 (define-key-after map [menu-bar view filter-groups pop-filter-group]
563 '(menu-item "Remove top filter group" 571 '(menu-item "Remove top filter group"
564 ibuffer-pop-filter-group)) 572 ibuffer-pop-filter-group))
565 (define-key-after map [menu-bar view filter-groups filters-to-filter-group] 573 (define-key-after map [menu-bar view filter-groups clear-filter-groups]
566 '(menu-item "Create filter group from current filters" 574 '(menu-item "Remove all filter groups"
567 ibuffer-filters-to-filter-group)) 575 ibuffer-clear-filter-groups))
568 576 (define-key-after map [menu-bar view filter-groups save-filter-groups]
577 '(menu-item "Save current filter groups permanently..."
578 ibuffer-save-filter-groups
579 :help "Use a mnemnonic name to store current filter groups"))
580 (define-key-after map [menu-bar view filter-groups switch-to-saved-filter-groups]
581 '(menu-item "Restore permanently saved filters..."
582 ibuffer-switch-to-saved-filter-groups
583 :help "Replace current filters with a saved stack"))
584 (define-key-after map [menu-bar view filter-groups delete-saved-filter-groups]
585 '(menu-item "Delete permanently saved filter groups..."
586 ibuffer-delete-saved-filter-groups))
587 (define-key-after map [menu-bar view filter-groups set-filter-groups-by-mode]
588 '(menu-item "Set current filter groups to filter by mode"
589 ibuffer-set-filter-groups-by-mode))
590
591;; FIXME add menu entries
592;; (define-key map (kbd "C-k") 'ibuffer-kill-line)
593;; (define-key map (kbd "C-y") 'ibuffer-yank)
594
569 (define-key-after map [menu-bar view dashes2] 595 (define-key-after map [menu-bar view dashes2]
570 '("--")) 596 '("--"))
571 (define-key-after map [menu-bar view diff-with-file] 597 (define-key-after map [menu-bar view diff-with-file]
@@ -1149,8 +1175,12 @@ a new window in the current frame, splitting vertically."
1149(defun ibuffer-toggle-marks (&optional group) 1175(defun ibuffer-toggle-marks (&optional group)
1150 "Toggle which buffers are marked. 1176 "Toggle which buffers are marked.
1151In other words, unmarked buffers become marked, and marked buffers 1177In other words, unmarked buffers become marked, and marked buffers
1152become unmarked." 1178become unmarked.
1179If point is on a group name, then this function operates on that
1180group."
1153 (interactive) 1181 (interactive)
1182 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name)
1183 (setq group it))
1154 (let ((count 1184 (let ((count
1155 (ibuffer-map-lines 1185 (ibuffer-map-lines
1156 #'(lambda (buf mark) 1186 #'(lambda (buf mark)
@@ -1167,17 +1197,20 @@ become unmarked."
1167 (ibuffer-redisplay t)) 1197 (ibuffer-redisplay t))
1168 1198
1169(defun ibuffer-mark-forward (arg) 1199(defun ibuffer-mark-forward (arg)
1170 "Mark the buffer on this line, and move forward ARG lines." 1200 "Mark the buffer on this line, and move forward ARG lines.
1201If point is on a group name, this function operates on that group."
1171 (interactive "P") 1202 (interactive "P")
1172 (ibuffer-mark-interactive arg ibuffer-marked-char 1)) 1203 (ibuffer-mark-interactive arg ibuffer-marked-char 1))
1173 1204
1174(defun ibuffer-unmark-forward (arg) 1205(defun ibuffer-unmark-forward (arg)
1175 "Unmark the buffer on this line, and move forward ARG lines." 1206 "Unmark the buffer on this line, and move forward ARG lines.
1207If point is on a group name, this function operates on that group."
1176 (interactive "P") 1208 (interactive "P")
1177 (ibuffer-mark-interactive arg ? 1)) 1209 (ibuffer-mark-interactive arg ? 1))
1178 1210
1179(defun ibuffer-unmark-backward (arg) 1211(defun ibuffer-unmark-backward (arg)
1180 "Unmark the buffer on this line, and move backward ARG lines." 1212 "Unmark the buffer on this line, and move backward ARG lines.
1213If point is on a group name, this function operates on that group."
1181 (interactive "P") 1214 (interactive "P")
1182 (ibuffer-mark-interactive arg ? -1)) 1215 (ibuffer-mark-interactive arg ? -1))
1183 1216
@@ -1185,12 +1218,17 @@ become unmarked."
1185 (assert (eq major-mode 'ibuffer-mode)) 1218 (assert (eq major-mode 'ibuffer-mode))
1186 (unless arg 1219 (unless arg
1187 (setq arg 1)) 1220 (setq arg 1))
1188 (ibuffer-forward-line 0 t) 1221 (ibuffer-forward-line 0)
1189 (let ((inhibit-read-only t)) 1222 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name)
1190 (while (> arg 0) 1223 (progn
1191 (ibuffer-set-mark mark) 1224 (require 'ibuf-ext)
1192 (ibuffer-forward-line movement t) 1225 (ibuffer-mark-on-buffer #'identity mark it))
1193 (setq arg (1- arg))))) 1226 (ibuffer-forward-line 0 t)
1227 (let ((inhibit-read-only t))
1228 (while (> arg 0)
1229 (ibuffer-set-mark mark)
1230 (ibuffer-forward-line movement t)
1231 (setq arg (1- arg))))))
1194 1232
1195(defun ibuffer-set-mark (mark) 1233(defun ibuffer-set-mark (mark)
1196 (assert (eq major-mode 'ibuffer-mode)) 1234 (assert (eq major-mode 'ibuffer-mode))
@@ -1208,12 +1246,14 @@ become unmarked."
1208 mark)))) 1246 mark))))
1209 1247
1210(defun ibuffer-mark-for-delete (arg) 1248(defun ibuffer-mark-for-delete (arg)
1211 "Mark the buffers on ARG lines forward for deletion." 1249 "Mark the buffers on ARG lines forward for deletion.
1250If point is on a group name, this function operates on that group."
1212 (interactive "P") 1251 (interactive "P")
1213 (ibuffer-mark-interactive arg ibuffer-deletion-char 1)) 1252 (ibuffer-mark-interactive arg ibuffer-deletion-char 1))
1214 1253
1215(defun ibuffer-mark-for-delete-backwards (arg) 1254(defun ibuffer-mark-for-delete-backwards (arg)
1216 "Mark the buffers on ARG lines backward for deletion." 1255 "Mark the buffers on ARG lines backward for deletion.
1256If point is on a group name, this function operates on that group."
1217 (interactive "P") 1257 (interactive "P")
1218 (ibuffer-mark-interactive arg ibuffer-deletion-char -1)) 1258 (ibuffer-mark-interactive arg ibuffer-deletion-char -1))
1219 1259
@@ -1737,22 +1777,6 @@ the value of point at the beginning of the line for that buffer."
1737 (push (cons buf mark) ibuffer-current-state-list-tmp))))) 1777 (push (cons buf mark) ibuffer-current-state-list-tmp)))))
1738 (nreverse ibuffer-current-state-list-tmp))) 1778 (nreverse ibuffer-current-state-list-tmp)))
1739 1779
1740(defun ibuffer-current-filter-groups ()
1741 (save-excursion
1742 (goto-char (point-min))
1743 (let ((pos nil)
1744 (result nil))
1745 (while (and (not (eobp))
1746 (setq pos (next-single-property-change
1747 (point) 'ibuffer-filter-group-name)))
1748 (goto-char pos)
1749 (push (cons (get-text-property (point) 'ibuffer-filter-group-name)
1750 pos)
1751 result)
1752 (goto-char (next-single-property-change
1753 pos 'ibuffer-filter-group-name)))
1754 (nreverse result))))
1755
1756(defun ibuffer-current-buffers-with-marks (curbufs) 1780(defun ibuffer-current-buffers-with-marks (curbufs)
1757 "Return a list like (BUF . MARK) of all open buffers." 1781 "Return a list like (BUF . MARK) of all open buffers."
1758 (let ((bufs (ibuffer-current-state-list))) 1782 (let ((bufs (ibuffer-current-state-list)))
@@ -1947,7 +1971,7 @@ If SILENT is non-`nil', do not generate progress messages."
1947 (let ((blist (ibuffer-current-state-list))) 1971 (let ((blist (ibuffer-current-state-list)))
1948 (when (null blist) 1972 (when (null blist)
1949 (if (and (featurep 'ibuf-ext) 1973 (if (and (featurep 'ibuf-ext)
1950 (or ibuffer-filtering-qualifiers ibuffer-hidden-filtering-groups)) 1974 (or ibuffer-filtering-qualifiers ibuffer-hidden-filter-groups))
1951 (message "No buffers! (note: filtering in effect)") 1975 (message "No buffers! (note: filtering in effect)")
1952 (error "No buffers!"))) 1976 (error "No buffers!")))
1953 (ibuffer-redisplay-engine blist t) 1977 (ibuffer-redisplay-engine blist t)
@@ -2053,15 +2077,18 @@ Do not display messages if SILENT is non-nil."
2053 (dolist (group (nreverse bgroups)) 2077 (dolist (group (nreverse bgroups))
2054 (let* ((name (car group)) 2078 (let* ((name (car group))
2055 (disabled (and ext-loaded 2079 (disabled (and ext-loaded
2056 (member name ibuffer-hidden-filtering-groups))) 2080 (member name ibuffer-hidden-filter-groups)))
2057 (bmarklist (cdr group))) 2081 (bmarklist (cdr group)))
2058 (ibuffer-insert-filter-group 2082 (unless (and (null bmarklist)
2059 name 2083 ext-loaded
2060 (if disabled (concat name " ...") name) 2084 (null ibuffer-show-empty-filter-groups))
2061 --ibuffer-insert-buffers-and-marks-format 2085 (ibuffer-insert-filter-group
2062 (if disabled 2086 name
2063 nil 2087 (if disabled (concat name " ...") name)
2064 (ibuffer-sort-bufferlist bmarklist))))) 2088 --ibuffer-insert-buffers-and-marks-format
2089 (if disabled
2090 nil
2091 (ibuffer-sort-bufferlist bmarklist))))))
2065 (ibuffer-update-title-and-summary --ibuffer-expanded-format)) 2092 (ibuffer-update-title-and-summary --ibuffer-expanded-format))
2066 (setq buffer-read-only t) 2093 (setq buffer-read-only t)
2067 (set-buffer-modified-p ibuffer-did-modification) 2094 (set-buffer-modified-p ibuffer-did-modification)
@@ -2112,7 +2139,7 @@ Optional argument NOSELECT means don't select the Ibuffer buffer.
2112Optional argument SHRINK means shrink the buffer to minimal size. The 2139Optional argument SHRINK means shrink the buffer to minimal size. The
2113special value `onewindow' means always use another window. 2140special value `onewindow' means always use another window.
2114Optional argument FILTER-GROUPS is an initial set of filtering 2141Optional argument FILTER-GROUPS is an initial set of filtering
2115groups to use; see `ibuffer-filtering-groups'." 2142groups to use; see `ibuffer-filter-groups'."
2116 (interactive "P") 2143 (interactive "P")
2117 (when ibuffer-use-other-window 2144 (when ibuffer-use-other-window
2118 (setq other-window-p t)) 2145 (setq other-window-p t))
@@ -2140,7 +2167,7 @@ groups to use; see `ibuffer-filtering-groups'."
2140 (setq ibuffer-filtering-qualifiers qualifiers)) 2167 (setq ibuffer-filtering-qualifiers qualifiers))
2141 (when filter-groups 2168 (when filter-groups
2142 (require 'ibuf-ext) 2169 (require 'ibuf-ext)
2143 (setq ibuffer-filtering-groups filter-groups)) 2170 (setq ibuffer-filter-groups filter-groups))
2144 (ibuffer-update nil) 2171 (ibuffer-update nil)
2145 ;; Skip the group name by default. 2172 ;; Skip the group name by default.
2146 (ibuffer-forward-line 0 t) 2173 (ibuffer-forward-line 0 t)
@@ -2234,6 +2261,11 @@ Filtering commands:
2234 '\\[ibuffer-negate-filter]' - Invert the logical sense of the top filter. 2261 '\\[ibuffer-negate-filter]' - Invert the logical sense of the top filter.
2235 '\\[ibuffer-decompose-filter]' - Break down the topmost filter. 2262 '\\[ibuffer-decompose-filter]' - Break down the topmost filter.
2236 '\\[ibuffer-filter-disable]' - Remove all filtering currently in effect. 2263 '\\[ibuffer-filter-disable]' - Remove all filtering currently in effect.
2264
2265Filter group commands:
2266
2267 '\\[ibuffer-filters-to-filter-group]' - Create filter group from filters.
2268 '\\[ibuffer-pop-filter-group]' - Remove top filter group.
2237 2269
2238Sorting commands: 2270Sorting commands:
2239 2271
@@ -2260,7 +2292,7 @@ Other commands:
2260 the new window. 2292 the new window.
2261 '\\[ibuffer-bury-buffer]' - Bury (not kill!) the buffer on this line. 2293 '\\[ibuffer-bury-buffer]' - Bury (not kill!) the buffer on this line.
2262 2294
2263Information on Filtering: 2295** Information on Filtering:
2264 2296
2265 You can filter your ibuffer view via different critera. Each Ibuffer 2297 You can filter your ibuffer view via different critera. Each Ibuffer
2266buffer has its own stack of active filters. For example, suppose you 2298buffer has its own stack of active filters. For example, suppose you
@@ -2288,7 +2320,33 @@ functions `ibuffer-save-filters' and `ibuffer-switch-to-saved-filters'.
2288 2320
2289To remove the top filter on the stack, use '\\[ibuffer-pop-filter]', and 2321To remove the top filter on the stack, use '\\[ibuffer-pop-filter]', and
2290to disable all filtering currently in effect, use 2322to disable all filtering currently in effect, use
2291'\\[ibuffer-filter-disable]'." 2323'\\[ibuffer-filter-disable]'.
2324
2325** Filter Groups:
2326
2327Once one has mastered filters, the next logical step up is \"filter
2328groups\". A filter group is basically a named group of buffers which
2329match a filter, which are displayed together in an Ibuffer buffer. To
2330create a filter group, simply use the regular functions to create a
2331filter, and then type '\\[ibuffer-filters-to-filter-group]'.
2332
2333A quick example will make things clearer. Suppose that one wants to
2334group all of one's Emacs Lisp buffers together. To do this, type
2335
2336'\\[ibuffer-filter-by-mode] emacs-lisp-mode RET \\[ibuffer-filters-to-filter-group] RET emacs lisp buffers RET'
2337
2338You may, of course, name the group whatever you want; it doesn't have
2339to be \"emacs lisp buffers\". Filter groups may be composed of any
2340arbitrary combination of filters.
2341
2342Just like filters themselves, filter groups act as a stack. Buffers
2343will not be displayed multiple times if they would be included in
2344multiple filter groups; instead, the first filter group is used. The
2345filter groups are displayed in this order of precedence.
2346
2347You may rearrange filter groups by using the regular
2348'\\[ibuffer-kill-line]' and '\\[ibuffer-yank]' pair. Yanked groups
2349will be inserted before the group at point."
2292 (kill-all-local-variables) 2350 (kill-all-local-variables)
2293 (use-local-map ibuffer-mode-map) 2351 (use-local-map ibuffer-mode-map)
2294 (setq major-mode 'ibuffer-mode) 2352 (setq major-mode 'ibuffer-mode)
@@ -2314,8 +2372,9 @@ to disable all filtering currently in effect, use
2314 (set (make-local-variable 'ibuffer-shrink-to-minimum-size) 2372 (set (make-local-variable 'ibuffer-shrink-to-minimum-size)
2315 ibuffer-default-shrink-to-minimum-size) 2373 ibuffer-default-shrink-to-minimum-size)
2316 (set (make-local-variable 'ibuffer-filtering-qualifiers) nil) 2374 (set (make-local-variable 'ibuffer-filtering-qualifiers) nil)
2317 (set (make-local-variable 'ibuffer-filtering-groups) nil) 2375 (set (make-local-variable 'ibuffer-filter-groups) nil)
2318 (set (make-local-variable 'ibuffer-hidden-filtering-groups) nil) 2376 (set (make-local-variable 'ibuffer-filter-group-kill-ring) nil)
2377 (set (make-local-variable 'ibuffer-hidden-filter-groups) nil)
2319 (set (make-local-variable 'ibuffer-compiled-formats) nil) 2378 (set (make-local-variable 'ibuffer-compiled-formats) nil)
2320 (set (make-local-variable 'ibuffer-cached-formats) nil) 2379 (set (make-local-variable 'ibuffer-cached-formats) nil)
2321 (set (make-local-variable 'ibuffer-cached-eliding-string) nil) 2380 (set (make-local-variable 'ibuffer-cached-eliding-string) nil)