1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-03 11:33:37 +00:00

(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'.
This commit is contained in:
Richard M. Stallman 2004-04-17 19:58:19 +00:00
parent 95c12694a4
commit f2440e42fa

View 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