mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-23 18:47:57 +00:00
* lisp/progmodes/grep.el (grep-num-matches-found): New variable.
(grep-mode-line-matches): New defconst. (grep-mode-font-lock-keywords): Update the regexp for “Grep finished” to include the number of matches found. (grep-process-setup): Set grep-num-matches-found to 0. (grep-exit-message): New function with body moved from lambda in grep-process-setup. Use grep-num-matches-found to return the number of matches found. (grep-filter): Increment grep-num-matches-found. (grep-mode): Set compilation-mode-line-errors to grep-mode-line-matches. (Bug#30397, bug#14017)
This commit is contained in:
parent
a22820a31c
commit
4fa467eefa
@ -425,6 +425,14 @@ See `compilation-error-regexp-alist' for format details.")
|
||||
(defvar grep-context-face 'shadow
|
||||
"Face name to use for grep context lines.")
|
||||
|
||||
(defvar grep-num-matches-found 0)
|
||||
|
||||
(defconst grep-mode-line-matches
|
||||
`(" [" (:propertize (:eval (int-to-string grep-num-matches-found))
|
||||
face ,grep-hit-face
|
||||
help-echo "Number of matches so far")
|
||||
"]"))
|
||||
|
||||
(defvar grep-mode-font-lock-keywords
|
||||
'(;; Command output lines.
|
||||
(": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or directory\\|device or address\\)\\)$"
|
||||
@ -432,7 +440,7 @@ See `compilation-error-regexp-alist' for format details.")
|
||||
;; remove match from grep-regexp-alist before fontifying
|
||||
("^Grep[/a-zA-z]* started.*"
|
||||
(0 '(face nil compilation-message nil help-echo nil mouse-face nil) t))
|
||||
("^Grep[/a-zA-z]* finished \\(?:(\\(matches found\\))\\|with \\(no matches found\\)\\).*"
|
||||
("^Grep[/a-zA-z]* finished with \\(?:\\(\\(?:[0-9]+ \\)?matches found\\)\\|\\(no matches found\\)\\).*"
|
||||
(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))
|
||||
@ -503,21 +511,28 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
|
||||
(setenv "GREP_COLOR" "01;31")
|
||||
;; GREP_COLORS is used in GNU grep 2.5.2 and later versions
|
||||
(setenv "GREP_COLORS" "mt=01;31:fn=:ln=:bn=:se=:sl=:cx=:ne"))
|
||||
(setq-local grep-num-matches-found 0)
|
||||
(set (make-local-variable 'compilation-exit-message-function)
|
||||
(lambda (status code msg)
|
||||
(if (eq status 'exit)
|
||||
;; This relies on the fact that `compilation-start'
|
||||
;; sets buffer-modified to nil before running the command,
|
||||
;; so the buffer is still unmodified if there is no output.
|
||||
(cond ((and (zerop code) (buffer-modified-p))
|
||||
'("finished (matches found)\n" . "matched"))
|
||||
((not (buffer-modified-p))
|
||||
'("finished with no matches found\n" . "no match"))
|
||||
(t
|
||||
(cons msg code)))
|
||||
(cons msg code))))
|
||||
'grep-exit-message)
|
||||
(run-hooks 'grep-setup-hook))
|
||||
|
||||
(defun grep-exit-message (status code msg)
|
||||
"Return a status message for grep results."
|
||||
(if (eq status 'exit)
|
||||
;; This relies on the fact that `compilation-start'
|
||||
;; sets buffer-modified to nil before running the command,
|
||||
;; so the buffer is still unmodified if there is no output.
|
||||
(cond ((and (zerop code) (buffer-modified-p))
|
||||
(if (> grep-num-matches-found 0)
|
||||
(cons (format "finished with %d matches found\n" grep-num-matches-found)
|
||||
"matched")
|
||||
'("finished with matches found\n" . "matched")))
|
||||
((not (buffer-modified-p))
|
||||
'("finished with no matches found\n" . "no match"))
|
||||
(t
|
||||
(cons msg code)))
|
||||
(cons msg code)))
|
||||
|
||||
(defun grep-filter ()
|
||||
"Handle match highlighting escape sequences inserted by the grep process.
|
||||
This function is called from `compilation-filter-hook'."
|
||||
@ -535,7 +550,8 @@ This function is called from `compilation-filter-hook'."
|
||||
(while (re-search-forward "\033\\[0?1;31m\\(.*?\\)\033\\[[0-9]*m" end 1)
|
||||
(replace-match (propertize (match-string 1)
|
||||
'face nil 'font-lock-face grep-match-face)
|
||||
t t))
|
||||
t t)
|
||||
(cl-incf grep-num-matches-found))
|
||||
;; Delete all remaining escape sequences
|
||||
(goto-char beg)
|
||||
(while (re-search-forward "\033\\[[0-9;]*[mK]" end 1)
|
||||
@ -775,6 +791,8 @@ This function is called from `compilation-filter-hook'."
|
||||
grep-hit-face)
|
||||
(set (make-local-variable 'compilation-error-regexp-alist)
|
||||
grep-regexp-alist)
|
||||
(set (make-local-variable 'compilation-mode-line-errors)
|
||||
grep-mode-line-matches)
|
||||
;; compilation-directory-matcher can't be nil, so we set it to a regexp that
|
||||
;; can never match.
|
||||
(set (make-local-variable 'compilation-directory-matcher) '("\\`a\\`"))
|
||||
|
Loading…
Reference in New Issue
Block a user