aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa1998-03-03 01:35:39 +0000
committerKenichi Handa1998-03-03 01:35:39 +0000
commit73ba53dc85bde59ad3682dc6af9b7ecf5f425576 (patch)
tree7b3a98f4224f9ca1ebe2755318b62f5564c3dcf0
parent5280b5956058c1afeaab96f52febcb2641a280bb (diff)
downloademacs-73ba53dc85bde59ad3682dc6af9b7ecf5f425576.tar.gz
emacs-73ba53dc85bde59ad3682dc6af9b7ecf5f425576.zip
(insert-directory): Bind coding-system-for-read to
file-name-coding-system or default-file-name-coding-system if enable-multibyte-characters is non-nil
-rw-r--r--lisp/files.el123
1 files changed, 64 insertions, 59 deletions
diff --git a/lisp/files.el b/lisp/files.el
index a3ea8adac28..c25799990d7 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2984,65 +2984,70 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'."
2984 wildcard full-directory-p) 2984 wildcard full-directory-p)
2985 (if (eq system-type 'vax-vms) 2985 (if (eq system-type 'vax-vms)
2986 (vms-read-directory file switches (current-buffer)) 2986 (vms-read-directory file switches (current-buffer))
2987 (or (= 0 2987 (let* ((coding-system-for-read
2988 (if wildcard 2988 (and enable-multibyte-characters
2989 ;; Run ls in the directory of the file pattern we asked for. 2989 (or file-name-coding-system
2990 (let ((default-directory 2990 default-file-name-coding-system)))
2991 (if (file-name-absolute-p file) 2991 (result
2992 (file-name-directory file) 2992 (if wildcard
2993 (file-name-directory (expand-file-name file)))) 2993 ;; Run ls in the directory of the file pattern we asked for.
2994 (pattern (file-name-nondirectory file)) 2994 (let ((default-directory
2995 (beg 0)) 2995 (if (file-name-absolute-p file)
2996 ;; Quote some characters that have special meanings in shells; 2996 (file-name-directory file)
2997 ;; but don't quote the wildcards--we want them to be special. 2997 (file-name-directory (expand-file-name file))))
2998 ;; We also currently don't quote the quoting characters 2998 (pattern (file-name-nondirectory file))
2999 ;; in case people want to use them explicitly to quote 2999 (beg 0))
3000 ;; wildcard characters. 3000 ;; Quote some characters that have special meanings in shells;
3001 (while (string-match "[ \t\n;<>&|()#$]" pattern beg) 3001 ;; but don't quote the wildcards--we want them to be special.
3002 (setq pattern 3002 ;; We also currently don't quote the quoting characters
3003 (concat (substring pattern 0 (match-beginning 0)) 3003 ;; in case people want to use them explicitly to quote
3004 "\\" 3004 ;; wildcard characters.
3005 (substring pattern (match-beginning 0))) 3005 (while (string-match "[ \t\n;<>&|()#$]" pattern beg)
3006 beg (1+ (match-end 0)))) 3006 (setq pattern
3007 (call-process shell-file-name nil t nil 3007 (concat (substring pattern 0 (match-beginning 0))
3008 "-c" (concat "\\" ;; Disregard shell aliases! 3008 "\\"
3009 insert-directory-program 3009 (substring pattern (match-beginning 0)))
3010 " -d " 3010 beg (1+ (match-end 0))))
3011 (if (stringp switches) 3011 (call-process shell-file-name nil t nil
3012 switches 3012 "-c" (concat "\\";; Disregard shell aliases!
3013 (mapconcat 'identity switches " ")) 3013 insert-directory-program
3014 " -- " 3014 " -d "
3015 (encode-coding-string 3015 (if (stringp switches)
3016 pattern 3016 switches
3017 file-name-coding-system t)))) 3017 (mapconcat 'identity switches " "))
3018 ;; SunOS 4.1.3, SVr4 and others need the "." to list the 3018 " -- "
3019 ;; directory if FILE is a symbolic link. 3019 (encode-coding-string
3020 (apply 'call-process 3020 pattern
3021 insert-directory-program nil t nil 3021 file-name-coding-system t))))
3022 (let (list) 3022 ;; SunOS 4.1.3, SVr4 and others need the "." to list the
3023 (if (listp switches) 3023 ;; directory if FILE is a symbolic link.
3024 (setq list switches) 3024 (apply 'call-process
3025 (if (not (equal switches "")) 3025 insert-directory-program nil t nil
3026 (progn 3026 (let (list)
3027 ;; Split the switches at any spaces 3027 (if (listp switches)
3028 ;; so we can pass separate options as separate args. 3028 (setq list switches)
3029 (while (string-match " " switches) 3029 (if (not (equal switches ""))
3030 (setq list (cons (substring switches 0 (match-beginning 0)) 3030 (progn
3031 list) 3031 ;; Split the switches at any spaces
3032 switches (substring switches (match-end 0)))) 3032 ;; so we can pass separate options as separate args.
3033 (setq list (nreverse (cons switches list)))))) 3033 (while (string-match " " switches)
3034 (append list 3034 (setq list (cons (substring switches 0 (match-beginning 0))
3035 ;; Avoid lossage if FILE starts with `-'. 3035 list)
3036 '("--") 3036 switches (substring switches (match-end 0))))
3037 (list 3037 (setq list (nreverse (cons switches list))))))
3038 (encode-coding-string 3038 (append list
3039 (if full-directory-p 3039 ;; Avoid lossage if FILE starts with `-'.
3040 (concat (file-name-as-directory file) ".") 3040 '("--")
3041 file) 3041 (list
3042 file-name-coding-system t))))))) 3042 (encode-coding-string
3043 ;; We get here if ls failed. 3043 (if full-directory-p
3044 ;; Access the file to get a suitable error. 3044 (concat (file-name-as-directory file) ".")
3045 (access-file file "Reading directory")))))) 3045 file)
3046 file-name-coding-system t))))))))
3047 (if (/= result 0)
3048 ;; We get here if ls failed.
3049 ;; Access the file to get a suitable error.
3050 (access-file file "Reading directory")))))))
3046 3051
3047(defvar kill-emacs-query-functions nil 3052(defvar kill-emacs-query-functions nil
3048 "Functions to call with no arguments to query about killing Emacs. 3053 "Functions to call with no arguments to query about killing Emacs.