changeset 78043:0ef88721691e

(insert-directory): If an invalid regexp error is thrown, try using FILE as a literal file name, not a wildcard. Check for FILE as an existing file, not just a directory.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 23 Jun 2007 11:23:53 +0000
parents a4fc864cfb2d
children fc9aecac2b6d
files lisp/ls-lisp.el
diffstat 1 files changed, 18 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ls-lisp.el	Sat Jun 23 10:50:07 2007 +0000
+++ b/lisp/ls-lisp.el	Sat Jun 23 11:23:53 2007 +0000
@@ -216,6 +216,7 @@
     ;; We need the directory in order to find the right handler.
     (let ((handler (find-file-name-handler (expand-file-name file)
 					   'insert-directory))
+	  (orig-file file)
 	  wildcard-regexp)
       (if handler
 	  (funcall handler 'insert-directory file switches
@@ -230,9 +231,9 @@
 	;; there is no wildcard, only a directory name.
 	(if (and ls-lisp-support-shell-wildcards
 		 (string-match "[[?*]" file)
-		 ;; Prefer an existing directory to wildcards, like
+		 ;; Prefer an existing file to wildcards, like
 		 ;; dired-noselect does.
-		 (not (file-directory-p file)))
+		 (not (file-exists-p file)))
 	    (progn
 	      (or (not (eq (aref file (1- (length file))) ?/))
 		  (setq file (substring file 0 (1- (length file)))))
@@ -244,9 +245,21 @@
 		    (file-name-nondirectory file))
 		  file (file-name-directory file))
 	  (if (memq ?B switches) (setq wildcard-regexp "[^~]\\'")))
-	(ls-lisp-insert-directory
-	 file switches (ls-lisp-time-index switches)
-	 wildcard-regexp full-directory-p)
+	(condition-case err
+	    (ls-lisp-insert-directory
+	     file switches (ls-lisp-time-index switches)
+	     wildcard-regexp full-directory-p)
+	  (invalid-regexp
+	   ;; Maybe they wanted a literal file that just happens to
+	   ;; use characters special to shell wildcards.
+	   (if (equal (cadr err) "Unmatched [ or [^")
+	       (progn
+		 (setq wildcard-regexp (if (memq ?B switches) "[^~]\\'")
+		       file (file-relative-name orig-file))
+		 (ls-lisp-insert-directory
+		  file switches (ls-lisp-time-index switches)
+		  nil full-directory-p))
+	     (signal (car err) (cdr err)))))
 	;; Try to insert the amount of free space.
 	(save-excursion
 	  (goto-char (point-min))