]> git.eshelyaron.com Git - emacs.git/commitdiff
(insert-directory): If an invalid regexp error is thrown, try using FILE
authorEli Zaretskii <eliz@gnu.org>
Sat, 23 Jun 2007 11:24:56 +0000 (11:24 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 23 Jun 2007 11:24:56 +0000 (11:24 +0000)
as a literal file name, not a wildcard.
Check for FILE as an existing file, not just a directory.

lisp/ChangeLog
lisp/ls-lisp.el

index 868bc7af2e87800b61f9496c2fba175708b5c840..fbf0ba84d7d4b39fb15b69e02bb3b14db0b0a7f4 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-23  Eli Zaretskii  <eliz@gnu.org>
+
+       * ls-lisp.el (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.
+
 2007-06-23  Juanma Barranquero  <lekktu@gmail.com>
 
        * ruler-mode.el (ruler-mode): Prevent clobbering the original
index 5d6d68e32711274c57718636dcd9b5ac21c301cd..b4cd485d7a0925df79ea7c42ce1b74c8052fd8aa 100644 (file)
@@ -216,6 +216,7 @@ that work are: A a c i r S s t u U X g G B C R and F partly."
     ;; 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 @@ that work are: A a c i r S s t u U X g G B C R and F partly."
        ;; 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 @@ that work are: A a c i r S s t u U X g G B C R and F partly."
                    (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))