:type 'string
:group 'file-cache)
+(defcustom file-cache-find-command-posix-flag 'not-defined
+ "*Set to t, if `file-cache-find-command' handles wildcards POSIX style.
+This variable is automatically set to nil or non-nil
+if it has the initial value `not-defined' whenever you first
+call the `file-cache-add-directory-using-find'.
+
+Under Windows operating system where Cygwin is available, this value
+should be t."
+ :type '(choice (const :tag "Yes" t)
+ (const :tag "No" nil)
+ (const :tag "Unknown" not-defined))
+ :group 'file-cache)
+
(defcustom file-cache-locate-command "locate"
"*External program used by `file-cache-add-directory-using-locate'."
:type 'string
;; Filter out files we don't want to see
(mapcar
'(lambda (file)
- (mapcar
- '(lambda (regexp)
- (if (string-match regexp file)
- (setq dir-files (delq file dir-files))))
- file-cache-filter-regexps))
+ (if (file-directory-p file)
+ (setq dir-files (delq file dir-files))
+ (mapcar
+ '(lambda (regexp)
+ (if (string-match regexp file)
+ (setq dir-files (delq file dir-files))))
+ file-cache-filter-regexps)))
dir-files)
(file-cache-add-file-list dir-files))))
file-cache-alist)))
)))
+(defun file-cache-find-posix-p ()
+ "Check if `file-cache-find-command' handles wildcards POSIX style."
+ (or (not (memq system-type '(ms-dos windows-nt))) ;; Include all POSIX systems.
+ (with-temp-buffer ;; Cygwin?
+ (call-process file-cache-find-command
+ nil
+ (current-buffer)
+ nil
+ "--version")
+ (goto-char (point-min))
+ ;; Cygwin
+ (if (re-search-forward "GNU" nil t)
+ (buffer-string)))))
+
(defun file-cache-add-directory-using-find (directory)
"Use the `find' command to add files to the file cache.
Find is run in DIRECTORY."
(interactive "DAdd files under directory: ")
(let ((dir (expand-file-name directory)))
+ (if (eq file-cache-find-command-posix-flag 'not-defined)
+ (setq file-cache-find-command-posix-flag (file-cache-find-posix-p)))
(set-buffer (get-buffer-create file-cache-buffer))
(erase-buffer)
(call-process file-cache-find-command nil
(get-buffer file-cache-buffer) nil
dir "-name"
- (if (eq system-type 'windows-nt) "'*'" "*")
+ (cond
+ (file-cache-find-command-posix-flag
+ "\\*")
+ ((eq system-type 'windows-nt)
+ "'*'")
+ (t
+ "*"))
"-print")
(file-cache-add-from-file-cache-buffer)))