]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/grep.el
(etags-tags-completion-table): Use progress reporter.
[gnu-emacs] / lisp / progmodes / grep.el
index 9d48fd375691bbe83e7c39dd3708966110801ce3..4d9e05109a831d4ceb83f7c09daaae2d3e0e8052 100644 (file)
@@ -64,8 +64,8 @@ will be parsed and highlighted as soon as you try to move to them."
   :version "21.4"
   :group 'grep)
 
-(defcustom grep-highlight-matches t
-  "*Non-nil to use special markers to highlight grep matches.
+(defcustom grep-highlight-matches 'auto-detect
+  "If t, use special markers to highlight grep matches.
 
 Some grep programs are able to surround matches with special
 markers in grep output.  Such markers can be used to highlight
@@ -74,8 +74,13 @@ matches in grep mode.
 This option sets the environment variable GREP_COLOR to specify
 markers for highlighting and GREP_OPTIONS to add the --color
 option in front of any explicit grep options before starting
-the grep."
-  :type 'boolean
+the grep.
+
+The default value of this variable is set up by `grep-compute-defaults';
+call that function before using this variable in your program."
+  :type '(choice (const :tag "Do not highlight matches with grep markers" nil)
+                (const :tag "Highlight matches with grep markers" t)
+                (other :tag "Not Set" auto-detect))
   :version "21.4"
   :group 'grep)
 
@@ -110,7 +115,6 @@ necessary if the grep program used supports the `-H' option.
 
 The default value of this variable is set up by `grep-compute-defaults';
 call that function before using this variable in your program."
-  :type 'boolean
   :type '(choice (const :tag "Do Not Append Null Device" nil)
                 (const :tag "Append Null Device" t)
                 (other :tag "Not Set" auto-detect))
@@ -181,6 +185,7 @@ See `compilation-error-screen-columns'"
   (let ((map (cons 'keymap compilation-minor-mode-map)))
     (define-key map " " 'scroll-up)
     (define-key map "\^?" 'scroll-down)
+    (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
 
     ;; This is intolerable -- rms
 ;;;    (define-key map [remap next-line] 'compilation-next-error)
@@ -332,7 +337,9 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
 (defun grep-process-setup ()
   "Setup compilation variables and buffer for `grep'.
 Set up `compilation-exit-message-function' and run `grep-setup-hook'."
-  (when grep-highlight-matches
+  (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
+    (grep-compute-defaults))
+  (when (eq grep-highlight-matches t)
     ;; Modify `process-environment' locally bound in `compilation-start'
     (setenv "GREP_OPTIONS" (concat (getenv "GREP_OPTIONS") " --color=always"))
     (setenv "GREP_COLOR" "01;41"))
@@ -414,7 +421,18 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
                   (format "%s <D> <X> -type f <F> -print | xargs %s <R>"
                           find-program gcmd))
                  (t (format "%s <D> <X> -type f <F> -exec %s <R> {} %s \\;"
-                            find-program gcmd null-device)))))))
+                            find-program gcmd null-device))))))
+  (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
+    (setq grep-highlight-matches
+         (with-temp-buffer
+           (and (equal (condition-case nil
+                           (call-process grep-program nil t nil "--help")
+                         (error nil))
+                       0)
+                (progn
+                  (goto-char (point-min))
+                  (search-forward "--color" nil t))
+                t)))))
 
 (defun grep-default-command ()
   (let ((tag-default
@@ -482,7 +500,6 @@ temporarily highlight in visited source lines."
                         command-args)
                       'grep-mode nil highlight-regexp)))
 
-;;;###autoload (autoload 'grep-mode "grep" nil t)
 (define-compilation-mode grep-mode "Grep"
   "Sets `grep-last-buffer' and `compilation-window-height'."
   (setq grep-last-buffer (current-buffer))
@@ -598,5 +615,5 @@ those sub directories of DIR."
 
 (provide 'grep)
 
-;;; arch-tag: 5a5b9169-a79d-4f38-9c38-f69615f39c4d
+;; arch-tag: 5a5b9169-a79d-4f38-9c38-f69615f39c4d
 ;;; grep.el ends here