emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-25 8637f3d: (semantic-symref-derive-find-filepattern


From: Stefan Monnier
Subject: [Emacs-diffs] emacs-25 8637f3d: (semantic-symref-derive-find-filepatterns): Return a list
Date: Sat, 02 Jan 2016 18:03:49 +0000

branch: emacs-25
commit 8637f3d0fa8d2f7325313abd66edb072b1a69db7
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    (semantic-symref-derive-find-filepatterns): Return a list
    
    * lisp/cedet/semantic/symref/grep.el
    (semantic-symref-derive-find-filepatterns): Return a list.
    (semantic-symref-perform-search): Quote the result here once and for all.
---
 lisp/cedet/semantic/symref/grep.el |   39 +++++++++++++++--------------------
 1 files changed, 17 insertions(+), 22 deletions(-)

diff --git a/lisp/cedet/semantic/symref/grep.el 
b/lisp/cedet/semantic/symref/grep.el
index 54b5383..3b544d9 100644
--- a/lisp/cedet/semantic/symref/grep.el
+++ b/lisp/cedet/semantic/symref/grep.el
@@ -53,6 +53,8 @@ and those hits returned.")
 See find -name man page for format.")
 
 (defun semantic-symref-derive-find-filepatterns (&optional mode)
+  ;; FIXME: This should be moved to grep.el, where it could be used
+  ;; for "C-u M-x grep" as well.
   "Derive a list of file patterns for the current buffer.
 Looks first in `semantic-symref-filepattern-alist'.  If it is not
 there, it then looks in `auto-mode-alist', and attempts to derive something
@@ -64,28 +66,20 @@ Optional argument MODE specifies the `major-mode' to test."
     (when (not pat)
       ;; No hit, try auto-mode-alist.
       (dolist (X auto-mode-alist)
-       (when (eq (cdr X) mode)
-         ;; Only take in simple patterns, so try to convert this one.
-         (let ((Xp
-                (cond ((string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X))
-                       (concat "*." (match-string 1 (car X))))
-                      (t nil))))
-           (when Xp
-             (setq pat (cons Xp pat))))
-         )))
+       (when (and (eq (cdr X) mode)
+                   ;; Only take in simple patterns, so try to convert this one.
+                   (string-match "\\\\\\.\\([^\\'>]+\\)\\\\'" (car X)))
+          (push (concat "*." (match-string 1 (car X))) pat))))
     ;; Convert the list into some find-flags.
-    (cond ((= (length pat) 1)
-          (concat "-name " (shell-quote-argument (car pat))))
-         ((consp pat)
-          (concat (shell-quote-argument "(") " "
-                  (mapconcat (lambda (s)
-                               (concat "-name " (shell-quote-argument s)))
-                             pat
-                             " -o ")
-                  " " (shell-quote-argument ")")))
-         (t
-          (error "Customize `semantic-symref-filepattern-alist' for %s" 
major-mode))
-         )))
+    (if (null pat)
+        (error "Customize `semantic-symref-filepattern-alist' for %S"
+               major-mode)
+      (let ((args `("-name" ,(car pat))))
+        (if (null (cdr args))
+            args
+          `("(" ,@args
+            ,@(apply #'nconc (mapcar (lambda (s) `("-o" "-name" ,s)) pat))
+            ")"))))))
 
 (defvar grepflags)
 (defvar greppattern)
@@ -147,7 +141,8 @@ This shell should support pipe redirect syntax."
   ;; Find the root of the project, and do a find-grep...
   (let* (;; Find the file patterns to use.
         (rootdir (semantic-symref-calculate-rootdir))
-        (filepattern (semantic-symref-derive-find-filepatterns))
+        (filepatterns (semantic-symref-derive-find-filepatterns))
+         (filepattern (mapconcat #'shell-quote-argument filepatterns " "))
         ;; Grep based flags.
         (grepflags (cond ((eq (oref tool :resulttype) 'file)
                            "-l ")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]