]> code.delx.au - gnu-emacs/blobdiff - lisp/find-cmd.el
Add new function dom-remove-node
[gnu-emacs] / lisp / find-cmd.el
index 042a3840452fc8dab7dda04eadc81d7dc506b8df..9b595de9d81d6a73b86930c923df50d2ce390d70 100644 (file)
@@ -1,6 +1,6 @@
 ;;; find-cmd.el --- Build a valid find(1) command with sexps
 
-;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2016 Free Software Foundation, Inc.
 
 ;; Author: Philip Jackson <phil@shellarchive.co.uk>
 ;; Version: 0.6
@@ -39,6 +39,8 @@
 
 ;;; Code:
 
+(require 'grep)
+
 (defconst find-constituents
   '((and . find-and)
     (not . find-not)
@@ -138,63 +140,65 @@ the string will be quoted).")
   "Initiate the building of a find command.
 For example:
 
-\(find-cmd '\(prune \(name \".svn\" \".git\" \".CVS\"\)\)
-          '\(and \(or \(name \"*.pl\" \"*.pm\" \"*.t\"\)
-                    \(mtime \"+1\"\)\)
-                \(fstype \"nfs\" \"ufs\"\)\)\)\)
+\(find-cmd \\='(prune (name \".svn\" \".git\" \".CVS\"))
+          \\='(and (or (name \"*.pl\" \"*.pm\" \"*.t\")
+                    (mtime \"+1\"))
+                (fstype \"nfs\" \"ufs\"))))
 
 `default-directory' is used as the initial search path.  The
 result is a string that should be ready for the command line."
-  (concat
-   "find " (shell-quote-argument (expand-file-name default-directory)) " "
-           (cond
-            ((cdr subfinds)
-             (mapconcat 'find-to-string subfinds ""))
-            (t
-             (find-to-string (car subfinds))))))
+  ;; FIXME: Provide a version that returns a list of strings (ready to pass to
+  ;; call-process).
+  (concat find-program " "
+          (shell-quote-argument (expand-file-name default-directory)) " "
+          (cond
+           ((cdr subfinds)
+            (mapconcat #'find-to-string subfinds ""))
+           (t
+            (find-to-string (car subfinds))))))
 
 (defun find-and (form)
   "And FORMs together, so:
-  \(and \(mtime \"+1\"\) \(name \"something\"\)\)
+  (and (mtime \"+1\") (name \"something\"))
 will produce:
-  find . \\\( -mtime '+1' -and -name 'something' \\\)"
+  find . \\( -mtime +1 -and -name something \\)"
   (if (< (length form) 2)
       (find-to-string (car form))
       (concat "\\( "
-              (mapconcat 'find-to-string form "-and ")
+              (mapconcat #'find-to-string form "-and ")
               "\\) ")))
 
 (defun find-or (form)
   "Or FORMs together, so:
-  \(or \(mtime \"+1\"\) \(name \"something\"\)\)
+  (or (mtime \"+1\") (name \"something\"))
 will produce:
-  find . \\\( -mtime '+1' -or -name 'something' \\\)"
+  find . \\( -mtime +1 -or -name something \\)"
   (if (< (length form) 2)
       (find-to-string (car form))
       (concat "\\( "
-              (mapconcat 'find-to-string form "-or ")
+              (mapconcat #'find-to-string form "-or ")
               "\\) ")))
 
 (defun find-not (form)
   "Or FORMs together and prefix with a -not, so:
-  \(not \(mtime \"+1\"\) \(name \"something\"\)\)
+  (not (mtime \"+1\") (name \"something\"))
 will produce:
-  -not \\\( -mtime '+1' -or -name 'something' \\\)
+  -not \\( -mtime +1 -or -name something \\)
 If you wanted the FORMs -and(ed) together instead then this would
 suffice:
-  \(not \(and \(mtime \"+1\"\) \(name \"something\"\)\)\)"
-  (concat "-not " (find-or (mapcar 'find-to-string form))))
+  (not (and (mtime \"+1\") (name \"something\")))"
+  (concat "-not " (find-or (mapcar #'find-to-string form))))
 
 (defun find-prune (form)
-  "-or together FORMs postfix '-prune' and then -or that with a
+  "-or together FORMs postfix `-prune' and then -or that with a
 -true, so:
-  \(prune \(name \".svn\" \".git\"\)\) \(name \"*.pm\"\)
+  ((prune (name \".svn\" \".git\")) (name \"*.pm\"))
 will produce (unwrapped):
-  \\\( \\\( \\\( -name '.svn' -or -name '.git' \\\) /
-  -prune -or -true \\\) -and -name '*.pm' \\\)"
+  \\( \\( \\( -name .svn -or -name .git \\) /
+  -prune -or -true \\) -and -name *.pm \\)"
   (find-or
    (list
-    (concat (find-or (mapcar 'find-to-string form)) (find-generic "prune"))
+    (concat (find-or (mapcar #'find-to-string form)) (find-generic "prune"))
     (find-generic "true"))))
 
 (defun find-generic (option &optional oper argcount args dont-quote)
@@ -205,7 +209,7 @@ args that OPTION can receive and ARGS are the arguments for OPTION.
 If DONT-QUOTE is non-nil, arguments are quoted for passing them to
 the shell."
   (when (and (numberp argcount) (< (length args) argcount))
-    (error "'%s' needs at least %d arguments" option argcount))
+    (error "`%s' needs at least %d arguments" option argcount))
   (let ((oper (or oper 'find-or)))
     (if (and args (length args))
         (funcall oper (mapcar (lambda (x)
@@ -243,7 +247,7 @@ them into valid switches.  The result is -and(ed) together."
             (find-to-string
              (find-generic option oper argcnt (cdr form) dont-quote))))
          (t
-          (error "Sorry I don't know how to handle '%s'" (car form))))))))
+          (error "Sorry I don't know how to handle `%s'" (car form))))))))
 
 (provide 'find-cmd)