From 43bed6688c95bbdb292dae7b0c155c9a5a73f7e3 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 23 Jun 2007 11:24:56 +0000 Subject: [PATCH] (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. --- lisp/ChangeLog | 6 ++++++ lisp/ls-lisp.el | 23 ++++++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 868bc7af2e8..fbf0ba84d7d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2007-06-23 Eli Zaretskii + + * 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 * ruler-mode.el (ruler-mode): Prevent clobbering the original diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 5d6d68e3271..b4cd485d7a0 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -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)) -- 2.39.2