(diff-mode): Don't evaluate `compilation-last-buffer' unless it's bound.
[bpt/emacs.git] / lisp / ibuffer.el
index 3281fa5..6c9bda8 100644 (file)
@@ -135,7 +135,9 @@ elisp byte-compiler."
 (defcustom ibuffer-fontification-alist
   `((10 buffer-read-only font-lock-constant-face)
     (15 (string-match "^*" (buffer-name)) font-lock-keyword-face)
-    (20 (string-match "^ " (buffer-name)) font-lock-warning-face)
+    (20 (and (string-match "^ " (buffer-name))
+            (null buffer-file-name))
+       italic)
     (25 (memq major-mode ibuffer-help-buffer-modes) font-lock-comment-face)
     (30 (eq major-mode 'dired-mode) font-lock-function-name-face))
   "An alist describing how to fontify buffers.
@@ -392,6 +394,7 @@ directory, like `default-directory'."
     (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode)
 
     (define-key map (kbd "/ m") 'ibuffer-filter-by-mode)
+    (define-key map (kbd "/ M") 'ibuffer-filter-by-used-mode)
     (define-key map (kbd "/ n") 'ibuffer-filter-by-name)
     (define-key map (kbd "/ c") 'ibuffer-filter-by-content)
     (define-key map (kbd "/ e") 'ibuffer-filter-by-predicate)
@@ -520,6 +523,8 @@ directory, like `default-directory'."
                  :enable (and (featurep 'ibuf-ext) ibuffer-filtering-qualifiers)))
     (define-key-after map [menu-bar view filter filter-by-mode]
       '(menu-item "Add filter by major mode..." ibuffer-filter-by-mode))
+    (define-key-after map [menu-bar view filter filter-by-mode]
+      '(menu-item "Add filter by major mode in use..." ibuffer-filter-by-used-mode))
     (define-key-after map [menu-bar view filter filter-by-name]
       '(menu-item "Add filter by buffer name..." ibuffer-filter-by-name))
     (define-key-after map [menu-bar view filter filter-by-filename]
@@ -2004,18 +2009,17 @@ Do not display messages if SILENT is non-nil."
   (ibuffer-forward-line 0)
   (let* ((bufs (buffer-list))
         (blist (ibuffer-filter-buffers
-               (current-buffer)
-               (if (and
-                    (cadr bufs)
-                    (eq ibuffer-always-show-last-buffer
-                        :nomini)
-                    ;; This is a hack.
-                    (string-match " \\*Minibuf"
-                                  (buffer-name (cadr bufs))))
-                   (caddr bufs)
-                 (cadr bufs))
-               (ibuffer-current-buffers-with-marks bufs)
-               arg)))
+                (current-buffer)
+                (if (and
+                     (cadr bufs)
+                     (eq ibuffer-always-show-last-buffer
+                         :nomini)
+                     (with-current-buffer (cadr bufs)
+                       (minibufferp)))
+                    (caddr bufs)
+                  (cadr bufs))
+                (ibuffer-current-buffers-with-marks bufs)
+                arg)))
     (when (null blist)
       (if (and (featurep 'ibuf-ext)
               ibuffer-filtering-qualifiers)
@@ -2269,6 +2273,7 @@ Marking commands:
 Filtering commands:
 
   '\\[ibuffer-filter-by-mode]' - Add a filter by major mode.
+  '\\[ibuffer-filter-by-used-mode]' - Add a filter by major mode now in use.
   '\\[ibuffer-filter-by-name]' - Add a filter by buffer name.
   '\\[ibuffer-filter-by-content]' - Add a filter by buffer content.
   '\\[ibuffer-filter-by-filename]' - Add a filter by filename.
@@ -2412,6 +2417,7 @@ will be inserted before the group at point."
   (ibuffer-update-format)
   (when ibuffer-default-directory
     (setq default-directory ibuffer-default-directory))
+  (add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
   (run-hooks 'ibuffer-mode-hooks)
   ;; called after mode hooks to allow the user to add filters
   (ibuffer-update-mode-name))