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)