Mercurial > emacs
comparison lisp/ibuffer.el @ 44854:6cd35f994b33
(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.
author | Colin Walters <walters@gnu.org> |
---|---|
date | Thu, 25 Apr 2002 19:03:12 +0000 |
parents | ce8cb080a127 |
children | ed308b745565 |
comparison
equal
deleted
inserted
replaced
44853:ca887baefc80 | 44854:6cd35f994b33 |
---|---|
71 (mark " " (name 16 -1) " " filename)) | 71 (mark " " (name 16 -1) " " filename)) |
72 "A list of ways to display buffer lines. | 72 "A list of ways to display buffer lines. |
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. |
80 | 80 |
81 This variable has the form | 81 This variable has the form |
114 (mark modified read-only \" \" (name 16 16 :left) \" \" (size 6 -1 :right)) | 114 (mark modified read-only \" \" (name 16 16 :left) \" \" (size 6 -1 :right)) |
115 This format displays the current mark (if any), its modification and | 115 This format displays the current mark (if any), its modification and |
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. |
123 | 123 |
124 Thus, if you wanted to use these two formats, add | 124 Thus, if you wanted to use these two formats, add |
370 ;; immediate operations | 370 ;; immediate operations |
371 (define-key map (kbd "n") 'ibuffer-forward-line) | 371 (define-key map (kbd "n") 'ibuffer-forward-line) |
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) |
379 (define-key map (kbd "g") 'ibuffer-update) | 379 (define-key map (kbd "g") 'ibuffer-update) |
380 (define-key map "`" 'ibuffer-switch-format) | 380 (define-key map "`" 'ibuffer-switch-format) |
412 (define-key map (kbd "M-n") 'ibuffer-forward-filter-group) | 412 (define-key map (kbd "M-n") 'ibuffer-forward-filter-group) |
413 (define-key map (kbd "<right>") 'ibuffer-forward-filter-group) | 413 (define-key map (kbd "<right>") 'ibuffer-forward-filter-group) |
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) |
420 (define-key map (kbd "?") 'describe-mode) | 426 (define-key map (kbd "?") 'describe-mode) |
421 | 427 |
485 | 491 |
486 (define-key-after map [menu-bar view sort] | 492 (define-key-after map [menu-bar view sort] |
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")) |
498 (define-key-after map [menu-bar view sort do-sort-by-recency] | 502 (define-key-after map [menu-bar view sort do-sort-by-recency] |
499 '(menu-item "Sort by view time" ibuffer-do-sort-by-recency | 503 '(menu-item "Sort by view time" ibuffer-do-sort-by-recency |
508 (cons "Filter" (make-sparse-keymap "Filter"))) | 512 (cons "Filter" (make-sparse-keymap "Filter"))) |
509 | 513 |
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] |
536 '(menu-item "OR top two filters" ibuffer-or-filter | 533 '(menu-item "OR top two filters" ibuffer-or-filter |
537 :help "Create a new filter which is the logical OR of the top two filters")) | 534 :help "Create a new filter which is the logical OR of the top two filters")) |
548 (define-key-after map [menu-bar view filter switch-to-saved-filters] | 545 (define-key-after map [menu-bar view filter switch-to-saved-filters] |
549 '(menu-item "Restore permanently saved filters..." ibuffer-switch-to-saved-filters | 546 '(menu-item "Restore permanently saved filters..." ibuffer-switch-to-saved-filters |
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] |
572 '(menu-item "Diff with file" ibuffer-diff-with-file | 598 '(menu-item "Diff with file" ibuffer-diff-with-file |
573 :help "View the differences between this buffer and its file")) | 599 :help "View the differences between this buffer and its file")) |
1147 (ibuffer-redisplay t)) | 1173 (ibuffer-redisplay t)) |
1148 | 1174 |
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) |
1157 (cond ((eq mark ibuffer-marked-char) | 1187 (cond ((eq mark ibuffer-marked-char) |
1158 (ibuffer-set-mark-1 ? ) | 1188 (ibuffer-set-mark-1 ? ) |
1165 nil group))) | 1195 nil group))) |
1166 (message "%s buffers marked" count)) | 1196 (message "%s buffers marked" count)) |
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 |
1184 (defun ibuffer-mark-interactive (arg mark movement) | 1217 (defun ibuffer-mark-interactive (arg mark movement) |
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)) |
1197 (let ((inhibit-read-only t)) | 1235 (let ((inhibit-read-only t)) |
1198 (ibuffer-set-mark-1 mark) | 1236 (ibuffer-set-mark-1 mark) |
1206 (put-text-property beg end 'ibuffer-properties | 1244 (put-text-property beg end 'ibuffer-properties |
1207 (list (ibuffer-current-buffer) | 1245 (list (ibuffer-current-buffer) |
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 |
1220 (defun ibuffer-current-buffer (&optional must-be-live) | 1260 (defun ibuffer-current-buffer (&optional must-be-live) |
1221 (let ((buf (car (get-text-property (line-beginning-position) | 1261 (let ((buf (car (get-text-property (line-beginning-position) |
1735 #'(lambda (buf mark) | 1775 #'(lambda (buf mark) |
1736 (when (buffer-live-p buf) | 1776 (when (buffer-live-p buf) |
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))) |
1759 (mapcar #'(lambda (buf) (let ((e (assq buf bufs))) | 1783 (mapcar #'(lambda (buf) (let ((e (assq buf bufs))) |
1760 (if e | 1784 (if e |
1945 (unless silent | 1969 (unless silent |
1946 (message "Redisplaying current buffer list...")) | 1970 (message "Redisplaying current buffer list...")) |
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) |
1954 (ibuffer-update-mode-name) | 1978 (ibuffer-update-mode-name) |
1955 (unless silent | 1979 (unless silent |
2051 (erase-buffer) | 2075 (erase-buffer) |
2052 (ibuffer-update-format) | 2076 (ibuffer-update-format) |
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) |
2068 (setq ibuffer-did-modification nil) | 2095 (setq ibuffer-did-modification nil) |
2069 (goto-line (1+ orig))))) | 2096 (goto-line (1+ orig))))) |
2110 to use; see `ibuffer-filtering-qualifiers'. | 2137 to use; see `ibuffer-filtering-qualifiers'. |
2111 Optional argument NOSELECT means don't select the Ibuffer buffer. | 2138 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)) |
2119 (let* ((buf (get-buffer-create (or name "*Ibuffer*"))) | 2146 (let* ((buf (get-buffer-create (or name "*Ibuffer*"))) |
2120 (already-in (eq (current-buffer) buf)) | 2147 (already-in (eq (current-buffer) buf)) |
2138 (when qualifiers | 2165 (when qualifiers |
2139 (require 'ibuf-ext) | 2166 (require 'ibuf-ext) |
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) |
2147 (unwind-protect | 2174 (unwind-protect |
2148 (progn | 2175 (progn |
2232 '\\[ibuffer-or-filter]' - Replace the top two filters with their logical OR. | 2259 '\\[ibuffer-or-filter]' - Replace the top two filters with their logical OR. |
2233 '\\[ibuffer-pop-filter]' - Remove the top filter. | 2260 '\\[ibuffer-pop-filter]' - Remove the top filter. |
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 |
2240 '\\[ibuffer-toggle-sorting-mode]' - Rotate between the various sorting modes. | 2272 '\\[ibuffer-toggle-sorting-mode]' - Rotate between the various sorting modes. |
2241 '\\[ibuffer-invert-sorting]' - Reverse the current sorting order. | 2273 '\\[ibuffer-invert-sorting]' - Reverse the current sorting order. |
2258 '\\[ibuffer-visit-buffer-other-window]' - As above, but in another window. | 2290 '\\[ibuffer-visit-buffer-other-window]' - As above, but in another window. |
2259 '\\[ibuffer-visit-buffer-other-window-noselect]' - As both above, but don't select | 2291 '\\[ibuffer-visit-buffer-other-window-noselect]' - As both above, but don't select |
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 |
2267 are working on an Emacs Lisp project. You can create an Ibuffer | 2299 are working on an Emacs Lisp project. You can create an Ibuffer |
2268 buffer displays buffers in just `emacs-lisp' modes via | 2300 buffer displays buffers in just `emacs-lisp' modes via |
2286 Filters can also be saved and restored using mnemonic names: see the | 2318 Filters can also be saved and restored using mnemonic names: see the |
2287 functions `ibuffer-save-filters' and `ibuffer-switch-to-saved-filters'. | 2319 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) |
2295 (setq mode-name "Ibuffer") | 2353 (setq mode-name "Ibuffer") |
2296 (setq buffer-read-only t) | 2354 (setq buffer-read-only t) |
2312 (set (make-local-variable 'ibuffer-sorting-reversep) | 2370 (set (make-local-variable 'ibuffer-sorting-reversep) |
2313 ibuffer-default-sorting-reversep) | 2371 ibuffer-default-sorting-reversep) |
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) |
2322 (set (make-local-variable 'ibuffer-cached-elide-long-columns) nil) | 2381 (set (make-local-variable 'ibuffer-cached-elide-long-columns) nil) |
2323 (set (make-local-variable 'ibuffer-current-format) nil) | 2382 (set (make-local-variable 'ibuffer-current-format) nil) |