X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/06d8ace51597cd41e110560a56a1abeb6cce23d6..58635e4de85621d4f16befe15b1df44a637bd078:/lisp/progmodes/grep.el diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index b709c6b94c..a4c9b7fccb 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -1,7 +1,6 @@ ;;; grep.el --- run Grep as inferior of Emacs, parse match messages -;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +;; Copyright (C) 1985-1987, 1993-1999, 2001-2011 ;; Free Software Foundation, Inc. ;; Author: Roland McGrath @@ -73,7 +72,9 @@ SYMBOL should be one of `grep-command', `grep-template', Some grep programs are able to surround matches with special markers in grep output. Such markers can be used to highlight -matches in grep mode. +matches in grep mode. This requires `font-lock-mode' to be active +in grep buffers, so if you have globally disabled font-lock-mode, +you will not get highlighting. This option sets the environment variable GREP_COLORS to specify markers for highlighting and GREP_OPTIONS to add the --color @@ -342,7 +343,7 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies ;;;###autoload (defconst grep-regexp-alist - '(("^\\(.+?\\)\\(:[ \t]*\\)\\([0-9]+\\)\\2" + '(("^\\(.+?\\)\\(:[ \t]*\\)\\([1-9][0-9]*\\)\\2" 1 3) ;; Rule to match column numbers is commented out since no known grep ;; produces them @@ -385,22 +386,22 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies (defvar grep-mode-font-lock-keywords '(;; Command output lines. - ("^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:" 1 font-lock-function-name-face) (": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or directory\\|device or address\\)\\)$" 1 grep-error-face) ;; remove match from grep-regexp-alist before fontifying ("^Grep[/a-zA-z]* started.*" - (0 '(face nil message nil help-echo nil mouse-face nil) t)) + (0 '(face nil compilation-message nil help-echo nil mouse-face nil) t)) ("^Grep[/a-zA-z]* finished \\(?:(\\(matches found\\))\\|with \\(no matches found\\)\\).*" - (0 '(face nil message nil help-echo nil mouse-face nil) t) + (0 '(face nil compilation-message nil help-echo nil mouse-face nil) t) (1 compilation-info-face nil t) (2 compilation-warning-face nil t)) ("^Grep[/a-zA-z]* \\(exited abnormally\\|interrupt\\|killed\\|terminated\\)\\(?:.*with code \\([0-9]+\\)\\)?.*" - (0 '(face nil message nil help-echo nil mouse-face nil) t) + (0 '(face nil compilation-message nil help-echo nil mouse-face nil) t) (1 grep-error-face) (2 grep-error-face nil t)) ("^.+?-[0-9]+-.*\n" (0 grep-context-face)) - ;; Highlight grep matches and delete markers + ;; Highlight grep matches and delete markers. + ;; FIXME: Modifying the buffer text from font-lock is a bad idea! ("\\(\033\\[01;31m\\)\\(.*?\\)\\(\033\\[[0-9]*m\\)" ;; Refontification does not work after the markers have been ;; deleted. So we use the font-lock-face property here as Font @@ -410,12 +411,14 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies (progn ;; Delete markers with `replace-match' because it updates ;; the match-data, whereas `delete-region' would render it obsolete. + (syntax-ppss-flush-cache (match-beginning 0)) (replace-match "" t t nil 3) (replace-match "" t t nil 1)))) - ("\\(\033\\[[0-9;]*[mK]\\)" + ("\033\\[[0-9;]*[mK]" ;; Delete all remaining escape sequences ((lambda (bound)) - (replace-match "" t t nil 1)))) + (syntax-ppss-flush-cache (match-beginning 0)) + (replace-match "" t t)))) "Additional things to highlight in grep output. This gets tacked on the end of the generated expressions.") @@ -461,6 +464,8 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." (when (eq grep-highlight-matches 'auto-detect) (grep-compute-defaults)) (unless (or (eq grep-highlight-matches 'auto-detect) + ;; Uses font-lock to parse color escapes. (Bug#8084) + (null font-lock-mode) (null grep-highlight-matches)) ;; `setenv' modifies `process-environment' let-bound in `compilation-start' ;; Any TERM except "dumb" allows GNU grep to use `--color=auto'