aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/ibuffer.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ibuffer.el')
-rw-r--r--lisp/ibuffer.el64
1 files changed, 34 insertions, 30 deletions
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 9e6918e8020..7c6da00cf0f 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -209,6 +209,7 @@ view of the buffers."
209 :type '(choice (const :tag "Last view time" :value recency) 209 :type '(choice (const :tag "Last view time" :value recency)
210 (const :tag "Lexicographic" :value alphabetic) 210 (const :tag "Lexicographic" :value alphabetic)
211 (const :tag "Buffer size" :value size) 211 (const :tag "Buffer size" :value size)
212 (const :tag "File name" :value filename/process)
212 (const :tag "Major mode" :value major-mode)) 213 (const :tag "Major mode" :value major-mode))
213 :group 'ibuffer) 214 :group 'ibuffer)
214(defvar ibuffer-sorting-mode nil) 215(defvar ibuffer-sorting-mode nil)
@@ -447,6 +448,7 @@ directory, like `default-directory'."
447 (define-key map (kbd "s a") 'ibuffer-do-sort-by-alphabetic) 448 (define-key map (kbd "s a") 'ibuffer-do-sort-by-alphabetic)
448 (define-key map (kbd "s v") 'ibuffer-do-sort-by-recency) 449 (define-key map (kbd "s v") 'ibuffer-do-sort-by-recency)
449 (define-key map (kbd "s s") 'ibuffer-do-sort-by-size) 450 (define-key map (kbd "s s") 'ibuffer-do-sort-by-size)
451 (define-key map (kbd "s f") 'ibuffer-do-sort-by-filename/process)
450 (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode) 452 (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode)
451 453
452 (define-key map (kbd "/ m") 'ibuffer-filter-by-mode) 454 (define-key map (kbd "/ m") 'ibuffer-filter-by-mode)
@@ -828,6 +830,11 @@ directory, like `default-directory'."
828 (define-key map [down-mouse-3] 'ibuffer-mouse-popup-menu) 830 (define-key map [down-mouse-3] 'ibuffer-mouse-popup-menu)
829 map)) 831 map))
830 832
833(defvar ibuffer-filename/process-header-map
834 (let ((map (make-sparse-keymap)))
835 (define-key map [(mouse-1)] 'ibuffer-do-sort-by-filename/process)
836 map))
837
831(defvar ibuffer-mode-name-map 838(defvar ibuffer-mode-name-map
832 (let ((map (make-sparse-keymap))) 839 (let ((map (make-sparse-keymap)))
833 (define-key map [(mouse-2)] 'ibuffer-mouse-filter-by-mode) 840 (define-key map [(mouse-2)] 'ibuffer-mouse-filter-by-mode)
@@ -1722,7 +1729,7 @@ If point is on a group name, this function operates on that group."
1722 ('mouse-face 'highlight 1729 ('mouse-face 'highlight
1723 'keymap ibuffer-mode-name-map 1730 'keymap ibuffer-mode-name-map
1724 'help-echo "mouse-2: filter by this mode")) 1731 'help-echo "mouse-2: filter by this mode"))
1725 (format-mode-line mode-name)) 1732 (format-mode-line mode-name nil nil (current-buffer)))
1726 1733
1727(define-ibuffer-column process 1734(define-ibuffer-column process
1728 (:summarizer 1735 (:summarizer
@@ -1753,6 +1760,7 @@ If point is on a group name, this function operates on that group."
1753 1760
1754(define-ibuffer-column filename-and-process 1761(define-ibuffer-column filename-and-process
1755 (:name "Filename/Process" 1762 (:name "Filename/Process"
1763 :header-mouse-map ibuffer-filename/process-header-map
1756 :summarizer 1764 :summarizer
1757 (lambda (strings) 1765 (lambda (strings)
1758 (setq strings (delete "" strings)) 1766 (setq strings (delete "" strings))
@@ -2097,29 +2105,6 @@ the value of point at the beginning of the line for that buffer."
2097 (point)) 2105 (point))
2098 `(ibuffer-summary t))))) 2106 `(ibuffer-summary t)))))
2099 2107
2100(defun ibuffer-update-mode-name ()
2101 (setq mode-name (format "Ibuffer by %s" (if ibuffer-sorting-mode
2102 ibuffer-sorting-mode
2103 "view time")))
2104 (when ibuffer-sorting-reversep
2105 (setq mode-name (concat mode-name " [rev]")))
2106 (when (and (featurep 'ibuf-ext)
2107 ibuffer-auto-mode)
2108 (setq mode-name (concat mode-name " (Auto)")))
2109 (let ((result ""))
2110 (when (featurep 'ibuf-ext)
2111 (dolist (qualifier ibuffer-filtering-qualifiers)
2112 (setq result
2113 (concat result (ibuffer-format-qualifier qualifier))))
2114 (if ibuffer-use-header-line
2115 (setq header-line-format
2116 (when ibuffer-filtering-qualifiers
2117 (replace-regexp-in-string "%" "%%"
2118 (concat mode-name result))))
2119 (progn
2120 (setq mode-name (concat mode-name result))
2121 (when (boundp 'header-line-format)
2122 (setq header-line-format nil)))))))
2123 2108
2124(defun ibuffer-redisplay (&optional silent) 2109(defun ibuffer-redisplay (&optional silent)
2125 "Redisplay the current list of buffers. 2110 "Redisplay the current list of buffers.
@@ -2137,7 +2122,6 @@ If optional arg SILENT is non-nil, do not display progress messages."
2137 (message "No buffers! (note: filtering in effect)") 2122 (message "No buffers! (note: filtering in effect)")
2138 (error "No buffers!"))) 2123 (error "No buffers!")))
2139 (ibuffer-redisplay-engine blist t) 2124 (ibuffer-redisplay-engine blist t)
2140 (ibuffer-update-mode-name)
2141 (unless silent 2125 (unless silent
2142 (message "Redisplaying current buffer list...done")) 2126 (message "Redisplaying current buffer list...done"))
2143 (ibuffer-forward-line 0))) 2127 (ibuffer-forward-line 0)))
@@ -2174,7 +2158,6 @@ If optional arg SILENT is non-nil, do not display progress messages."
2174 (unless silent 2158 (unless silent
2175 (message "Updating buffer list...")) 2159 (message "Updating buffer list..."))
2176 (ibuffer-redisplay-engine blist arg) 2160 (ibuffer-redisplay-engine blist arg)
2177 (ibuffer-update-mode-name)
2178 (unless silent 2161 (unless silent
2179 (message "Updating buffer list...done"))) 2162 (message "Updating buffer list...done")))
2180 (if (eq ibuffer-shrink-to-minimum-size 'onewindow) 2163 (if (eq ibuffer-shrink-to-minimum-size 'onewindow)
@@ -2458,6 +2441,7 @@ Sorting commands:
2458 '\\[ibuffer-toggle-sorting-mode]' - Rotate between the various sorting modes. 2441 '\\[ibuffer-toggle-sorting-mode]' - Rotate between the various sorting modes.
2459 '\\[ibuffer-invert-sorting]' - Reverse the current sorting order. 2442 '\\[ibuffer-invert-sorting]' - Reverse the current sorting order.
2460 '\\[ibuffer-do-sort-by-alphabetic]' - Sort the buffers lexicographically. 2443 '\\[ibuffer-do-sort-by-alphabetic]' - Sort the buffers lexicographically.
2444 '\\[ibuffer-do-sort-by-filename/process]' - Sort the buffers by the file name.
2461 '\\[ibuffer-do-sort-by-recency]' - Sort the buffers by last viewing time. 2445 '\\[ibuffer-do-sort-by-recency]' - Sort the buffers by last viewing time.
2462 '\\[ibuffer-do-sort-by-size]' - Sort the buffers by size. 2446 '\\[ibuffer-do-sort-by-size]' - Sort the buffers by size.
2463 '\\[ibuffer-do-sort-by-major-mode]' - Sort the buffers by major mode. 2447 '\\[ibuffer-do-sort-by-major-mode]' - Sort the buffers by major mode.
@@ -2540,6 +2524,28 @@ will be inserted before the group at point."
2540 (use-local-map ibuffer-mode-map) 2524 (use-local-map ibuffer-mode-map)
2541 (setq major-mode 'ibuffer-mode) 2525 (setq major-mode 'ibuffer-mode)
2542 (setq mode-name "Ibuffer") 2526 (setq mode-name "Ibuffer")
2527 ;; Include state info next to the mode name.
2528 (set (make-local-variable 'mode-line-process)
2529 '(" by "
2530 (ibuffer-sorting-mode (:eval (symbol-name ibuffer-sorting-mode))
2531 "view time")
2532 (ibuffer-sorting-reversep " [rev]")
2533 (ibuffer-auto-mode " (Auto)")
2534 ;; Only list the filters if they're not already in the header-line.
2535 (header-line-format
2536 ""
2537 (:eval (if (functionp 'ibuffer-format-qualifier)
2538 (mapconcat 'ibuffer-format-qualifier
2539 ibuffer-filtering-qualifiers ""))))))
2540 (setq header-line-format
2541 (if ibuffer-use-header-line
2542 ;; Display the part that won't be in the mode-line.
2543 (list* "" mode-name
2544 (mapcar (lambda (elem)
2545 (if (eq (car-safe elem) 'header-line-format)
2546 (nth 2 elem) elem))
2547 mode-line-process))))
2548
2543 (setq buffer-read-only t) 2549 (setq buffer-read-only t)
2544 (buffer-disable-undo) 2550 (buffer-disable-undo)
2545 (setq truncate-lines ibuffer-truncate-lines) 2551 (setq truncate-lines ibuffer-truncate-lines)
@@ -2578,9 +2584,7 @@ will be inserted before the group at point."
2578 (when ibuffer-default-directory 2584 (when ibuffer-default-directory
2579 (setq default-directory ibuffer-default-directory)) 2585 (setq default-directory ibuffer-default-directory))
2580 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) 2586 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
2581 (run-mode-hooks 'ibuffer-mode-hook) 2587 (run-mode-hooks 'ibuffer-mode-hook))
2582 ;; called after mode hooks to allow the user to add filters
2583 (ibuffer-update-mode-name))
2584 2588
2585(provide 'ibuffer) 2589(provide 'ibuffer)
2586 2590
@@ -2590,5 +2594,5 @@ will be inserted before the group at point."
2590;; coding: iso-8859-1 2594;; coding: iso-8859-1
2591;; End: 2595;; End:
2592 2596
2593;;; arch-tag: 72581688-0603-4954-b8cf-837c700f62e8 2597;; arch-tag: 72581688-0603-4954-b8cf-837c700f62e8
2594;;; ibuffer.el ends here 2598;;; ibuffer.el ends here