diff options
| author | Colin Walters | 2002-04-25 19:03:12 +0000 |
|---|---|---|
| committer | Colin Walters | 2002-04-25 19:03:12 +0000 |
| commit | cba63a2dda348b462896401d4731b20fee914d27 (patch) | |
| tree | aec718b2e97dd8afc8606474934c85fb98c384c7 | |
| parent | 04fe158afa079b8da2fa39828f445ee679366edf (diff) | |
| download | emacs-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.el | 203 |
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 | ||
| 74 | With Ibuffer, you are not limited to displaying just certain | 74 | With Ibuffer, you are not limited to displaying just certain |
| 75 | attributes of a buffer such as size, name, and mode in a particular | 75 | attributes of a buffer such as size, name, and mode in a particular |
| 76 | fashion. Through this variable, you can completely customize and | 76 | order. Through this variable, you can completely customize and |
| 77 | control the appearance of an Ibuffer buffer. See also | 77 | control 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 |
| 79 | for display. | 79 | for 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. |
| 1151 | In other words, unmarked buffers become marked, and marked buffers | 1177 | In other words, unmarked buffers become marked, and marked buffers |
| 1152 | become unmarked." | 1178 | become unmarked. |
| 1179 | If point is on a group name, then this function operates on that | ||
| 1180 | group." | ||
| 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. |
| 1201 | If 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. |
| 1207 | If 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. |
| 1213 | If 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. |
| 1250 | If 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. |
| 1256 | If 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. | |||
| 2112 | Optional argument SHRINK means shrink the buffer to minimal size. The | 2139 | Optional argument SHRINK means shrink the buffer to minimal size. The |
| 2113 | special value `onewindow' means always use another window. | 2140 | special value `onewindow' means always use another window. |
| 2114 | Optional argument FILTER-GROUPS is an initial set of filtering | 2141 | Optional argument FILTER-GROUPS is an initial set of filtering |
| 2115 | groups to use; see `ibuffer-filtering-groups'." | 2142 | groups 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 | |||
| 2265 | Filter 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 | ||
| 2238 | Sorting commands: | 2270 | Sorting 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 | ||
| 2263 | Information 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 |
| 2266 | buffer has its own stack of active filters. For example, suppose you | 2298 | buffer 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 | ||
| 2289 | To remove the top filter on the stack, use '\\[ibuffer-pop-filter]', and | 2321 | To remove the top filter on the stack, use '\\[ibuffer-pop-filter]', and |
| 2290 | to disable all filtering currently in effect, use | 2322 | to disable all filtering currently in effect, use |
| 2291 | '\\[ibuffer-filter-disable]'." | 2323 | '\\[ibuffer-filter-disable]'. |
| 2324 | |||
| 2325 | ** Filter Groups: | ||
| 2326 | |||
| 2327 | Once one has mastered filters, the next logical step up is \"filter | ||
| 2328 | groups\". A filter group is basically a named group of buffers which | ||
| 2329 | match a filter, which are displayed together in an Ibuffer buffer. To | ||
| 2330 | create a filter group, simply use the regular functions to create a | ||
| 2331 | filter, and then type '\\[ibuffer-filters-to-filter-group]'. | ||
| 2332 | |||
| 2333 | A quick example will make things clearer. Suppose that one wants to | ||
| 2334 | group 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 | |||
| 2338 | You may, of course, name the group whatever you want; it doesn't have | ||
| 2339 | to be \"emacs lisp buffers\". Filter groups may be composed of any | ||
| 2340 | arbitrary combination of filters. | ||
| 2341 | |||
| 2342 | Just like filters themselves, filter groups act as a stack. Buffers | ||
| 2343 | will not be displayed multiple times if they would be included in | ||
| 2344 | multiple filter groups; instead, the first filter group is used. The | ||
| 2345 | filter groups are displayed in this order of precedence. | ||
| 2346 | |||
| 2347 | You may rearrange filter groups by using the regular | ||
| 2348 | '\\[ibuffer-kill-line]' and '\\[ibuffer-yank]' pair. Yanked groups | ||
| 2349 | will 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) |