Function: lgrep

lgrep is an autoloaded, interactive and byte-compiled function defined in grep.el.gz.

Signature

(lgrep REGEXP &optional FILES DIR CONFIRM)

Documentation

Run grep, searching for REGEXP in FILES in directory DIR.

The search is limited to file names matching shell pattern FILES. FILES may use abbreviations defined in grep-files-aliases, e.g. entering ch is equivalent to *.[ch]. As whitespace triggers completion when entering a pattern, including it requires quoting, e.g. C-q (quoted-insert)<space>.

With C-u (universal-argument) prefix, you can edit the constructed shell command line before it is executed. With two C-u (universal-argument) prefixes, directly edit and run grep-command.

Collect output in the "*grep*" buffer. While grep runs asynchronously, you can use C-x ` (next-error) (M-x next-error), or RET (compile-goto-error) in the grep output buffer, to go to the lines where grep found matches.

This command shares argument histories with M-x rgrep (rgrep) and M-x grep (grep).

If CONFIRM is non-nil, the user will be given an opportunity to edit the command before it's run.

Probably introduced at or before Emacs version 22.1.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/grep.el.gz
;;;###autoload
(defun lgrep (regexp &optional files dir confirm)
  "Run grep, searching for REGEXP in FILES in directory DIR.
The search is limited to file names matching shell pattern FILES.
FILES may use abbreviations defined in `grep-files-aliases', e.g.
entering `ch' is equivalent to `*.[ch]'.  As whitespace triggers
completion when entering a pattern, including it requires
quoting, e.g. `\\[quoted-insert]<space>'.

With \\[universal-argument] prefix, you can edit the constructed shell command line
before it is executed.
With two \\[universal-argument] prefixes, directly edit and run `grep-command'.

Collect output in the \"*grep*\" buffer.  While grep runs asynchronously, you
can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
in the grep output buffer,
to go to the lines where grep found matches.

This command shares argument histories with \\[rgrep] and \\[grep].

If CONFIRM is non-nil, the user will be given an opportunity to edit the
command before it's run."
  (interactive
   (progn
     (grep-compute-defaults)
     (cond
      ((and grep-command (equal current-prefix-arg '(16)))
       (list (read-from-minibuffer "Run: " grep-command
				   nil nil 'grep-history)))
      ((not grep-template)
       (error "grep.el: No `grep-template' available"))
      (t (let* ((regexp (grep-read-regexp))
		(files (grep-read-files regexp))
		(dir (read-directory-name "In directory: "
					  nil default-directory t))
		(confirm (equal current-prefix-arg '(4))))
	   (list regexp files dir confirm))))))
  (when (and (stringp regexp) (> (length regexp) 0))
    (unless (and dir (file-accessible-directory-p dir))
      (setq dir default-directory))
    (let ((command regexp))
      (if (null files)
	  (if (string= command grep-command)
	      (setq command nil))
	(setq dir (file-name-as-directory (expand-file-name dir)))
	(unless (or (not grep-use-directories-skip)
                    (eq grep-use-directories-skip t))
	  (setq grep-use-directories-skip
		(grep-probe grep-program
			  `(nil nil nil "--directories=skip" "foo"
				,(null-device))
			  nil 1)))
	(setq command (grep-expand-template
		       grep-template
		       regexp
		       files
		       nil
		       (and grep-find-ignored-files
			    (concat " --exclude="
				    (mapconcat
                                     (lambda (ignore)
                                       (cond ((stringp ignore)
                                              (shell-quote-argument ignore))
                                             ((consp ignore)
                                              (and (funcall (car ignore) dir)
                                                   (shell-quote-argument
                                                    (cdr ignore))))))
				     grep-find-ignored-files
				     " --exclude=")))
		       (and (eq grep-use-directories-skip t)
			    '("--directories=skip"))))
	(when command
	  (if confirm
	      (setq command
		    (read-from-minibuffer "Confirm: "
					  command nil nil 'grep-history))
	    (add-to-history 'grep-history command))))
      (when command
	(let ((default-directory dir))
	  ;; Setting process-setup-function makes exit-message-function work
	  ;; even when async processes aren't supported.
          (grep--save-buffers)
	  (compilation-start
           (if (and grep-use-null-device null-device (null-device))
	       (concat command " " (null-device))
	     command)
	   'grep-mode))
	;; Set default-directory if we started lgrep in the *grep* buffer.
	(if (eq next-error-last-buffer (current-buffer))
	    (setq default-directory dir))))))