• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/

Lines Matching +refs:ibuffer +refs:mode

0 ;;; ibuffer.el --- operate on buffers like dired
30 ;; ibuffer.el is an advanced replacement for the `buffer-menu' which
44 ;; because it has a recursive dependency on ibuffer.el
45 (defvar ibuffer-auto-mode)
46 (defvar ibuffer-cached-filter-formats)
47 (defvar ibuffer-compiled-filter-formats)
48 (defvar ibuffer-filter-format-alist)
49 (defvar ibuffer-filter-group-kill-ring)
50 (defvar ibuffer-filter-groups)
51 (defvar ibuffer-filtering-qualifiers)
52 (defvar ibuffer-hidden-filter-groups)
53 (defvar ibuffer-inline-columns)
54 (defvar ibuffer-show-empty-filter-groups)
55 (defvar ibuffer-tmp-hide-regexps)
56 (defvar ibuffer-tmp-show-regexps)
58 (defgroup ibuffer nil
67 (defcustom ibuffer-formats '((mark modified read-only " " (name 18 18 :left :elide)
69 " " (mode 16 16 :left :elide) " " filename-and-process)
74 attributes of a buffer such as size, name, and mode in a particular
77 `define-ibuffer-column', which allows you to define your own columns
82 Each element in `ibuffer-formats' should be a list containing COLUMN
86 mark modified read-only name size mode process filename
87 When you define your own columns using `define-ibuffer-column', just
106 Some example of valid entries in `ibuffer-formats', with
125 (setq ibuffer-formats '((mark \" \" name)
131 Using \\[ibuffer-switch-format], you can rotate the display between
134 :group 'ibuffer)
136 (defcustom ibuffer-always-compile-formats (featurep 'bytecomp)
137 "If non-nil, then use the byte-compiler to optimize `ibuffer-formats'.
141 :group 'ibuffer)
143 (defcustom ibuffer-fontification-alist
146 (string-match ibuffer-compressed-file-name-regexp
153 (30 (memq major-mode ibuffer-help-buffer-modes) font-lock-comment-face)
154 (35 (eq major-mode 'dired-mode) font-lock-function-name-face))
168 :group 'ibuffer)
170 (defcustom ibuffer-use-other-window nil
173 :group 'ibuffer)
175 (defcustom ibuffer-default-shrink-to-minimum-size nil
178 :group 'ibuffer)
179 (defvar ibuffer-shrink-to-minimum-size nil)
181 (defcustom ibuffer-display-summary t
184 :group 'ibuffer)
186 (defcustom ibuffer-truncate-lines t
189 :group 'ibuffer)
191 (defcustom ibuffer-case-fold-search case-fold-search
194 :group 'ibuffer)
196 (defcustom ibuffer-default-sorting-mode 'recency
205 (const :tag "Major mode" :value major-mode))
206 :group 'ibuffer)
207 (defvar ibuffer-sorting-mode nil)
209 (defcustom ibuffer-default-sorting-reversep nil
212 :group 'ibuffer)
213 (defvar ibuffer-sorting-reversep nil)
215 (defcustom ibuffer-elide-long-columns nil
218 :group 'ibuffer)
219 (make-obsolete-variable 'ibuffer-elide-long-columns
220 "use the :elide argument of `ibuffer-formats'."
223 (defcustom ibuffer-eliding-string "..."
226 :group 'ibuffer)
228 (defcustom ibuffer-maybe-show-predicates `(,(lambda (buf)
239 via `ibuffer-default-display-maybe-show-predicates' and is toggled by
240 giving a non-nil prefix argument to `ibuffer-update'.
243 :group 'ibuffer)
245 (defcustom ibuffer-default-display-maybe-show-predicates nil
246 "Non-nil means show buffers that match `ibuffer-maybe-show-predicates'."
248 :group 'ibuffer)
250 (defvar ibuffer-display-maybe-show-predicates nil)
252 (defvar ibuffer-current-format nil)
254 (defcustom ibuffer-movement-cycle t
257 :group 'ibuffer)
259 (defcustom ibuffer-modified-char ?*
262 :group 'ibuffer)
264 (defcustom ibuffer-read-only-char ?%
267 :group 'ibuffer)
269 (defcustom ibuffer-marked-char ?>
272 :group 'ibuffer)
274 (defcustom ibuffer-deletion-char ?D
277 :group 'ibuffer)
279 (defcustom ibuffer-expert nil
282 :group 'ibuffer)
284 (defcustom ibuffer-view-ibuffer nil
290 :group 'ibuffer)
292 (defcustom ibuffer-always-show-last-buffer nil
295 `ibuffer-never-show-predicates'."
299 :group 'ibuffer)
301 (defcustom ibuffer-jump-offer-only-visible-buffers nil
303 in completion lists of the `ibuffer-jump-to-buffer' command."
305 :group 'ibuffer)
307 (defcustom ibuffer-use-header-line (boundp 'header-line-format)
310 :group 'ibuffer)
312 (defcustom ibuffer-default-directory nil
314 If nil, inherit the directory of the buffer in which `ibuffer' was
319 :group 'ibuffer)
321 (defcustom ibuffer-help-buffer-modes
322 '(help-mode apropos-mode Info-mode Info-edit-mode)
325 :group 'ibuffer)
327 (defcustom ibuffer-compressed-file-name-regexp
331 :group 'ibuffer)
333 (defcustom ibuffer-hook nil
334 "Hook run when `ibuffer' is called."
336 :group 'ibuffer)
337 (define-obsolete-variable-alias 'ibuffer-hooks
338 'ibuffer-hook "22.1")
340 (defcustom ibuffer-mode-hook nil
341 "Hook run upon entry into `ibuffer-mode'."
343 :group 'ibuffer)
344 (define-obsolete-variable-alias 'ibuffer-mode-hooks
345 'ibuffer-mode-hook "22.1")
347 (defcustom ibuffer-load-hook nil
350 :group 'ibuffer)
352 (defcustom ibuffer-marked-face 'font-lock-warning-face
355 :group 'ibuffer)
357 (defcustom ibuffer-deletion-face 'font-lock-type-face
360 :group 'ibuffer)
362 (defcustom ibuffer-title-face 'font-lock-type-face
365 :group 'ibuffer)
367 (defcustom ibuffer-filter-group-name-face 'bold
370 :group 'ibuffer)
372 (defcustom ibuffer-directory-abbrev-alist nil
378 :group 'ibuffer)
381 (defvar ibuffer-mode-map nil)
382 (defvar ibuffer-mode-operate-map nil)
383 (defvar ibuffer-mode-groups-popup nil)
384 (unless ibuffer-mode-map
399 (define-key map (kbd "m") 'ibuffer-mark-forward)
400 (define-key map (kbd "t") 'ibuffer-toggle-marks)
401 (define-key map (kbd "u") 'ibuffer-unmark-forward)
402 (define-key map (kbd "=") 'ibuffer-diff-with-file)
403 (define-key map (kbd "j") 'ibuffer-jump-to-buffer)
404 (define-key map (kbd "M-g") 'ibuffer-jump-to-buffer)
405 (define-key map (kbd "DEL") 'ibuffer-unmark-backward)
406 (define-key map (kbd "M-DEL") 'ibuffer-unmark-all)
407 (define-key map (kbd "* *") 'ibuffer-unmark-all)
408 (define-key map (kbd "* M") 'ibuffer-mark-by-mode)
409 (define-key map (kbd "* m") 'ibuffer-mark-modified-buffers)
410 (define-key map (kbd "* u") 'ibuffer-mark-unsaved-buffers)
411 (define-key map (kbd "* s") 'ibuffer-mark-special-buffers)
412 (define-key map (kbd "* r") 'ibuffer-mark-read-only-buffers)
413 (define-key map (kbd "* /") 'ibuffer-mark-dired-buffers)
414 (define-key map (kbd "* e") 'ibuffer-mark-dissociated-buffers)
415 (define-key map (kbd "* h") 'ibuffer-mark-help-buffers)
416 (define-key map (kbd "* z") 'ibuffer-mark-compressed-file-buffers)
417 (define-key map (kbd ".") 'ibuffer-mark-old-buffers)
419 (define-key map (kbd "d") 'ibuffer-mark-for-delete)
420 (define-key map (kbd "C-d") 'ibuffer-mark-for-delete-backwards)
421 (define-key map (kbd "k") 'ibuffer-mark-for-delete)
422 (define-key map (kbd "x") 'ibuffer-do-kill-on-deletion-marks)
425 (define-key map (kbd "n") 'ibuffer-forward-line)
426 (define-key map (kbd "<down>") 'ibuffer-forward-line)
428 (define-key map (kbd "p") 'ibuffer-backward-line)
429 (define-key map (kbd "<up>") 'ibuffer-backward-line)
430 (define-key map (kbd "M-}") 'ibuffer-forward-next-marked)
431 (define-key map (kbd "M-{") 'ibuffer-backwards-next-marked)
432 (define-key map (kbd "l") 'ibuffer-redisplay)
433 (define-key map (kbd "g") 'ibuffer-update)
434 (define-key map "`" 'ibuffer-switch-format)
435 (define-key map "-" 'ibuffer-add-to-tmp-hide)
436 (define-key map "+" 'ibuffer-add-to-tmp-show)
437 (define-key map "b" 'ibuffer-bury-buffer)
438 (define-key map (kbd ",") 'ibuffer-toggle-sorting-mode)
439 (define-key map (kbd "s i") 'ibuffer-invert-sorting)
440 (define-key map (kbd "s a") 'ibuffer-do-sort-by-alphabetic)
441 (define-key map (kbd "s v") 'ibuffer-do-sort-by-recency)
442 (define-key map (kbd "s s") 'ibuffer-do-sort-by-size)
443 (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode)
445 (define-key map (kbd "/ m") 'ibuffer-filter-by-mode)
446 (define-key map (kbd "/ M") 'ibuffer-filter-by-used-mode)
447 (define-key map (kbd "/ n") 'ibuffer-filter-by-name)
448 (define-key map (kbd "/ c") 'ibuffer-filter-by-content)
449 (define-key map (kbd "/ e") 'ibuffer-filter-by-predicate)
450 (define-key map (kbd "/ f") 'ibuffer-filter-by-filename)
451 (define-key map (kbd "/ >") 'ibuffer-filter-by-size-gt)
452 (define-key map (kbd "/ <") 'ibuffer-filter-by-size-lt)
453 (define-key map (kbd "/ r") 'ibuffer-switch-to-saved-filters)
454 (define-key map (kbd "/ a") 'ibuffer-add-saved-filters)
455 (define-key map (kbd "/ x") 'ibuffer-delete-saved-filters)
456 (define-key map (kbd "/ d") 'ibuffer-decompose-filter)
457 (define-key map (kbd "/ s") 'ibuffer-save-filters)
458 (define-key map (kbd "/ p") 'ibuffer-pop-filter)
459 (define-key map (kbd "/ !") 'ibuffer-negate-filter)
460 (define-key map (kbd "/ t") 'ibuffer-exchange-filters)
461 (define-key map (kbd "/ TAB") 'ibuffer-exchange-filters)
462 (define-key map (kbd "/ o") 'ibuffer-or-filter)
463 (define-key map (kbd "/ g") 'ibuffer-filters-to-filter-group)
464 (define-key map (kbd "/ P") 'ibuffer-pop-filter-group)
465 (define-key map (kbd "/ D") 'ibuffer-decompose-filter-group)
466 (define-key map (kbd "/ /") 'ibuffer-filter-disable)
468 (define-key map (kbd "M-n") 'ibuffer-forward-filter-group)
469 (define-key map (kbd "<right>") 'ibuffer-forward-filter-group)
470 (define-key map (kbd "M-p") 'ibuffer-backward-filter-group)
471 (define-key map (kbd "<left>") 'ibuffer-backward-filter-group)
472 (define-key map (kbd "M-j") 'ibuffer-jump-to-filter-group)
473 (define-key map (kbd "C-k") 'ibuffer-kill-line)
474 (define-key map (kbd "C-y") 'ibuffer-yank)
475 (define-key map (kbd "/ S") 'ibuffer-save-filter-groups)
476 (define-key map (kbd "/ R") 'ibuffer-switch-to-saved-filter-groups)
477 (define-key map (kbd "/ X") 'ibuffer-delete-saved-filter-groups)
478 (define-key map (kbd "/ \\") 'ibuffer-clear-filter-groups)
480 (define-key map (kbd "q") 'ibuffer-quit)
481 (define-key map (kbd "h") 'describe-mode)
482 (define-key map (kbd "?") 'describe-mode)
484 (define-key map (kbd "% n") 'ibuffer-mark-by-name-regexp)
485 (define-key map (kbd "% m") 'ibuffer-mark-by-mode-regexp)
486 (define-key map (kbd "% f") 'ibuffer-mark-by-file-name-regexp)
488 (define-key map (kbd "C-t") 'ibuffer-visit-tags-table)
490 (define-key map (kbd "|") 'ibuffer-do-shell-command-pipe)
491 (define-key map (kbd "!") 'ibuffer-do-shell-command-file)
492 (define-key map (kbd "~") 'ibuffer-do-toggle-modified)
494 (define-key map (kbd "A") 'ibuffer-do-view)
495 (define-key map (kbd "D") 'ibuffer-do-delete)
496 (define-key map (kbd "E") 'ibuffer-do-eval)
497 (define-key map (kbd "F") 'ibuffer-do-shell-command-file)
498 (define-key map (kbd "I") 'ibuffer-do-query-replace-regexp)
499 (define-key map (kbd "H") 'ibuffer-do-view-other-frame)
500 (define-key map (kbd "N") 'ibuffer-do-shell-command-pipe-replace)
501 (define-key map (kbd "M") 'ibuffer-do-toggle-modified)
502 (define-key map (kbd "O") 'ibuffer-do-occur)
503 (define-key map (kbd "P") 'ibuffer-do-print)
504 (define-key map (kbd "Q") 'ibuffer-do-query-replace)
505 (define-key map (kbd "R") 'ibuffer-do-rename-uniquely)
506 (define-key map (kbd "S") 'ibuffer-do-save)
507 (define-key map (kbd "T") 'ibuffer-do-toggle-read-only)
508 (define-key map (kbd "U") 'ibuffer-do-replace-regexp)
509 (define-key map (kbd "V") 'ibuffer-do-revert)
510 (define-key map (kbd "W") 'ibuffer-do-view-and-eval)
511 (define-key map (kbd "X") 'ibuffer-do-shell-command-pipe)
513 (define-key map (kbd "k") 'ibuffer-do-kill-lines)
514 (define-key map (kbd "w") 'ibuffer-copy-filename-as-kill)
516 (define-key map (kbd "RET") 'ibuffer-visit-buffer)
517 (define-key map (kbd "e") 'ibuffer-visit-buffer)
518 (define-key map (kbd "f") 'ibuffer-visit-buffer)
519 (define-key map (kbd "C-x C-f") 'ibuffer-find-file)
520 (define-key map (kbd "o") 'ibuffer-visit-buffer-other-window)
521 (define-key map (kbd "C-o") 'ibuffer-visit-buffer-other-window-noselect)
522 (define-key map (kbd "M-o") 'ibuffer-visit-buffer-1-window)
523 (define-key map (kbd "v") 'ibuffer-do-view)
524 (define-key map (kbd "C-x v") 'ibuffer-do-view-horizontally)
525 (define-key map (kbd "C-c C-a") 'ibuffer-auto-mode)
526 (define-key map (kbd "C-x 4 RET") 'ibuffer-visit-buffer-other-window)
527 (define-key map (kbd "C-x 5 RET") 'ibuffer-visit-buffer-other-frame)
533 '(menu-item "View this buffer" ibuffer-visit-buffer))
535 '(menu-item "View (other window)" ibuffer-visit-buffer-other-window))
537 '(menu-item "View (other frame)" ibuffer-visit-buffer-other-frame))
538 (define-key-after map [menu-bar view ibuffer-update]
539 '(menu-item "Update" ibuffer-update
542 '(menu-item "Switch display format" ibuffer-switch-format
543 :help "Toggle between available values of `ibuffer-formats'"))
551 (define-key-after map [menu-bar view sort do-sort-by-major-mode]
552 '(menu-item "Sort by major mode" ibuffer-do-sort-by-major-mode))
554 '(menu-item "Sort by buffer size" ibuffer-do-sort-by-size))
556 '(menu-item "Sort lexicographically" ibuffer-do-sort-by-alphabetic
559 '(menu-item "Sort by view time" ibuffer-do-sort-by-recency
564 '(menu-item "Reverse sorting order" ibuffer-invert-sorting))
565 (define-key-after map [menu-bar view sort toggle-sorting-mode]
566 '(menu-item "Switch sorting mode" ibuffer-toggle-sorting-mode
573 '(menu-item "Disable all filtering" ibuffer-filter-disable
574 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
575 (define-key-after map [menu-bar view filter filter-by-mode]
576 '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode))
577 (define-key-after map [menu-bar view filter filter-by-mode]
578 '(menu-item "Add filter by major mode in use..." ibuffer-filter-by-used-mode))
580 '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name))
582 '(menu-item "Add filter by filename..." ibuffer-filter-by-filename))
584 '(menu-item "Add filter by size less than..." ibuffer-filter-by-size-lt))
586 '(menu-item "Add filter by size greater than..." ibuffer-filter-by-size-gt))
588 '(menu-item "Add filter by content (regexp)..." ibuffer-filter-by-content))
590 '(menu-item "Add filter by Lisp predicate..." ibuffer-filter-by-predicate))
592 '(menu-item "Remove top filter" ibuffer-pop-filter
593 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
595 '(menu-item "OR top two filters" ibuffer-or-filter
596 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
597 (cdr ibuffer-filtering-qualifiers))
600 '(menu-item "Negate top filter" ibuffer-negate-filter
601 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
603 '(menu-item "Decompose top filter" ibuffer-decompose-filter
604 :enable (and (featurep 'ibuf-ext) (memq (car ibuffer-filtering-qualifiers) '(or saved not)))
607 '(menu-item "Swap top two filters" ibuffer-exchange-filters
608 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers
609 (cdr ibuffer-filtering-qualifiers))))
611 '(menu-item "Save current filters permanently..." ibuffer-save-filters
612 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
615 '(menu-item "Restore permanently saved filters..." ibuffer-switch-to-saved-filters
616 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)
619 '(menu-item "Add to permanently saved filters..." ibuffer-add-saved-filters
620 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)
624 ibuffer-delete-saved-filters
625 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filters)))
631 ibuffer-filters-to-filter-group
632 :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
635 ibuffer-forward-filter-group))
638 ibuffer-backward-filter-group))
641 ibuffer-jump-to-filter-group))
644 ibuffer-kill-filter-group
645 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
648 ibuffer-yank-filter-group
649 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
652 ibuffer-pop-filter-group
653 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
656 ibuffer-clear-filter-groups
657 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
660 ibuffer-pop-filter-group
662 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
665 ibuffer-save-filter-groups
666 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)
670 ibuffer-switch-to-saved-filter-groups
671 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)
675 ibuffer-delete-saved-filter-groups
676 :enable (and (featurep 'ibuf-ext) ibuffer-saved-filter-groups)))
677 (define-key-after groups-map [set-filter-groups-by-mode]
678 '(menu-item "Set current filter groups to filter by mode"
679 ibuffer-set-filter-groups-by-mode))
687 '(menu-item "Diff with file" ibuffer-diff-with-file
689 (define-key-after map [menu-bar view auto-mode]
690 '(menu-item "Toggle Auto Mode" ibuffer-auto-mode
693 '(menu-item "Customize Ibuffer" ibuffer-customize
700 '(menu-item "Toggle marks" ibuffer-toggle-marks
703 '(menu-item "Mark" ibuffer-mark-forward
706 '(menu-item "Unmark" ibuffer-unmark-forward
708 (define-key-after map [menu-bar mark mark-by-mode]
709 '(menu-item "Mark by mode..." ibuffer-mark-by-mode
710 :help "Mark all buffers in a particular major mode"))
712 '(menu-item "Mark modified buffers" ibuffer-mark-modified-buffers
715 '(menu-item "Mark unsaved buffers" ibuffer-mark-unsaved-buffers
718 '(menu-item "Mark read-only buffers" ibuffer-mark-read-only-buffers
721 '(menu-item "Mark special buffers" ibuffer-mark-special-buffers
724 '(menu-item "Mark dired buffers" ibuffer-mark-dired-buffers
725 :help "Mark buffers in dired-mode"))
727 '(menu-item "Mark dissociated buffers" ibuffer-mark-dissociated-buffers
730 '(menu-item "Mark help buffers" ibuffer-mark-help-buffers
731 :help "Mark buffers in help-mode"))
733 '(menu-item "Mark compressed file buffers" ibuffer-mark-compressed-file-buffers
736 '(menu-item "Mark old buffers" ibuffer-mark-old-buffers
739 '(menu-item "Unmark All" ibuffer-unmark-all))
745 '(menu-item "Mark by buffer name (regexp)..." ibuffer-mark-by-name-regexp
747 (define-key-after map [menu-bar mark mark-by-mode-regexp]
748 '(menu-item "Mark by major mode (regexp)..." ibuffer-mark-by-mode-regexp
749 :help "Mark buffers whose major mode name matches a regexp"))
751 '(menu-item "Mark by file name (regexp)..." ibuffer-mark-by-file-name-regexp
757 '(menu-item "View" ibuffer-do-view))
759 '(menu-item "View (separate frame)" ibuffer-do-view-other-frame))
761 '(menu-item "Save" ibuffer-do-save))
763 '(menu-item "Replace (regexp)..." ibuffer-do-replace-regexp
766 '(menu-item "Query Replace..." ibuffer-do-query-replace
769 '(menu-item "Query Replace (regexp)..." ibuffer-do-query-replace-regexp
772 '(menu-item "Print" ibuffer-do-print))
774 '(menu-item "Toggle modification flag" ibuffer-do-toggle-modified))
776 '(menu-item "Revert" ibuffer-do-revert
779 '(menu-item "Rename Uniquely" ibuffer-do-rename-uniquely
782 '(menu-item "Kill" ibuffer-do-delete))
784 '(menu-item "List lines matching..." ibuffer-do-occur
787 '(menu-item "Pipe to shell command..." ibuffer-do-shell-command-pipe
790 '(menu-item "Pipe to shell command (replace)..." ibuffer-do-shell-command-pipe-replace
793 '(menu-item "Shell command on buffer's file..." ibuffer-do-shell-command-file
796 '(menu-item "Eval..." ibuffer-do-eval
799 '(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
802 (setq ibuffer-mode-map map
803 ibuffer-mode-operate-map operate-map
804 ibuffer-mode-groups-popup (copy-keymap groups-map))))
806 (define-key ibuffer-mode-groups-popup [kill-filter-group]
808 ibuffer-kill-line
810 ibuffer-filter-groups)))
811 (define-key ibuffer-mode-groups-popup [yank-filter-group]
813 ibuffer-yank
815 ibuffer-filter-group-kill-ring)))
817 (defvar ibuffer-name-map
819 (define-key map [(mouse-1)] 'ibuffer-mouse-toggle-mark)
820 (define-key map [(mouse-2)] 'ibuffer-mouse-visit-buffer)
821 (define-key map [down-mouse-3] 'ibuffer-mouse-popup-menu)
824 (defvar ibuffer-mode-name-map
826 (define-key map [(mouse-2)] 'ibuffer-mouse-filter-by-mode)
827 (define-key map (kbd "RET") 'ibuffer-interactive-filter-by-mode)
830 (defvar ibuffer-name-header-map
832 (define-key map [(mouse-1)] 'ibuffer-do-sort-by-alphabetic)
835 (defvar ibuffer-size-header-map
837 (define-key map [(mouse-1)] 'ibuffer-do-sort-by-size)
840 (defvar ibuffer-mode-header-map
842 (define-key map [(mouse-1)] 'ibuffer-do-sort-by-major-mode)
845 (defvar ibuffer-mode-filter-group-map
847 (define-key map [(mouse-1)] 'ibuffer-mouse-toggle-mark)
848 (define-key map [(mouse-2)] 'ibuffer-mouse-toggle-filter-group)
849 (define-key map (kbd "RET") 'ibuffer-toggle-filter-group)
850 (define-key map [down-mouse-3] 'ibuffer-mouse-popup-menu)
853 (defvar ibuffer-restore-window-config-on-quit nil
854 "If non-nil, restore previous window configuration upon exiting `ibuffer'.")
856 (defvar ibuffer-prev-window-config nil
859 (defvar ibuffer-did-modification nil)
861 (defvar ibuffer-compiled-formats nil)
862 (defvar ibuffer-cached-formats nil)
863 (defvar ibuffer-cached-eliding-string nil)
864 (defvar ibuffer-cached-elide-long-columns 0)
866 (defvar ibuffer-sorting-functions-alist nil
870 use `define-ibuffer-sorter' instead.
879 (defun ibuffer-columnize-and-insert-list (list &optional pad-width)
900 (defsubst ibuffer-current-mark ()
902 'ibuffer-properties)))
904 (defun ibuffer-mouse-toggle-mark (event)
911 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name)
912 (ibuffer-toggle-marks it)
914 (let ((mark (ibuffer-current-mark)))
916 (if (eq mark ibuffer-marked-char)
917 (ibuffer-set-mark ?\s)
918 (ibuffer-set-mark ibuffer-marked-char)))))
921 (defun ibuffer-find-file (file &optional wildcards)
924 (let ((default-directory (let ((buf (ibuffer-current-buffer)))
933 (defun ibuffer-mouse-visit-buffer (event)
939 (ibuffer-current-buffer t))))
941 (defun ibuffer-mouse-popup-menu (event)
947 (if (get-text-property eventpt 'ibuffer-filter-group-name)
950 (popup-menu ibuffer-mode-groups-popup))
952 (ibuffer-save-marks
954 (ibuffer-unmark-all ?\r)
957 (ibuffer-set-mark ibuffer-marked-char))
959 (popup-menu ibuffer-mode-operate-map)))))
964 (defun ibuffer-skip-properties (props direction)
973 (defun ibuffer-customize ()
976 (customize-group 'ibuffer))
978 (defun ibuffer-backward-line (&optional arg skip-group-names)
985 (when (and ibuffer-movement-cycle
986 (or (get-text-property (point) 'ibuffer-title)
989 'ibuffer-filter-group-name))))
992 (ibuffer-skip-properties (append '(ibuffer-summary)
994 '(ibuffer-filter-group-name)))
997 (when (get-text-property (point) 'ibuffer-title)
1002 (defun ibuffer-forward-line (&optional arg skip-group-names)
1007 (when (and ibuffer-movement-cycle
1009 (get-text-property (point) 'ibuffer-summary)))
1011 (when (or (get-text-property (point) 'ibuffer-title)
1013 (get-text-property (point) 'ibuffer-filter-group-name)))
1016 (ibuffer-skip-properties (append '(ibuffer-title)
1018 '(ibuffer-filter-group-name)))
1021 (ibuffer-backward-line (- arg))
1024 (when (and ibuffer-movement-cycle
1026 (get-text-property (point) 'ibuffer-summary)))
1029 (ibuffer-skip-properties (append '(ibuffer-title)
1031 '(ibuffer-filter-group-name)))
1034 (defun ibuffer-visit-buffer (&optional single)
1039 (let ((buf (ibuffer-current-buffer t)))
1045 (defun ibuffer-visit-buffer-other-window (&optional noselect)
1048 (let ((buf (ibuffer-current-buffer t)))
1056 (defun ibuffer-visit-buffer-other-window-noselect ()
1059 (ibuffer-visit-buffer-other-window t))
1061 (defun ibuffer-visit-buffer-other-frame ()
1064 (let ((buf (ibuffer-current-buffer t)))
1068 (defun ibuffer-visit-buffer-1-window ()
1071 (ibuffer-visit-buffer t))
1073 (defun ibuffer-bury-buffer ()
1076 (let ((buf (ibuffer-current-buffer t))
1079 (ibuffer-update nil t)
1082 (defun ibuffer-visit-tags-table ()
1085 (let ((file (buffer-file-name (ibuffer-current-buffer t))))
1090 (defun ibuffer-do-view (&optional other-frame)
1096 (ibuffer-do-view-1 (if other-frame 'other-frame 'vertically)))
1098 (defun ibuffer-do-view-horizontally (&optional other-frame)
1099 "As `ibuffer-do-view', but split windows horizontally."
1101 (ibuffer-do-view-1 (if other-frame 'other-frame 'horizontally)))
1103 (defun ibuffer-do-view-1 (type)
1104 (let ((marked-bufs (ibuffer-get-marked-buffers)))
1106 (setq marked-bufs (list (ibuffer-current-buffer t))))
1108 (not ibuffer-expert)
1130 (defun ibuffer-do-view-other-frame ()
1133 (ibuffer-do-view t))
1135 (defsubst ibuffer-map-marked-lines (func)
1136 (prog1 (ibuffer-map-on-mark ibuffer-marked-char func)
1137 (ibuffer-redisplay t)))
1139 (defun ibuffer-shrink-to-fit (&optional owin)
1143 (defun ibuffer-confirm-operation-on (operation names)
1145 (or ibuffer-expert
1152 (ibuffer-columnize-and-insert-list names)
1186 (defsubst ibuffer-map-lines-nomodify (function)
1187 "As `ibuffer-map-lines', but don't set the modification flag."
1188 (ibuffer-map-lines function t))
1190 (defun ibuffer-buffer-names-with-mark (mark)
1191 (let ((ibuffer-buffer-names-with-mark-result nil))
1192 (ibuffer-map-lines-nomodify
1196 ibuffer-buffer-names-with-mark-result))))
1197 ibuffer-buffer-names-with-mark-result))
1199 (defsubst ibuffer-marked-buffer-names ()
1200 (ibuffer-buffer-names-with-mark ibuffer-marked-char))
1202 (defsubst ibuffer-deletion-marked-buffer-names ()
1203 (ibuffer-buffer-names-with-mark ibuffer-deletion-char))
1205 (defun ibuffer-count-marked-lines (&optional all)
1207 (ibuffer-map-lines-nomodify
1210 (ibuffer-map-lines-nomodify
1212 (char-equal mark ibuffer-marked-char)))))
1214 (defsubst ibuffer-count-deletion-lines ()
1215 (ibuffer-map-lines-nomodify
1217 (char-equal mark ibuffer-deletion-char))))
1219 (defsubst ibuffer-map-deletion-lines (func)
1220 (ibuffer-map-on-mark ibuffer-deletion-char func))
1222 (define-ibuffer-op ibuffer-do-save ()
1239 (define-ibuffer-op ibuffer-do-toggle-modified ()
1245 (define-ibuffer-op ibuffer-do-toggle-read-only ()
1251 (define-ibuffer-op ibuffer-do-delete ()
1262 (define-ibuffer-op ibuffer-do-kill-on-deletion-marks ()
1274 (defun ibuffer-unmark-all (mark)
1277 (if (= (ibuffer-count-marked-lines t) 0)
1280 ((char-equal mark ibuffer-marked-char)
1281 (ibuffer-map-marked-lines
1283 (ibuffer-set-mark-1 ?\s)
1285 ((char-equal mark ibuffer-deletion-char)
1286 (ibuffer-map-deletion-lines
1288 (ibuffer-set-mark-1 ?\s)
1291 (ibuffer-map-lines
1294 (ibuffer-set-mark-1 ?\s))
1296 (ibuffer-redisplay t))
1298 (defun ibuffer-toggle-marks (&optional group)
1305 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name)
1308 (ibuffer-map-lines
1310 (cond ((eq mark ibuffer-marked-char)
1311 (ibuffer-set-mark-1 ?\s)
1314 (ibuffer-set-mark-1 ibuffer-marked-char)
1320 (ibuffer-redisplay t))
1322 (defun ibuffer-mark-forward (arg)
1326 (ibuffer-mark-interactive arg ibuffer-marked-char 1))
1328 (defun ibuffer-unmark-forward (arg)
1332 (ibuffer-mark-interactive arg ?\s 1))
1334 (defun ibuffer-unmark-backward (arg)
1338 (ibuffer-mark-interactive arg ?\s -1))
1340 (defun ibuffer-mark-interactive (arg mark movement)
1341 (assert (eq major-mode 'ibuffer-mode))
1343 (ibuffer-forward-line 0)
1344 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name)
1347 (ibuffer-mark-on-buffer #'identity mark it))
1348 (ibuffer-forward-line 0 t)
1351 (ibuffer-set-mark mark)
1352 (ibuffer-forward-line movement t)
1355 (defun ibuffer-set-mark (mark)
1356 (assert (eq major-mode 'ibuffer-mode))
1358 (ibuffer-set-mark-1 mark)
1359 (setq ibuffer-did-modification t)
1360 (ibuffer-redisplay-current)
1363 (defun ibuffer-set-mark-1 (mark)
1366 (put-text-property beg end 'ibuffer-properties
1367 (list (ibuffer-current-buffer)
1370 (defun ibuffer-mark-for-delete (arg)
1374 (ibuffer-mark-interactive arg ibuffer-deletion-char 1))
1376 (defun ibuffer-mark-for-delete-backwards (arg)
1380 (ibuffer-mark-interactive arg ibuffer-deletion-char -1))
1382 (defun ibuffer-current-buffer (&optional must-be-live)
1384 'ibuffer-properties))))
1388 (error (substitute-command-keys "Buffer %s has been killed; use `\\[ibuffer-update]' to update") buf))
1392 (defun ibuffer-active-formats-name ()
1393 (if (boundp 'ibuffer-filter-format-alist)
1395 (dolist (filter ibuffer-filtering-qualifiers ret)
1396 (let ((val (assq (car filter) ibuffer-filter-format-alist)))
1401 :ibuffer-formats))
1402 :ibuffer-formats))
1404 (defun ibuffer-current-formats (uncompiledp)
1405 (let* ((name (ibuffer-active-formats-name)))
1406 (ibuffer-check-formats)
1407 (if (eq name :ibuffer-formats)
1409 ibuffer-formats
1410 ibuffer-compiled-formats)
1413 ibuffer-filter-format-alist
1414 ibuffer-compiled-filter-formats))))))
1416 (defun ibuffer-current-format (&optional uncompiledp)
1417 (or ibuffer-current-format
1418 (setq ibuffer-current-format 0))
1419 (nth ibuffer-current-format (ibuffer-current-formats uncompiledp)))
1421 (defun ibuffer-expand-format-entry (form)
1424 (let ((sym (intern (concat "ibuffer-make-column-"
1429 (assq sym ibuffer-inline-columns))
1430 (error "Unknown column %s in ibuffer-formats" form))
1444 (defun ibuffer-compile-make-eliding-form (strvar elide from-end-p)
1445 (let ((ellipsis (propertize ibuffer-eliding-string 'font-lock-face 'bold)))
1446 (if (or elide (with-no-warnings ibuffer-elide-long-columns))
1451 (length ibuffer-eliding-string)))
1458 (defun ibuffer-compile-make-substring-form (strvar maxvar from-end-p)
1464 (defun ibuffer-compile-make-format-form (strvar widthform alignment)
1476 (defun ibuffer-compile-format (format)
1485 ;; " ", mark, or (mode 16 16 :right).
1489 (let* ((form (ibuffer-expand-format-entry form))
1512 ,(ibuffer-compile-make-format-form
1524 ,(ibuffer-compile-make-substring-form
1532 ,(ibuffer-compile-make-eliding-form 'str
1539 ;; `ibuffer-inline-columns' alist and insert it
1542 (ibuffer-aif (assq sym ibuffer-inline-columns)
1548 (insertgenfn (ibuffer-aif (get sym 'ibuffer-column-summarizer)
1553 (put ',sym 'ibuffer-column-summary
1554 (cons ret (get ',sym 'ibuffer-column-summary)))
1601 (funcall (if (or ibuffer-always-compile-formats
1619 (defun ibuffer-recompile-formats ()
1620 "Recompile `ibuffer-formats'."
1622 (setq ibuffer-compiled-formats
1623 (mapcar #'ibuffer-compile-format ibuffer-formats))
1624 (when (boundp 'ibuffer-filter-format-alist)
1625 (setq ibuffer-compiled-filter-formats
1629 (mapcar #'ibuffer-compile-format formats))
1631 ibuffer-filter-format-alist))))
1633 (defun ibuffer-clear-summary-columns (format)
1635 (ibuffer-awhen (and (consp form)
1636 (get (car form) 'ibuffer-column-summarizer))
1637 (put (car form) 'ibuffer-column-summary nil))))
1639 (defun ibuffer-check-formats ()
1640 (when (null ibuffer-formats)
1643 (when (or (null ibuffer-compiled-formats)
1644 (null ibuffer-cached-formats)
1645 (not (eq ibuffer-cached-formats ibuffer-formats))
1646 (null ibuffer-cached-eliding-string)
1647 (not (equal ibuffer-cached-eliding-string ibuffer-eliding-string))
1648 (eql 0 ibuffer-cached-elide-long-columns)
1649 (not (eql ibuffer-cached-elide-long-columns
1650 (with-no-warnings ibuffer-elide-long-columns)))
1652 (not (eq ibuffer-cached-filter-formats
1653 ibuffer-filter-format-alist))
1654 (and ibuffer-filter-format-alist
1655 (null ibuffer-compiled-filter-formats))))
1657 (ibuffer-recompile-formats)
1658 (setq ibuffer-cached-formats ibuffer-formats
1659 ibuffer-cached-eliding-string ibuffer-eliding-string
1660 ibuffer-cached-elide-long-columns (with-no-warnings ibuffer-elide-long-columns))
1662 (setq ibuffer-cached-filter-formats ibuffer-filter-format-alist))
1665 (defvar ibuffer-inline-columns nil)
1667 (define-ibuffer-column mark (:name " " :inline t)
1670 (define-ibuffer-column read-only (:name "R" :inline t)
1672 (string ibuffer-read-only-char)
1675 (define-ibuffer-column modified (:name "M" :inline t)
1677 (string ibuffer-modified-char)
1680 (define-ibuffer-column name
1682 :header-mouse-map ibuffer-name-header-map
1684 ('mouse-face 'highlight 'keymap ibuffer-name-map
1685 'ibuffer-name-column t
1686 'help-echo '(if tooltip-mode
1695 (propertize (buffer-name) 'font-lock-face (ibuffer-buffer-name-face buffer mark)))
1697 (define-ibuffer-column size
1699 :header-mouse-map ibuffer-size-header-map
1711 (define-ibuffer-column mode
1713 :header-mouse-map ibuffer-mode-header-map
1716 'keymap ibuffer-mode-name-map
1717 'help-echo "mouse-2: filter by this mode"))
1718 (format "%s" mode-name))
1720 (define-ibuffer-column process
1727 (ibuffer-aif (get-buffer-process buffer)
1731 (define-ibuffer-column filename
1738 (let ((directory-abbrev-alist ibuffer-directory-abbrev-alist))
1747 (define-ibuffer-column filename-and-process
1768 (filename (ibuffer-make-column-filename buffer mark)))
1777 (defun ibuffer-format-column (str width alignment)
1785 (defun ibuffer-buffer-name-face (buf mark)
1786 (cond ((char-equal mark ibuffer-marked-char)
1787 ibuffer-marked-face)
1788 ((char-equal mark ibuffer-deletion-char)
1789 ibuffer-deletion-face)
1793 (dolist (e ibuffer-fontification-alist result)
1800 (defun ibuffer-insert-buffer-line (buffer mark format)
1802 (assert (eq major-mode 'ibuffer-mode))
1805 (put-text-property beg (point) 'ibuffer-properties (list buffer mark)))
1810 (defun ibuffer-redisplay-current ()
1811 (assert (eq major-mode 'ibuffer-mode))
1815 (let ((curformat (mapcar #'ibuffer-expand-format-entry
1816 (ibuffer-current-format t))))
1817 (ibuffer-clear-summary-columns curformat)
1818 (let ((buf (ibuffer-current-buffer)))
1820 (let ((mark (ibuffer-current-mark)))
1823 (ibuffer-insert-buffer-line
1825 (ibuffer-current-format)))
1826 (when ibuffer-shrink-to-minimum-size
1827 (ibuffer-shrink-to-fit)))))))
1829 (defun ibuffer-map-on-mark (mark func)
1830 (ibuffer-map-lines
1836 (defun ibuffer-map-lines (function &optional nomodify group)
1838 Don't set the ibuffer modification flag iff NOMODIFY is non-nil.
1845 (assert (eq major-mode 'ibuffer-mode))
1846 (ibuffer-forward-line 0)
1849 (ibuffer-forward-line 0)
1853 (ibuffer-map-lines-total 0)
1854 (ibuffer-map-lines-count 0))
1859 (ibuffer-forward-line 0 t)
1861 (not (get-text-property (point) 'ibuffer-summary))
1863 (ibuffer-forward-line 0 t)
1865 (not (get-text-property (point) 'ibuffer-summary)))))
1867 (if (buffer-live-p (ibuffer-current-buffer))
1869 (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group)
1873 (ibuffer-current-buffer)
1874 (ibuffer-current-mark))))
1881 (incf ibuffer-map-lines-total)
1887 (incf ibuffer-map-lines-count)
1888 (when (< ibuffer-map-lines-total
1892 (incf ibuffer-map-lines-count)
1894 ibuffer-map-lines-count)
1900 (ibuffer-forward-line 0)
1901 (ibuffer-forward-line (1- target-line-offset))))))
1903 (defun ibuffer-get-marked-buffers ()
1907 (when (eq (cdr e) ibuffer-marked-char)
1909 (ibuffer-current-state-list))))
1911 (defun ibuffer-current-state-list (&optional pos)
1912 "Return a list like (BUF . MARK) of all buffers in an ibuffer.
1915 (let ((ibuffer-current-state-list-tmp '()))
1919 (ibuffer-map-lines-nomodify
1922 (push (list buf mark (point)) ibuffer-current-state-list-tmp))))
1923 (ibuffer-map-lines-nomodify
1926 (push (cons buf mark) ibuffer-current-state-list-tmp)))))
1927 (nreverse ibuffer-current-state-list-tmp)))
1929 (defun ibuffer-current-buffers-with-marks (curbufs)
1931 (let ((bufs (ibuffer-current-state-list)))
1938 (defun ibuffer-buf-matches-predicates (buf predicates)
1948 (defun ibuffer-filter-buffers (ibuffer-buf last bmarklist all)
1957 (or (and ibuffer-always-show-last-buffer
1960 #'ibuffer-ext-visible-p
1961 #'ibuffer-visible-p)
1962 buf all ibuffer-buf))
1966 (defun ibuffer-visible-p (buf all &optional ibuffer-buf)
1969 (ibuffer-buf-matches-predicates buf ibuffer-maybe-show-predicates)))
1970 (or ibuffer-view-ibuffer
1971 (and ibuffer-buf
1972 (not (eq ibuffer-buf buf))))))
1975 ;; `define-ibuffer-sorter'.
1976 (defun ibuffer-do-sort-by-recency ()
1979 (setq ibuffer-sorting-mode 'recency)
1980 (ibuffer-update nil t))
1982 (defun ibuffer-update-format ()
1983 (when (null ibuffer-current-format)
1984 (setq ibuffer-current-format 0))
1985 (when (null ibuffer-formats)
1988 (defun ibuffer-switch-format ()
1991 (assert (eq major-mode 'ibuffer-mode))
1992 (unless (consp ibuffer-formats)
1994 (setq ibuffer-current-format
1995 (if (>= ibuffer-current-format (1- (length (ibuffer-current-formats nil))))
1997 (1+ ibuffer-current-format)))
1998 (ibuffer-update-format)
1999 (ibuffer-redisplay t))
2001 (defun ibuffer-update-title-and-summary (format)
2002 (assert (eq major-mode 'ibuffer-mode))
2005 (if (get-text-property (point-min) 'ibuffer-title)
2008 (point-min) 'ibuffer-title)))
2026 (let* ((name (or (get sym 'ibuffer-column-name)
2027 (error "Unknown column %s in ibuffer-formats" sym)))
2031 (ibuffer-format-column name
2040 (add-text-properties opos (point) `(ibuffer-title-header t))
2056 `(ibuffer-title t font-lock-face ,ibuffer-title-face))
2059 (if (get-text-property (1- (point-max)) 'ibuffer-summary)
2061 (point-max) 'ibuffer-summary)
2063 (if ibuffer-display-summary
2079 (let* ((summary (if (get sym 'ibuffer-column-summarizer)
2080 (funcall (get sym 'ibuffer-column-summarizer)
2081 (get sym 'ibuffer-column-summary))
2082 (make-string (length (get sym 'ibuffer-column-name))
2086 (ibuffer-format-column summary
2091 `(ibuffer-summary t)))))
2093 (defun ibuffer-update-mode-name ()
2094 (setq mode-name (format "Ibuffer by %s" (if ibuffer-sorting-mode
2095 ibuffer-sorting-mode
2097 (when ibuffer-sorting-reversep
2098 (setq mode-name (concat mode-name " [rev]")))
2100 ibuffer-auto-mode)
2101 (setq mode-name (concat mode-name " (Auto)")))
2104 (dolist (qualifier ibuffer-filtering-qualifiers)
2106 (concat result (ibuffer-format-qualifier qualifier))))
2107 (if ibuffer-use-header-line
2109 (when ibuffer-filtering-qualifiers
2111 (concat mode-name result))))
2113 (setq mode-name (concat mode-name result))
2117 (defun ibuffer-redisplay (&optional silent)
2119 This does not show new buffers; use `ibuffer-update' for that.
2123 (ibuffer-forward-line 0)
2126 (let ((blist (ibuffer-current-state-list)))
2129 (or ibuffer-filtering-qualifiers ibuffer-hidden-filter-groups))
2132 (ibuffer-redisplay-engine blist t)
2133 (ibuffer-update-mode-name)
2136 (ibuffer-forward-line 0)))
2138 (defun ibuffer-update (arg &optional silent)
2142 `ibuffer-maybe-show-predicates' should be displayed.
2147 (setq ibuffer-display-maybe-show-predicates
2148 (not ibuffer-display-maybe-show-predicates)))
2149 (ibuffer-forward-line 0)
2151 (blist (ibuffer-filter-buffers
2155 (eq ibuffer-always-show-last-buffer
2160 (ibuffer-current-buffers-with-marks bufs)
2161 ibuffer-display-maybe-show-predicates)))
2164 ibuffer-filtering-qualifiers)
2169 (ibuffer-redisplay-engine blist arg)
2170 (ibuffer-update-mode-name)
2173 (if (eq ibuffer-shrink-to-minimum-size 'onewindow)
2174 (ibuffer-shrink-to-fit t)
2175 (when ibuffer-shrink-to-minimum-size
2176 (ibuffer-shrink-to-fit)))
2177 (ibuffer-forward-line 0))
2179 (defun ibuffer-sort-bufferlist (bmarklist)
2180 (let* ((sortdat (assq ibuffer-sorting-mode
2181 ibuffer-sorting-functions-alist))
2189 (if ibuffer-sorting-reversep
2193 (defun ibuffer-insert-filter-group (name display-name filter-string format bmarklist)
2199 `(ibuffer-filter-group-name
2201 font-lock-face ,ibuffer-filter-group-name-face
2202 keymap ,ibuffer-mode-filter-group-map
2204 help-echo ,(let ((echo '(if tooltip-mode
2209 (if tooltip-mode "\n" " ")
2218 (ibuffer-insert-buffer-line (car entry) (cdr entry) format))
2220 'ibuffer-filter-group
2223 (defun ibuffer-redisplay-engine (bmarklist &optional ignore)
2224 (assert (eq major-mode 'ibuffer-mode))
2225 (let* ((--ibuffer-insert-buffers-and-marks-format
2226 (ibuffer-current-format))
2227 (--ibuffer-expanded-format (mapcar #'ibuffer-expand-format-entry
2228 (ibuffer-current-format t)))
2235 (ibuffer-generate-filter-groups bmarklist)
2237 (ibuffer-clear-summary-columns --ibuffer-expanded-format)
2242 (ibuffer-update-format)
2246 (member name ibuffer-hidden-filter-groups)))
2251 (null ibuffer-show-empty-filter-groups))
2252 (ibuffer-insert-filter-group
2256 (ibuffer-format-filter-group-data name)
2258 --ibuffer-insert-buffers-and-marks-format
2261 (ibuffer-sort-bufferlist bmarklist))))))
2262 (ibuffer-update-title-and-summary --ibuffer-expanded-format))
2264 (set-buffer-modified-p ibuffer-did-modification)
2265 (setq ibuffer-did-modification nil)
2268 (defun ibuffer-quit ()
2269 "Quit this `ibuffer' session.
2271 `ibuffer-restore-window-config-on-quit' is non-nil."
2273 (if ibuffer-restore-window-config-on-quit
2277 (set-window-configuration ibuffer-prev-window-config)))
2281 (defun ibuffer-list-buffers (&optional files-only)
2286 (ibuffer t nil (when files-only
2290 (defun ibuffer-other-window (&optional files-only)
2291 "Like `ibuffer', but displayed in another window by default.
2295 (ibuffer t nil (when files-only
2299 (defun ibuffer (&optional other-window-p name qualifiers noselect
2302 Type 'h' after entering ibuffer for more information.
2308 see `ibuffer-filtering-qualifiers'.
2313 see `ibuffer-filter-groups'.
2314 FORMATS is the value to use for `ibuffer-formats'.
2315 If specified, then the variable `ibuffer-formats' will have
2318 (when ibuffer-use-other-window
2320 (setq ibuffer-prev-window-config (current-window-configuration))
2330 (or (eq major-mode 'ibuffer-mode)
2331 (ibuffer-mode))
2332 (setq ibuffer-restore-window-config-on-quit other-window-p)
2334 (setq ibuffer-shrink-to-minimum-size shrink))
2337 (setq ibuffer-filtering-qualifiers qualifiers))
2340 (setq ibuffer-filter-groups filter-groups))
2342 (set (make-local-variable 'ibuffer-formats) formats))
2343 (ibuffer-update nil)
2345 (ibuffer-forward-line 0 t)
2349 (run-hooks 'ibuffer-hook))
2351 (unless ibuffer-expert
2354 (put 'ibuffer-mode 'mode-class 'special)
2355 (defun ibuffer-mode ()
2356 "A major mode for viewing a list of buffers.
2363 '\\[ibuffer-do-save]' - Save the marked buffers
2364 '\\[ibuffer-do-view]' - View the marked buffers in this frame.
2365 '\\[ibuffer-do-view-other-frame]' - View the marked buffers in another frame.
2366 '\\[ibuffer-do-revert]' - Revert the marked buffers.
2367 '\\[ibuffer-do-toggle-read-only]' - Toggle read-only state of marked buffers.
2368 '\\[ibuffer-do-delete]' - Kill the marked buffers.
2369 '\\[ibuffer-do-replace-regexp]' - Replace by regexp in each of the marked
2371 '\\[ibuffer-do-query-replace]' - Query replace in each of the marked buffers.
2372 '\\[ibuffer-do-query-replace-regexp]' - As above, with a regular expression.
2373 '\\[ibuffer-do-print]' - Print the marked buffers.
2374 '\\[ibuffer-do-occur]' - List lines in all marked buffers which match
2376 '\\[ibuffer-do-shell-command-pipe]' - Pipe the contents of the marked
2378 '\\[ibuffer-do-shell-command-pipe-replace]' - Replace the contents of the marked
2380 '\\[ibuffer-do-shell-command-file]' - Run a shell command with the
2382 '\\[ibuffer-do-eval]' - Evaluate a form in each of the marked buffers. This
2386 '\\[ibuffer-do-view-and-eval]' - As above, but view each buffer while the form
2388 '\\[ibuffer-do-kill-lines]' - Remove the marked lines from the *Ibuffer* buffer,
2390 '\\[ibuffer-do-kill-on-deletion-marks]' - Kill all buffers marked for deletion.
2394 '\\[ibuffer-mark-forward]' - Mark the buffer at point.
2395 '\\[ibuffer-toggle-marks]' - Unmark all currently marked buffers, and mark
2397 '\\[ibuffer-unmark-forward]' - Unmark the buffer at point.
2398 '\\[ibuffer-unmark-backward]' - Unmark the buffer at point, and move to the
2400 '\\[ibuffer-unmark-all]' - Unmark all marked buffers.
2401 '\\[ibuffer-mark-by-mode]' - Mark buffers by major mode.
2402 '\\[ibuffer-mark-unsaved-buffers]' - Mark all \"unsaved\" buffers.
2404 '\\[ibuffer-mark-modified-buffers]' - Mark all modified buffers,
2406 '\\[ibuffer-mark-special-buffers]' - Mark all buffers whose name begins and
2408 '\\[ibuffer-mark-dissociated-buffers]' - Mark all buffers which have
2410 '\\[ibuffer-mark-read-only-buffers]' - Mark all read-only buffers.
2411 '\\[ibuffer-mark-dired-buffers]' - Mark buffers in `dired' mode.
2412 '\\[ibuffer-mark-help-buffers]' - Mark buffers in `help-mode', `apropos-mode', etc.
2413 '\\[ibuffer-mark-old-buffers]' - Mark buffers older than `ibuffer-old-time'.
2414 '\\[ibuffer-mark-for-delete]' - Mark the buffer at point for deletion.
2415 '\\[ibuffer-mark-by-name-regexp]' - Mark buffers by their name, using a regexp.
2416 '\\[ibuffer-mark-by-mode-regexp]' - Mark buffers by their major mode, using a regexp.
2417 '\\[ibuffer-mark-by-file-name-regexp]' - Mark buffers by their filename, using a regexp.
2421 '\\[ibuffer-filter-by-mode]' - Add a filter by major mode.
2422 '\\[ibuffer-filter-by-used-mode]' - Add a filter by major mode now in use.
2423 '\\[ibuffer-filter-by-name]' - Add a filter by buffer name.
2424 '\\[ibuffer-filter-by-content]' - Add a filter by buffer content.
2425 '\\[ibuffer-filter-by-filename]' - Add a filter by filename.
2426 '\\[ibuffer-filter-by-size-gt]' - Add a filter by buffer size.
2427 '\\[ibuffer-filter-by-size-lt]' - Add a filter by buffer size.
2428 '\\[ibuffer-filter-by-predicate]' - Add a filter by an arbitrary Lisp predicate.
2429 '\\[ibuffer-save-filters]' - Save the current filters with a name.
2430 '\\[ibuffer-switch-to-saved-filters]' - Switch to previously saved filters.
2431 '\\[ibuffer-add-saved-filters]' - Add saved filters to current filters.
2432 '\\[ibuffer-or-filter]' - Replace the top two filters with their logical OR.
2433 '\\[ibuffer-pop-filter]' - Remove the top filter.
2434 '\\[ibuffer-negate-filter]' - Invert the logical sense of the top filter.
2435 '\\[ibuffer-decompose-filter]' - Break down the topmost filter.
2436 '\\[ibuffer-filter-disable]' - Remove all filtering currently in effect.
2440 '\\[ibuffer-filters-to-filter-group]' - Create filter group from filters.
2441 '\\[ibuffer-pop-filter-group]' - Remove top filter group.
2442 '\\[ibuffer-forward-filter-group]' - Move to the next filter group.
2443 '\\[ibuffer-backward-filter-group]' - Move to the previous filter group.
2444 '\\[ibuffer-clear-filter-groups]' - Remove all active filter groups.
2445 '\\[ibuffer-save-filter-groups]' - Save the current groups with a name.
2446 '\\[ibuffer-switch-to-saved-filter-groups]' - Restore previously saved groups.
2447 '\\[ibuffer-delete-saved-filter-groups]' - Delete previously saved groups.
2451 '\\[ibuffer-toggle-sorting-mode]' - Rotate between the various sorting modes.
2452 '\\[ibuffer-invert-sorting]' - Reverse the current sorting order.
2453 '\\[ibuffer-do-sort-by-alphabetic]' - Sort the buffers lexicographically.
2454 '\\[ibuffer-do-sort-by-recency]' - Sort the buffers by last viewing time.
2455 '\\[ibuffer-do-sort-by-size]' - Sort the buffers by size.
2456 '\\[ibuffer-do-sort-by-major-mode]' - Sort the buffers by major mode.
2460 '\\[ibuffer-update]' - Regenerate the list of all buffers.
2462 `ibuffer-maybe-show-predicates' should be displayed.
2464 '\\[ibuffer-switch-format]' - Change the current display format.
2467 '\\[ibuffer-quit]' - Bury the Ibuffer buffer.
2468 '\\[describe-mode]' - This help.
2469 '\\[ibuffer-diff-with-file]' - View the differences between this buffer
2471 '\\[ibuffer-visit-buffer]' - View the buffer on this line.
2472 '\\[ibuffer-visit-buffer-other-window]' - As above, but in another window.
2473 '\\[ibuffer-visit-buffer-other-window-noselect]' - As both above, but don't select
2475 '\\[ibuffer-bury-buffer]' - Bury (not kill!) the buffer on this line.
2479 You can filter your ibuffer view via different critera. Each Ibuffer
2483 '\\[ibuffer-filter-by-mode] emacs-lisp-mode RET'. In this case, there
2489 you only want to see buffers in `emacs-lisp' mode, whose names begin
2491 '\\[ibuffer-filter-by-mode] emacs-lisp-mode RET
2492 \\[ibuffer-filter-by-name] ^gnus RET'.
2495 '\\[ibuffer-or-filters]'. To see all buffers in either
2496 `emacs-lisp-mode' or `lisp-interaction-mode', type:
2498 '\\[ibuffer-filter-by-mode] emacs-lisp-mode RET \\[ibuffer-filter-by-mode] lisp-interaction-mode RET \\[ibuffer-or-filters]'.
2501 functions `ibuffer-save-filters' and `ibuffer-switch-to-saved-filters'.
2503 To remove the top filter on the stack, use '\\[ibuffer-pop-filter]', and
2505 '\\[ibuffer-filter-disable]'.
2513 filter, and then type '\\[ibuffer-filters-to-filter-group]'.
2518 '\\[ibuffer-filter-by-mode] emacs-lisp-mode RET \\[ibuffer-filters-to-filter-group] RET emacs lisp buffers RET'
2530 '\\[ibuffer-kill-line]' and '\\[ibuffer-yank]' pair. Yanked groups
2533 (use-local-map ibuffer-mode-map)
2534 (setq major-mode 'ibuffer-mode)
2535 (setq mode-name "Ibuffer")
2538 (setq truncate-lines ibuffer-truncate-lines)
2542 ;; disable `show-paren-mode' buffer-locally
2543 (if (bound-and-true-p show-paren-mode)
2544 (set (make-local-variable 'show-paren-mode) nil))
2546 #'ibuffer-update)
2547 (set (make-local-variable 'ibuffer-sorting-mode)
2548 ibuffer-default-sorting-mode)
2549 (set (make-local-variable 'ibuffer-sorting-reversep)
2550 ibuffer-default-sorting-reversep)
2551 (set (make-local-variable 'ibuffer-shrink-to-minimum-size)
2552 ibuffer-default-shrink-to-minimum-size)
2553 (set (make-local-variable 'ibuffer-display-maybe-show-predicates)
2554 ibuffer-default-display-maybe-show-predicates)
2555 (set (make-local-variable 'ibuffer-filtering-qualifiers) nil)
2556 (set (make-local-variable 'ibuffer-filter-groups) nil)
2557 (set (make-local-variable 'ibuffer-filter-group-kill-ring) nil)
2558 (set (make-local-variable 'ibuffer-hidden-filter-groups) nil)
2559 (set (make-local-variable 'ibuffer-compiled-formats) nil)
2560 (set (make-local-variable 'ibuffer-cached-formats) nil)
2561 (set (make-local-variable 'ibuffer-cached-eliding-string) nil)
2562 (set (make-local-variable 'ibuffer-cached-elide-long-columns) nil)
2563 (set (make-local-variable 'ibuffer-current-format) nil)
2564 (set (make-local-variable 'ibuffer-restore-window-config-on-quit) nil)
2565 (set (make-local-variable 'ibuffer-did-modification) nil)
2566 (set (make-local-variable 'ibuffer-tmp-hide-regexps) nil)
2567 (set (make-local-variable 'ibuffer-tmp-show-regexps) nil)
2568 (define-key ibuffer-mode-map [menu-bar edit] 'undefined)
2569 (define-key ibuffer-mode-map [menu-bar operate] (cons "Operate" ibuffer-mode-operate-map))
2570 (ibuffer-update-format)
2571 (when ibuffer-default-directory
2572 (setq default-directory ibuffer-default-directory))
2573 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
2574 (run-mode-hooks 'ibuffer-mode-hook)
2575 ;; called after mode hooks to allow the user to add filters
2576 (ibuffer-update-mode-name))
2578 (provide 'ibuffer)
2580 (run-hooks 'ibuffer-load-hook)
2587 ;;; ibuffer.el ends here