]> git.eshelyaron.com Git - emacs.git/commitdiff
(locate-file-completion): Handle nil in path-and-suffixes.
authorRichard M. Stallman <rms@gnu.org>
Sat, 17 Apr 2004 19:58:19 +0000 (19:58 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 17 Apr 2004 19:58:19 +0000 (19:58 +0000)
(file-truename): Expand all ~ constructs directly.
(insert-directory): Delete any error msg output by the
`insert-directory-program'.

lisp/files.el

index 1a1b2d827bef0ad3dd6030c6100155a50fd20161..6a406b6fbf01f7629672088b9ae99617756160b6 100644 (file)
@@ -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