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))
(user-error "Unable to open directory: %s" dir))
(unless (string-equal (file-remote-p dir) (file-remote-p default-directory))
(let ((default-directory dir))
(grep-compute-defaults)))
(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
(when-let* ((ignores (grep-find-ignored-files dir)))
(concat " --exclude="
(mapconcat
(lambda (ignore)
(shell-quote-argument ignore grep-quoting-style))
ignores
" --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))))))