Mercurial > emacs
comparison lisp/dos-w32.el @ 18858:ad717015a2de
(find-buffer-file-type-coding-system)
(find-binary-process-coding-system, find-buffer-file-type-match):
New functions.
(find-buffer-file-type): Use find-buffer-file-type-match.
Add find-buffer-file-type-coding-system to file-coding-system-alist
as the default entry.
Add find-binary-process-coding-system to process-coding-system-alist
as the default entry.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 18 Jul 1997 22:54:23 +0000 |
parents | 6ea4d90cc76b |
children | 62090ffa4583 |
comparison
equal
deleted
inserted
replaced
18857:aaecd0858bb0 | 18858:ad717015a2de |
---|---|
62 ) | 62 ) |
63 "*Alist for distinguishing text files from binary files. | 63 "*Alist for distinguishing text files from binary files. |
64 Each element has the form (REGEXP . TYPE), where REGEXP is matched | 64 Each element has the form (REGEXP . TYPE), where REGEXP is matched |
65 against the file name, and TYPE is nil for text, t for binary.") | 65 against the file name, and TYPE is nil for text, t for binary.") |
66 | 66 |
67 ;; Return the pair matching filename on file-name-buffer-file-type-alist, | |
68 ;; or nil otherwise. | |
69 (defun find-buffer-file-type-match (filename) | |
70 (let ((alist file-name-buffer-file-type-alist) | |
71 (found nil)) | |
72 (let ((case-fold-search t)) | |
73 (setq filename (file-name-sans-versions filename)) | |
74 (while (and (not found) alist) | |
75 (if (string-match (car (car alist)) filename) | |
76 (setq found (car alist))) | |
77 (setq alist (cdr alist))) | |
78 found))) | |
79 | |
67 (defun find-buffer-file-type (filename) | 80 (defun find-buffer-file-type (filename) |
68 ;; First check if file is on an untranslated filesystem, then on the alist. | 81 ;; First check if file is on an untranslated filesystem, then on the alist. |
69 (if (untranslated-file-p filename) | 82 (if (untranslated-file-p filename) |
70 t ; for binary | 83 t ; for binary |
71 (let ((alist file-name-buffer-file-type-alist) | 84 (let ((match (find-buffer-file-type-match filename)) |
72 (found nil) | 85 (code)) |
73 (code nil)) | 86 (if (not match) |
74 (let ((case-fold-search t)) | 87 default-buffer-file-type |
75 (setq filename (file-name-sans-versions filename)) | 88 (setq code (cdr match)) |
76 (while (and (not found) alist) | 89 (cond ((memq code '(nil t)) code) |
77 (if (string-match (car (car alist)) filename) | 90 ((and (symbolp code) (fboundp code)) |
78 (setq code (cdr (car alist)) | 91 (funcall code filename))))))) |
79 found t)) | 92 |
80 (setq alist (cdr alist)))) | 93 (defun find-buffer-file-type-coding-system (command args) |
81 (if found | 94 "Choose a coding system for a file operation. |
82 (cond ((memq code '(nil t)) code) | 95 If COMMAND is 'insert-file-contents', the coding system is chosen based |
83 ((and (symbolp code) (fboundp code)) | 96 upon the filename, the contents of 'untranslated-filesystem-list' and |
84 (funcall code filename))) | 97 'file-name-buffer-file-type-alist', and whether the file exists: |
85 default-buffer-file-type)))) | 98 |
99 If it matches in 'untranslated-filesystem-list': 'no-conversion' | |
100 If it matches in 'file-name-buffer-file-type-alist': | |
101 If the match is t (for binary): 'no-conversion' | |
102 If the match is nil (for text): 'emacs-mule-dos' | |
103 Otherwise: | |
104 If the file exists: 'undecided' | |
105 If the file does not exist: 'emacs-mule-dos' | |
106 | |
107 If COMMAND is 'write-region', the coding system is chosen based | |
108 upon the value of 'buffer-file-type': If t, the coding system is | |
109 'no-conversion', otherwise it is 'emacs-mule-dos'." | |
110 (let ((op (nth 0 command)) | |
111 (target) | |
112 (binary) | |
113 (undecided nil)) | |
114 (cond ((eq op 'insert-file-contents) | |
115 (setq target (nth 1 command)) | |
116 (setq binary (find-buffer-file-type target)) | |
117 (if (not binary) | |
118 (setq undecided | |
119 (and (file-exists-p target) | |
120 (not (find-buffer-file-type-match target)))))) | |
121 ((eq op 'write-region) | |
122 (setq binary buffer-file-type))) | |
123 (cond (binary '(no-conversion . no-conversion)) | |
124 (undecided '(undecided . undecided)) | |
125 (t '(emacs-mule-dos . emacs-mule-dos))))) | |
126 | |
127 (modify-coding-system-alist 'file "" 'find-buffer-file-type-coding-system) | |
86 | 128 |
87 (defun find-file-binary (filename) | 129 (defun find-file-binary (filename) |
88 "Visit file FILENAME and treat it as binary." | 130 "Visit file FILENAME and treat it as binary." |
89 (interactive "FFind file binary: ") | 131 (interactive "FFind file binary: ") |
90 (let ((file-name-buffer-file-type-alist '(("" . t)))) | 132 (let ((file-name-buffer-file-type-alist '(("" . t)))) |
164 (interactive "fUntranslated file system: ") | 206 (interactive "fUntranslated file system: ") |
165 (setq untranslated-filesystem-list | 207 (setq untranslated-filesystem-list |
166 (delete (untranslated-canonical-name filesystem) | 208 (delete (untranslated-canonical-name filesystem) |
167 untranslated-filesystem-list))) | 209 untranslated-filesystem-list))) |
168 | 210 |
211 ;; Process I/O decoding and encoding. | |
212 | |
213 (defun find-binary-process-coding-system (op args) | |
214 "Choose a coding system for process I/O. | |
215 The coding system for decode is 'no-conversion' if 'binary-process-output' | |
216 is non-nil, and 'emacs-mule-dos' otherwise. Similarly, the coding system | |
217 for encode is 'no-conversion' if 'binary-process-input' is non-nil, | |
218 and 'emacs-mule-dos' otherwise." | |
219 (let ((decode 'emacs-mule-dos) | |
220 (encode 'emacs-mule-dos)) | |
221 (if binary-process-output | |
222 (setq decode 'no-conversion)) | |
223 (if binary-process-input | |
224 (setq encode 'no-conversion)) | |
225 (cons decode encode))) | |
226 | |
227 (modify-coding-system-alist 'process "" 'find-binary-process-coding-system) | |
228 | |
229 | |
169 (provide 'dos-w32) | 230 (provide 'dos-w32) |
170 | 231 |
171 ;;; dos-w32.el ends here | 232 ;;; dos-w32.el ends here |