X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5bd8042b82155978a3867169c886cc750d0be5b0..c9586acc9719f5af71c61a24b7c5c40eb1b0905f:/lisp/find-cmd.el diff --git a/lisp/find-cmd.el b/lisp/find-cmd.el index 75f9ac3e53..a41a32762d 100644 --- a/lisp/find-cmd.el +++ b/lisp/find-cmd.el @@ -1,16 +1,16 @@ ;;; find-cmd.el --- Build a valid find(1) command with sexps -;; Copyright (C) 2008 Free Software Foundation, Inc. +;; Copyright (C) 2008-2013 Free Software Foundation, Inc. ;; Author: Philip Jackson ;; 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 @@ -18,14 +18,12 @@ ;; 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 . ;;; 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") @@ -65,6 +63,7 @@ (cnewer . (1)) (ctime . (1)) (empty . (0)) + (executable . (0)) (false . (0)) (fstype . (1)) (gid . (1)) @@ -72,37 +71,43 @@ (ilname . (1)) (iname . (1)) (inum . (1)) - (iwholename . (1)) + (ipath . (1)) (iregex . (1)) + (iwholename . (1)) (links . (1)) (lname . (1)) (mmin . (1)) (mtime . (1)) (name . (1)) (newer . (1)) - (nouser . (0)) (nogroup . (0)) + (nouser . (0)) (path . (1)) (perm . (0)) + (readable . (0)) (regex . (1)) - (wholename . (1)) + (samefile . (1)) (size . (1)) (true . (0)) (type . (1)) (uid . (1)) (used . (1)) (user . (1)) + (wholename . (1)) + (writable . (0)) (xtype . (nil)) ;; normal options (always true) + (daystart . (0)) (depth . (0)) (maxdepth . (1)) (mindepth . (1)) (mount . (0)) (noleaf . (0)) - (xdev . (0)) (ignore_readdir_race . (0)) (noignore_readdir_race . (0)) + (regextype . (1)) + (xdev . (0)) ;; actions (delete . (0)) @@ -122,22 +127,23 @@ (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)) " " @@ -180,7 +186,7 @@ suffice: (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): @@ -192,11 +198,12 @@ 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))) @@ -213,7 +220,7 @@ arguments for OPTION." (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))) @@ -240,5 +247,4 @@ them into valid switches. The result is -and(ed) together." (provide 'find-cmd) -;; arch-tag: 9687fd9e-4e90-4022-864a-f904526e2046 ;;; find-cmd.el ends here