From f7993853c2512d2cb8067c37ea01db4175e37be3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 12 Apr 2014 15:38:06 -0400 Subject: [PATCH] * lisp/progmodes/grep.el: Use lexical-binding. (grep-expand-template): Pass explicit lexical env to `eval'. (zrgrep): Let-bind grep-find-template explicitly. --- lisp/ChangeLog | 8 ++++++-- lisp/progmodes/grep.el | 24 +++++++++++++----------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5b221ed994c..fd433562d0e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2014-04-12 Stefan Monnier + * 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 - * 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. diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 99629450c1b..181c5e5dba5 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -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 , , , , and ." - (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 -- 2.39.2