From: Richard M. Stallman Date: Sat, 17 Apr 2004 19:58:19 +0000 (+0000) Subject: (locate-file-completion): Handle nil in path-and-suffixes. X-Git-Tag: ttn-vms-21-2-B4~6762 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f2440e42fab3b236134b43a399bd47e21e88e5f6;p=emacs.git (locate-file-completion): Handle nil in path-and-suffixes. (file-truename): Expand all ~ constructs directly. (insert-directory): Delete any error msg output by the `insert-directory-program'. --- diff --git a/lisp/files.el b/lisp/files.el index 1a1b2d827be..6a406b6fbf0 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -616,6 +616,8 @@ PATH-AND-SUFFIXES is a pair of lists (DIRECTORIES . SUFFIXES)." (suffix (concat (regexp-opt (cdr path-and-suffixes) t) "\\'")) (string-dir (file-name-directory string))) (dolist (dir (car path-and-suffixes)) + (unless dir + (setq dir default-directory)) (if string-dir (setq dir (expand-file-name string-dir dir))) (when (file-directory-p dir) (dolist (file (file-name-all-completions @@ -668,14 +670,17 @@ Do not specify them in other calls." ;; PREV-DIRS can be a cons cell whose car is an alist ;; of truenames we've just recently computed. - ;; The last test looks dubious, maybe `+' is meant here? --simon. - (if (or (string= filename "") (string= filename "~") - (and (string= (substring filename 0 1) "~") - (string-match "~[^/]*" filename))) - (progn - (setq filename (expand-file-name filename)) - (if (string= filename "") - (setq filename "/")))) + (cond ((or (string= filename "") (string= filename "~")) + (setq filename (expand-file-name filename)) + (if (string= filename "") + (setq filename "/"))) + ((and (string= (substring filename 0 1) "~") + (string-match "~[^/]*/?" filename)) + (let ((first-part + (substring filename 0 (match-end 0))) + (rest (substring filename (match-end 0)))) + (setq filename (concat (expand-file-name first-part) rest))))) + (or counter (setq counter (list 100))) (let (done ;; For speed, remove the ange-ftp completion handler from the list. @@ -4307,6 +4312,8 @@ normally equivalent short `-D' option is just passed on to ;; If `insert-directory-program' failed, signal an error. (unless (eq 0 result) + ;; Delete the error message it may have output. + (delete-region beg (point)) ;; On non-Posix systems, we cannot open a directory, so ;; don't even try, because that will always result in ;; the ubiquitous "Access denied". Instead, show the