* lisp/progmodes/grep.el: Use lexical-binding.

(grep-expand-template): Pass explicit lexical env to `eval'.
(zrgrep): Let-bind grep-find-template explicitly.
This commit is contained in:
Stefan Monnier 2014-04-12 15:38:06 -04:00
parent 6c2453e038
commit f7993853c2
2 changed files with 19 additions and 13 deletions

View file

@ -1,5 +1,9 @@
2014-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/grep.el: Use lexical-binding.
(grep-expand-template): Pass explicit lexical env to `eval'.
(zrgrep): Let-bind grep-find-template explicitly.
* emacs-lisp/cl-lib.el (current-case-table): Remove setter.
* leim/quail/sisheng.el (sisheng-list): Use with-case-table.
@ -29,8 +33,8 @@
2014-04-12 Matthias Dahl <matthias.dahl@binary-island.eu>
* faces.el (make-face): Remove deprecated optional argument. The
conditional application of X resources is handled directly by
* faces.el (make-face): Remove deprecated optional argument.
The conditional application of X resources is handled directly by
make-face-x-resource-internal since Emacs 24.4.
(make-empty-face): Don't pass optional argument to make-face.

View file

@ -1,4 +1,4 @@
;;; grep.el --- run `grep' and display the results
;;; grep.el --- run `grep' and display the results -*- lexical-binding:t -*-
;; Copyright (C) 1985-1987, 1993-1999, 2001-2014 Free Software
;; Foundation, Inc.
@ -805,16 +805,20 @@ substitution string. Note dynamic scoping of variables.")
(defun grep-expand-template (template &optional regexp files dir excl)
"Patch grep COMMAND string replacing <C>, <D>, <F>, <R>, and <X>."
(let ((command template)
(cf case-fold-search)
(case-fold-search nil))
(let* ((command template)
(env `((cf . ,case-fold-search)
(excl . ,excl)
(dir . ,dir)
(files . ,files)
(regexp . ,regexp)))
(case-fold-search nil))
(dolist (kw grep-expand-keywords command)
(if (string-match (car kw) command)
(setq command
(replace-match
(or (if (symbolp (cdr kw))
(symbol-value (cdr kw))
(save-match-data (eval (cdr kw))))
(eval (cdr kw) env)
(save-match-data (eval (cdr kw) env)))
"")
t t command))))))
@ -1055,7 +1059,7 @@ to specify a command to run."
(setq default-directory dir)))))))
;;;###autoload
(defun zrgrep (regexp &optional files dir confirm grep-find-template)
(defun zrgrep (regexp &optional files dir confirm template)
"Recursively grep for REGEXP in gzipped FILES in tree rooted at DIR.
Like `rgrep' but uses `zgrep' for `grep-program', sets the default
file name to `*.gz', and sets `grep-highlight-matches' to `always'."
@ -1090,10 +1094,8 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'."
(list regexp files dir confirm grep-find-template)))))))
;; Set `grep-highlight-matches' to `always'
;; since `zgrep' puts filters in the grep output.
(let ((grep-highlight-matches 'always))
;; `rgrep' uses the dynamically bound value `grep-find-template'
;; from the argument `grep-find-template' whose value is computed
;; in the `interactive' spec.
(let ((grep-find-template template)
(grep-highlight-matches 'always))
(rgrep regexp files dir confirm)))
;;;###autoload