;;; grep.el --- run compiler as inferior of Emacs, parse error messages
-;; Copyright (C) 1985, 86, 87, 93, 94, 95, 96, 97, 98, 1999, 2001, 02, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+;; 2001, 2002, 2004 Free Software Foundation, Inc.
;; Author: Roland McGrath <roland@gnu.org>
;; Maintainer: FSF
(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-mode)
+ (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)
\\(?:-\\(?:\\([0-9]+\\)\\3\\)?\\.?\\([0-9]+\\)?\\)?[:) \t]" 1 (2 . 5) (4 . 6))
("^\\(.+?\\)[:(]+\\([0-9]+\\)\\([:)]\\).*?\\(\033\\[01;41m\\)\\(.*?\\)\\(\033\\[00m\\)"
1 2
+ ;; Calculate column positions (beg . end) of first grep match on a line
((lambda ()
(setq compilation-error-screen-columns nil)
(- (match-beginning 5) (match-end 3) 8))
.
- (lambda () (- (match-end 5) (match-end 3) 8)))
- nil nil
- (4 (list 'face nil 'invisible t 'intangible t))
- (5 (list 'face compilation-column-face))
- (6 (list 'face nil 'invisible t 'intangible t))
- ;; highlight other matches on the same line
- ("\\(\033\\[01;41m\\)\\(.*?\\)\\(\033\\[00m\\)"
- nil nil
- (1 (list 'face nil 'invisible t 'intangible t))
- (2 (list 'face compilation-column-face) t)
- (3 (list 'face nil 'invisible t 'intangible t))))
+ (lambda () (- (match-end 5) (match-end 3) 8))))
("^Binary file \\(.+\\) matches$" 1 nil nil 1))
"Regexp used to match grep hits. See `compilation-error-regexp-alist'.")
("^Grep \\(exited abnormally\\) with code \\([0-9]+\\).*"
(0 '(face nil message nil help-echo nil mouse-face nil) t)
(1 compilation-warning-face)
- (2 compilation-line-face)))
+ (2 compilation-line-face))
+ ;; Highlight grep matches and delete markers
+ ("\\(\033\\[01;41m\\)\\(.*?\\)\\(\033\\[00m\\)"
+ (2 compilation-column-face)
+ ((lambda (p))
+ (progn
+ ;; Delete markers with `replace-match' because it updates
+ ;; the match-data, whereas `delete-region' would render it obsolete.
+ (replace-match "" t t nil 3)
+ (replace-match "" t t nil 1)))))
"Additional things to highlight in grep output.
This gets tacked on the end of the generated expressions.")
(defun grep-default-command ()
(let ((tag-default
- (funcall (or find-tag-default-function
- (get major-mode 'find-tag-default-function)
- 'find-tag-default)))
+ (shell-quote-argument
+ (or (funcall (or find-tag-default-function
+ (get major-mode 'find-tag-default-function)
+ 'find-tag-default))
+ "")))
(sh-arg-re "\\(\\(?:\"\\(?:[^\"]\\|\\\\\"\\)+\"\\|'[^']+'\\|[^\"' \t\n]\\)+\\)")
(grep-default (or (car grep-history) grep-command)))
;; Replace the thing matching for with that around cursor.
0 (match-beginning 2))
" *."
(file-name-extension buffer-file-name))))
- (replace-match (or tag-default "") t t grep-default 1))))
+ (replace-match tag-default t t grep-default 1))))
;;;###autoload
(defun grep (command-args &optional highlight-regexp)
command-args)
'grep-mode nil highlight-regexp)))
-;;; This doesn't work:
-;;; ###autoload (autoload 'grep-mode "grep" nil t)
-;;; The ostensibly correct result is nonetheless opaque to the accounting
-;;; done in `generate-file-autoloads'; in loaddefs.el, the generated elisp is
-;;; correct but the generated header comment for grep.el lacks `grep-mode'.
-;;; This approach also doesn't help other users of `define-compilation-mode'
-;;; who wish to autoload.
-;;;
-;;; Better to extend autoload.el to grok `define-compilation-mode'.
-
-;;;###autoload
(define-compilation-mode grep-mode "Grep"
"Sets `grep-last-buffer' and `compilation-window-height'."
(setq grep-last-buffer (current-buffer))
(provide 'grep)
-;;; arch-tag: 5a5b9169-a79d-4f38-9c38-f69615f39c4d
+;; arch-tag: 5a5b9169-a79d-4f38-9c38-f69615f39c4d
;;; grep.el ends here