;;; find-cmd.el --- Build a valid find(1) command with sexps
-;; Copyright (C) 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: Philip Jackson <phil@shellarchive.co.uk>
;; Version: 0.6
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; With this module you can build up a (hopefully) valid find(1)
-;; string ready for the command line. For example:
+;; string ready for the command line. For example:
;; (find-cmd '(prune (name ".svn" ".git" ".CVS"))
;; '(and (or (name "*.pl" "*.pm" "*.t")
;; -or -name '*.pm' -or -name '*.t' \\) -or -mtime '+1' \\) -and \\(
;; -fstype 'nfs' -or -fstype 'ufs' \\) \\)"
-(eval-when-compile (require 'cl))
+;;; Code:
(defconst find-constituents
'((and . find-and)
(ok . (1 find-command t))
(execdir . (1 find-command t))
(okdir . (1 find-command t)))
- "Holds details of each of the find options. The car of each
-alist is the name. The cdr is minimum args, the function used
-to join many occurences of the argument together, and whether or
-not to leave quotes off the string (non-nil means the string will
-be quoted).")
+ "Holds details of each of the find options.
+The car of each alist is the name. The cdr is minimum args, the
+function used to join many occurrences of the argument together,
+and whether or not to leave quotes off the string (non-nil means
+the string will be quoted).")
;;;###autoload
(defun find-cmd (&rest subfinds)
- "Initiate the building of a find command. For exmple:
+ "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\"\)\)\)\)
-`default-directory' is used as the initial search path. The
+`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)) " "
(concat "-not " (find-or (mapcar 'find-to-string form))))
(defun find-prune (form)
- "-or together FORM(s) 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\"\)
will produce (unwrapped):
(find-generic "true"))))
(defun find-generic (option &optional oper argcount args dont-quote)
- "This function allows an arbitrary string to be used as a
-form. OPTION is the name of the form, OPER is the function used
-to either OR or AND multiple results together. ARGCOUNT is the
-minimum of args that OPTION can receive and ARGS are the
-arguments for OPTION."
+ "Allow an arbitrary string to be used as a form.
+OPTION is the name of the form, OPER is the function used to either
+OR or AND multiple results together. ARGCOUNT is the minimum of
+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))
(let ((oper (or oper 'find-or)))
(defun find-command (form)
"For each item in FORM add a terminating semi-colon and turn
-them into valid switches. The result is -and(ed) together."
+them into valid switches. The result is -and(ed) together."
(find-and (mapcar (lambda (x)
(concat (find-to-string x) "\\; "))
form)))
(error "Sorry I don't know how to handle '%s'" (car form))))))))
(provide 'find-cmd)
+
+;; arch-tag: 9687fd9e-4e90-4022-864a-f904526e2046
+;;; find-cmd.el ends here