changeset 72173:691a901b4418

(grep-default-command): Catch errors from wildcard-to-regexp.
author Richard M. Stallman <rms@gnu.org>
date Sat, 29 Jul 2006 02:03:21 +0000
parents 7ceb8ae279c9
children a2038efe61ed
files lisp/progmodes/grep.el
diffstat 1 files changed, 23 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/grep.el	Sat Jul 29 02:00:26 2006 +0000
+++ b/lisp/progmodes/grep.el	Sat Jul 29 02:03:21 2006 +0000
@@ -465,28 +465,38 @@
       ""))
 
 (defun grep-default-command ()
+  "Compute the default grep command for C-u M-x grep to offer."
   (let ((tag-default (shell-quote-argument (grep-tag-default)))
+	;; This a regexp to match single shell arguments.
+	;; Could someone please add comments explaining it?
 	(sh-arg-re "\\(\\(?:\"\\(?:[^\"]\\|\\\\\"\\)+\"\\|'[^']+'\\|[^\"' \t\n]\\)+\\)")
 	(grep-default (or (car grep-history) grep-command)))
-    ;; Replace the thing matching for with that around cursor.
+    ;; In the default command, find the arg that specifies the pattern.
     (when (or (string-match
 	       (concat "[^ ]+\\s +\\(?:-[^ ]+\\s +\\)*"
 		       sh-arg-re "\\(\\s +\\(\\S +\\)\\)?")
 	       grep-default)
 	      ;; If the string is not yet complete.
 	      (string-match "\\(\\)\\'" grep-default))
-      (unless (or (not (stringp buffer-file-name))
-		  (when (match-beginning 2)
-		    (save-match-data
-		      (string-match
-		       (wildcard-to-regexp
-			(file-name-nondirectory
-			 (match-string 3 grep-default)))
-		       (file-name-nondirectory buffer-file-name)))))
-	(setq grep-default (concat (substring grep-default
-					      0 (match-beginning 2))
-				   " *."
-				   (file-name-extension buffer-file-name))))
+      ;; Maybe we will replace the pattern with the default tag.
+      ;; But first, maybe replace the file name pattern.
+      (condition-case nil
+	  (unless (or (not (stringp buffer-file-name))
+		      (when (match-beginning 2)
+			(save-match-data
+			  (string-match
+			   (wildcard-to-regexp
+			    (file-name-nondirectory
+			     (match-string 3 grep-default)))
+			   (file-name-nondirectory buffer-file-name)))))
+	    (setq grep-default (concat (substring grep-default
+						  0 (match-beginning 2))
+				       " *."
+				       (file-name-extension buffer-file-name))))
+	;; In case wildcard-to-regexp gets an error
+	;; from invalid data.
+	(error nil))
+      ;; Now replace the pattern with the default tag.
       (replace-match tag-default t t grep-default 1))))