changeset 81584:95b281a8d13c

(insert-directory): If an invalid regexp error is thrown, try using FILE as a literal file name, not a wildcard.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 23 Jun 2007 11:14:45 +0000
parents b31da370880d
children e976e955eb68
files lisp/ls-lisp.el
diffstat 1 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ls-lisp.el	Sat Jun 23 10:27:31 2007 +0000
+++ b/lisp/ls-lisp.el	Sat Jun 23 11:14:45 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
@@ -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))